Azure 机器学习 Web 服务不使用传递的 .learner 模型
Azure MachineLearning WebService Not Using Passed .ilearner Model
我们目前正在努力使 Azure MachineLearning Studio 试验可操作。
我们最近的迭代有一个 web 作业,它接受队列消息、获取一些数据来训练模型,并使用 ML 实验 web 服务将经过训练的模型放在 blob 位置。
第二个 web 作业接受队列消息,提取要在预测实验中使用的数据,获取经过训练的 .ilearner 模型的位置路径,然后使用该 ML 实验 web 服务。
用于做预测的数据作为入参传入,存储账户名、key、.ilearner路径均作为全局参数传入--根据数据科学家定义的字典对象提供。
一切似乎 正常工作——除了在某些情况下,预测实验失败,并且错误消息清楚地表明正在使用错误的 .ilearner 文件。
当一个不存在的 blob 路径传递给实验 web 服务时,错误消息反映没有这样的 blob,所以很明显 web 服务至少在验证 .ilearner 的存在。
数据科学家可以在本地 运行,但在通过 PowerShell 在本地导出 .ilearner 文件时必须更改其名称。确保每个经过训练的模型都具有唯一的文件名并未解决此问题。
当我在 Azure 存储资源管理器中查看所有文件时,它们似乎正在根据上次修改日期按预期进行更新。这几乎就像在某处没有被正确覆盖的 .ilearner 的缓存版本。
在排除了所有传递错误文件的可能性后,我们的数据科学家仔细研究了实验本身。他发现它默认为他在开发中使用的一种硬编码 .ilearner 路径。
在某个时间点,他创建了 web 服务参数来覆盖这个值(因此我在我的 web 服务调用中定义了它们),但在实验的重新设计之一期间它们已被删除,任何人都注意到,因为网络服务显然会接受多余的参数。
网络服务正在接受我的全局参数,显然甚至验证了它们。但是由于它们没有连接到 实验中的任何东西,传递的 .ilearner 文件信息从未应用于任何东西——硬编码的 .ilearner 无论如何都被应用了。
我们都非常惊讶,将参数传递给实际未定义的 web 服务时没有抛出异常。如果 发生了,我们会更快地查明真相。
tl/dr:实验未正确配置为接受 .ilearner 文件路径(或帐户名称或帐户密钥)作为参数,并且 web 服务很乐意接受和忽略参数参数发出任何警报,因为它的硬编码值为 运行 with.
我们目前正在努力使 Azure MachineLearning Studio 试验可操作。
我们最近的迭代有一个 web 作业,它接受队列消息、获取一些数据来训练模型,并使用 ML 实验 web 服务将经过训练的模型放在 blob 位置。
第二个 web 作业接受队列消息,提取要在预测实验中使用的数据,获取经过训练的 .ilearner 模型的位置路径,然后使用该 ML 实验 web 服务。
用于做预测的数据作为入参传入,存储账户名、key、.ilearner路径均作为全局参数传入--根据数据科学家定义的字典对象提供。
一切似乎 正常工作——除了在某些情况下,预测实验失败,并且错误消息清楚地表明正在使用错误的 .ilearner 文件。
当一个不存在的 blob 路径传递给实验 web 服务时,错误消息反映没有这样的 blob,所以很明显 web 服务至少在验证 .ilearner 的存在。
数据科学家可以在本地 运行,但在通过 PowerShell 在本地导出 .ilearner 文件时必须更改其名称。确保每个经过训练的模型都具有唯一的文件名并未解决此问题。
当我在 Azure 存储资源管理器中查看所有文件时,它们似乎正在根据上次修改日期按预期进行更新。这几乎就像在某处没有被正确覆盖的 .ilearner 的缓存版本。
在排除了所有传递错误文件的可能性后,我们的数据科学家仔细研究了实验本身。他发现它默认为他在开发中使用的一种硬编码 .ilearner 路径。
在某个时间点,他创建了 web 服务参数来覆盖这个值(因此我在我的 web 服务调用中定义了它们),但在实验的重新设计之一期间它们已被删除,任何人都注意到,因为网络服务显然会接受多余的参数。
网络服务正在接受我的全局参数,显然甚至验证了它们。但是由于它们没有连接到 实验中的任何东西,传递的 .ilearner 文件信息从未应用于任何东西——硬编码的 .ilearner 无论如何都被应用了。
我们都非常惊讶,将参数传递给实际未定义的 web 服务时没有抛出异常。如果 发生了,我们会更快地查明真相。
tl/dr:实验未正确配置为接受 .ilearner 文件路径(或帐户名称或帐户密钥)作为参数,并且 web 服务很乐意接受和忽略参数参数发出任何警报,因为它的硬编码值为 运行 with.