Azure ML Studio 环境中的 Python 自定义模型错误 0085,在本地环境中运行良好

Posted

技术标签:

【中文标题】Azure ML Studio 环境中的 Python 自定义模型错误 0085,在本地环境中运行良好【英文标题】:Python Custom Model in Azure ML Studio Environment Error 0085, Works fine in Local Environment 【发布时间】:2019-09-06 07:09:27 【问题描述】:

Azure ML Studio 环境在使用自定义 python 模型中的 pickle 文件时引发以下错误。 python 本地模型,pickle 文件在本地环境中可以正常工作,但在 Azure ML Studio 环境中无法正常工作

错误 0085:脚本评估期间发生以下错误,请查看输出日志以获取更多信息: ---------- 来自 Python 解释器的错误消息开始 ---------- 执行函数时捕获异常:Traceback(最后一次调用): 文件“C:\server\invokepy.py”,第 199 行,批量 odfs = mod.azureml_main(*idfs) azureml_main 中的文件“C:\temp\b1cb10c870d842b9afcf8bb8037155a1.py”,第 49 行 返回数据,model.predict_proba(数据) 文件“C:\pyhome\lib\site-packages\sklearn\ensemble\forest.py”,第 540 行,在 predict_proba n_jobs,_,_ = _partition_estimators(self.n_estimators,self.n_jobs) _partition_estimators 中的文件“C:\pyhome\lib\site-packages\sklearn\ensemble\base.py”,第 101 行 n_jobs = min(_get_n_jobs(n_jobs), n_estimators) _get_n_jobs 中的文件“C:\pyhome\lib\site-packages\sklearn\utils__init__.py”,第 456 行 如果 n_jobs

有什么遗漏吗?

Python Pickle 文件适用于本地环境。

# The script MUST contain a function named azureml_main
# which is the entry point for this module.

# imports up here can be used to
import pandas as pd
import sys
import pickle
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import LabelEncoder
import numpy as np
import pickle
import os

def azureml_main(DATA = None, dataframe2 = None):

# Execution logic goes here
# print('Input pandas.DataFrame #1:\r\n\r\n0'.format(DATA))

# If a zip file is connected to the third input port is connected,
# it is unzipped under ".\Script Bundle". This directory is added
# to sys.path. Therefore, if your zip file contains a Python file
# mymodule.py you can import it using:
# import mymodule

sys.path.append('.\\Script Bundle\\MyLocalModel.zip')
sys.path.insert(0,".\Script Bundle")
model = pickle.load(open(".\Script Bundle\MyLocalModel.pkl", 'rb'))

#result = pd.DataFrame(model.predict_proba(dataframe1), columns=['p0','p1'])

# Return value must be of a sequence of pandas.DataFrame
return DATA, model.predict_proba(DATA)

python 自定义模型需要在 azure ml studio 中使用,部署为 Web 服务,与本地模型的输出相同

4 月 17 日更新 1:

Python 2.7.11 版本在 local 和 Azure ML Studio 是一样的,但是发现本地 [0.18.x] 和 Azure ML Studio [0.15.x] 的 sklearn 版本不同,其中 train_test_split 不同如下代码:

##from sklearn.model_selection import train_test_split ## works only with 0.18.x
import sklearn
from sklearn.cross_validation import train_test_split ## works only with 0.15.x
print ('sklearn version 0'.format(sklearn.__version__))

1) 现在,如何在 Azure ML Studio 中将 sklearn 包更新到最新版本? 或者另一种方法是降级我本地的sklearn,尝试一下,将试验出来。

2) 另一个练习是使用 MDF [MulticlassDecisionForest] 算法在 Azure ML Studio 中创建模型。 并且本地使用的是RFC [RandomForestClassifier]算法,但是两个输出完全不同,不匹配?

以下代码在本地环境中使用 RFC 算法使用 sklearn 版本 0.18.x: ## 本地环境中的随机森林分类器,sklearn 版本 0.18.x from sklearn.ensemble 导入随机森林分类器

## Random Forest Classifier
rfc = RandomForestClassifier(n_estimators = 550,max_depth = 6,max_features = 30,random_state = 0) 
rfc.fit(X_train,y_train)
print (rfc)

## Accuracy test
accuracy = rfc.score(X_test1,y_test1)
print ("Accuracy is ".format(accuracy))

3) 已经用 Azure ML Studio 用 sklearn 0.15.x 的低版本执行 Python Script 复现了本地 python 代码 除了很少的测试数据集行之外,这也产生了相同的本地输出。 现在,如何将 Python 脚本中的模型作为未训练模型输入训练模型组件? 还是将pickle文件写入DataSet中,并作为自定义模型使用?

非常感谢您的宝贵意见。

【问题讨论】:

详情请查看 Update1。 我建议为您在上面添加的 3 个项目创建单独的问题,否则事情会很快变得混乱。我必须说,看起来 Azure ML 服务会更好地为您服务。 【参考方案1】:

这很可能是因为您用于序列化模型的 pickle 版本与 Azure ML Studio 用于反序列化的版本不同。检查 Execute Python Script 属性以查看可用的 Anaconda/Python 版本。

【讨论】:

弗拉德,谢谢。请参阅 Update1 了解更多详情。非常感谢您的宝贵意见。

以上是关于Azure ML Studio 环境中的 Python 自定义模型错误 0085,在本地环境中运行良好的主要内容,如果未能解决你的问题,请参考以下文章

如何将特定于类的文件夹中的图像上传到 Azure ML Studio 上的 Azure Blob 存储

XML 到 Azure ML Studio

Azure ML Studio ML Pipeline - 异常:未找到临时文件

Azure ML Studio 执行 Python 脚本错误 - 没有名为“azure.cognitiveservices”的模块

在 azure ML studio 中安装数据湖存储

Azure ML Studio 编辑元数据不起作用