首页 > 解决方案 > Azure ML Experiment Batch Webservice 调用失败,输出扩展无效

问题描述

我有一个 Azure 网络作业,它通过 HttpRequests 调用 ML 训练实验,利用 ML 门户网站中生成的代码:

var request = new BatchExecutionRequest()
            {
                Inputs = new Dictionary<string, AzureBlobDataReference>() {
                    {
                        "input1",
                        new AzureBlobDataReference()
                        {
                            ConnectionString = _connectionString,
                            RelativeLocation = $"{_containerName}/{experimentId}/{tenantId}/{trainingDataFileName}"
                        }
                    },
                },

                Outputs = new Dictionary<string, AzureBlobDataReference>() {
                    {
                        "output1",
                        new AzureBlobDataReference()
                        {
                            ConnectionString = "azureStorageConnectionString",
                            RelativeLocation = $"{_containerName}/{experimentId}/{tenantId}/Model_2018421.ilearner"
                        }
                    },
                },

                GlobalParameters = new Dictionary<string, string>()
                {
                }
            };

但是,请求失败并显示以下消息:

Blob 参考:experiments/experimentId/TenantId/Model_2018421.ilearner 的文件扩展名无效或丢失。此输出类型支持的文件扩展名是:\\".csv、.tsv、.arff\\"

我对此感到非常困惑,因为如果我期望一个训练有素的模型使用“.ilearner”作为模型的文件扩展名,那么它在所有地方的文档都是正确的。

我已经看到这个问题询问有关利用 DataFactory 的相同错误,以及 datascience.stackexchange上的这个问题。两人都没有任何线索、答案或其他后续行动。

任何有关我所缺少的见解将不胜感激!

标签: c#restazureazure-machine-learning-studio

解决方案


对于任何正在寻找一天中“不要想太多”的人:

我需要提供两个输出 blob 文件引用:

var request = new BatchExecutionRequest()
            {
                Inputs = new Dictionary<string, AzureBlobDataReference>() {
                    {
                        "input1",
                        new AzureBlobDataReference()
                        {
                            ConnectionString = _connectionString,
                            RelativeLocation = $"{_containerName}/{experimentId}/{tenantId}/{trainingDataFileName}.csv"
                        }
                    },
                },

                Outputs = new Dictionary<string, AzureBlobDataReference>() {
                    {
                        "output1",
                        new AzureBlobDataReference()
                        {
                            ConnectionString = _connectionString,
                            RelativeLocation = $"{_containerName}/{experimentId}/{tenantId}/{outputFileNameCsv}.csv"
                        }
                    },
                    {
                        "output2",
                        new AzureBlobDataReference()
                        {
                            ConnectionString = _connectionString,
                            RelativeLocation = $"{_containerName}/{experimentId}/{tenantId}/{outputFileNameIlearner}.ilearner"
                        }
                    },
                },

                GlobalParameters = new Dictionary<string, string>()
                {
                }
            };

美式英语中有句老话说不做假设,我假设第二个输出是批处理操作中使用的可选参数。由于我实际上并没有从每次调用中寻找多个结果,因此我认为删除第二个输出参数是安全的。

TL/DR:保留 Web 服务门户的“使用”选项卡生成的所有参数,并确保第一个参数是 .csv 文件引用。


推荐阅读