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

恩娜·贾瓦(Emna Jaoua)

我有一个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)

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

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

但是,部署始终会因以下错误而失败:

  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
恩娜·贾瓦(Emna Jaoua)

实际上,解决方案是将我的自定义类MultiColumnLabelEncoder作为pip包导入(您可以通过pip install multilllabelencoder == 1.0.5找到它)。然后,我将pip包传递到.yml文件或azure ml环境的InferenceConfig中。在score.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):

from multilabelencoder import multilabelencoder 
pipe = Pipeline([
    ("encoder", multilabelencoder.MultiColumnLabelEncoder(columns)),
    ('k-means', kmeans),
])
#Training the pipeline
trainedModel = pipe.fit(df)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Azure python函数中导入自定义模块

在Azure ML Studio上部署自定义模型

Azure功能-导入自定义节点模块

如何使用自定义环境和管道对Azure ML工作区进行版本控制?

无法在python azure函数中导入pyodbc模块

在Azure ML中使用自定义docker

Azure网站部署槽的自定义域名?

自定义部署到Azure网站

自定义C#模块与Edge上的Azure函数

如何在 azure ML 中导入某些 python 库?像 import humanfriendly 的行给出错误

如何在python中导入Azure BlobService?

是否可以在Azure中导入python脚本?

如何在Julia中导入自定义模块

如何在Google Colab中导入自定义模块?

如何在 Angular 4 中导入自定义模块?

无法在openERP中导入自定义模块

在python的父文件夹中导入自定义模块

如何在Linux消费计划中导入作为Azure函数运行的Python模块?

无法在Azure Databricks提供的Spark群集中导入已安装的python模块

我是否必须在 powershell runbook (azure) 中导入模块?

使用 Azure ML 中的自定义筛选器将评级列转换为布尔列

使用R在Azure ML Jupyter / iPython Notebook中下载自定义数据集

Python自定义模块和导入

自定义导入的python模块

自定义模块导入错误仅在部署期间

在Devops部署期间添加Azure Web App Service自定义域

对于自定义主题的Azure功能事件网格订阅,ARM模板部署失败

如何在消费计划中为 R 语言部署 Azure Functions 自定义处理程序?

如何在Azure网站上添加自定义的后期部署脚本?