我们目前正在努力使Azure MachineLearning Studio实验可操作。
我们最近的迭代有一个Web作业,该作业接受队列消息,获取一些数据以训练模型,并使用ML实验网络服务将经过训练的模型放在Blob位置。
第二个Web作业接受队列消息,提取要用于预测性实验的数据,获取经过训练的.ilearner模型的位置路径,然后使用THAT ML Experiment网络服务。
用于进行预测的数据作为输入参数传递,而存储帐户名称,密钥和.ilearner路径都作为全局参数传递-根据数据科学家提供的内容定义的字典对象。
一切正常显示-某些情况下-预测性实验失败,并且错误消息使您清楚正在使用错误的.ilearner文件。
当不存在的Blob路径传递到实验Web服务时,错误消息反映不存在此类Blob,因此很明显,Web服务至少正在验证.ilearner的存在。
数据科学家可以在本地运行它,但是当他通过PowerShell在本地将其导出时,必须更改.ilearner文件的名称。确保每个训练有素的模型都有唯一的文件名不能解决此问题。
当我在Azure Storage Explorer中查看所有文件时,它们似乎正在根据上次修改日期按预期进行更新。几乎就像某个.ilearner的缓存版本未正确覆盖一样。
答案 0 :(得分:1)
在排除所有可能传递错误文件的可能性之后,我们的数据科学家仔细研究了实验本身。他发现它默认使用他在开发中一直使用的硬编码.ilearner路径。
在某个时间点,他创建了网络服务参数来覆盖此值(因此,为什么要在我的网络服务调用中定义它们),但是在实验的重新设计之一中,有人注意到了它们,因为webservice显然会接受多余的参数。
Web服务正在接受我的全局参数,并且显然甚至对其进行了验证。但是由于它们没有连接到实验中的任何内容,因此传递的.ilearner文件信息从未应用于任何东西-硬编码的.ilearner无论如何都将被应用。
我们都非常惊讶,没有将异常传递给未实际定义的参数的异常。如果那发生了,我们会更快地走到最深处。
tl / dr:实验未正确配置为接受.ilearner文件路径(或“帐户名”或“帐户密钥”)作为参数,并且Web服务很乐意接受和忽略参数自变量而没有引发任何警报,因为它具有可运行的硬编码值。