我有一个sklearn k均值模型。我正在训练模型并将其保存在pickle文件中,以便以后可以使用azure ml库进行部署。我正在训练的模型使用名为 MultiColumnLabelEncoder 的自定义功能编码器。 管道模型定义如下:
# 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)
模型保存工作正常。部署步骤与此链接中的步骤相同:
但是,部署始终会因以下错误而失败:
File "/var/azureml-server/create_app.py",line 3,in <module>
from app import main
File "/var/azureml-server/app.py",line 27,in <module>
import main as user_main
File "/var/azureml-app/main.py",line 19,in <module>
driver_module_spec.loader.exec_module(driver_module)
File "/structure/azureml-app/score.py",line 22,in <module>
importlib.import_module("multilabelencoder")
File "/azureml-envs/azureml_b707e8c15a41fd316cf6c660941cf3d5/lib/python3.6/importlib/__init__.py",line 126,in import_module
return _bootstrap._gcd_import(name[level:],package,level)
ModuleNotFoundError: No module named 'multilabelencoder'
我了解到pickle / joblib在解开自定义函数MultiLabelEncoder时会遇到一些问题。这就是为什么我在单独的python脚本(我也执行过)中定义了此类的原因。我在培训python脚本,部署脚本和评分python文件(score.py)中调用了此自定义函数。在score.py文件中的导入不成功。 所以我的问题是如何将自定义python模块导入到Azure ml部署环境中?
谢谢。
编辑: 这是我的.yml文件
name: project_environment
dependencies:
# The python interpreter version.
# Currently Azure ML only supports 3.5.2 and later.
- python=3.6.2
- pip:
- multilabelencoder==1.0.4
- scikit-learn
- azureml-defaults==1.0.74.*
- pandas
channels:
- conda-forge