在azureml部署环境中导入自定义python模块

2024-04-18 05:16:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个sklearn k-means模型。我正在训练模型并将其保存在pickle文件中,以便以后可以使用azureml库部署它。我正在培训的模型使用一个名为多列标签编码器的自定义功能编码器。 管道模型定义如下:

# Pipeline
kmeans = KMeans(n_clusters=3, random_state=0)
pipe = Pipeline([
("encoder", MultiColumnLabelEncoder()),
('k-means', kmeans),
])
#Training the pipeline
model = pipe.fit(visitors_df)
prediction = model.predict(visitors_df)
#save the model in pickle/joblib format
filename = 'k_means_model.pkl'
joblib.dump(model, filename)

模型保存工作正常。部署步骤与此链接中的步骤相同:

https://notebooks.azure.com/azureml/projects/azureml-getting-started/html/how-to-use-azureml/deploy-to-cloud/model-register-and-deploy.ipynb

但是,部署总是失败,并出现以下错误:

^{pr2}$

我了解pickle/joblib在取消拾取自定义函数MultiLabelEncoder时遇到一些问题。这就是为什么我在一个单独的python脚本中定义了这个类(我也执行了这个脚本)。我在python脚本中调用了自定义脚本并在python中调用了脚本(分数.py). 进口分数.py文件不成功。 所以我的问题是如何将自定义python模块导入azureml部署环境?在

提前谢谢你。在

编辑: 这是我的.yml文件

^{3}$

Tags: 文件the模型脚本modelpipeline定义部署
1条回答
网友
1楼 · 发布于 2024-04-18 05:16:56

实际上,解决方案是将我的定制类MultiColumnLabelEncoder作为pip包导入(您可以通过pip install multilllabelencoder==1.0.5找到它)。 然后我将pip包传递到.yml文件或azureml环境的InferenceConfig中。 在分数.py文件,我导入类如下:

from multilabelencoder import multilabelencoder
def init():
    global model

    # Call the custom encoder to be used dfor unpickling the model
    encoder = multilabelencoder.MultiColumnLabelEncoder() 
    # Get the path where the deployed model can be found.
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'k_means_model_45.pkl')
    model = joblib.load(model_path)

然后部署成功了。 更重要的是,我必须在培训管道中使用与这里相同的pip包(multilabelencoder):

^{pr2}$

相关问题 更多 >