Azure ML SDK v2执行命令作业时遭遇ModuleNotFoundError: No module named 'mltable'错误求助
你好呀,这个问题我之前也碰到过,原因其实很清晰:你用来运行命令作业的预制环境AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest里并没有预装mltable模块,而你的Notebook环境(不管是本地开发环境还是Azure ML的Compute Instance环境)已经提前安装了这个包,所以在Notebook单元格里运行完全正常,但提交成独立的命令作业时就会触发No module named 'mltable'的报错。
下面给你几个可行的解决办法,你可以根据自己的需求选择:
方法一:修改命令,运行前临时安装mltable
这是最快速的临时解决方案,不需要额外创建环境,只需要在执行Python脚本的命令前先通过pip安装mltable:
job = command( code="./folder", command="pip install mltable && python --script--.py", environment="AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest", compute="--computename--", display_name="....", experiment_name="...." )
这种方式的缺点是每次作业运行都会重新安装包,会增加一点启动时间,适合快速测试场景。
方法二:创建包含mltable的自定义环境
如果需要长期使用这个环境,推荐创建一个包含mltable和原有依赖的自定义环境,步骤如下:
- 在你的代码目录下创建一个
conda.yml文件,内容如下(保持和原预制环境一致的Python版本和sklearn版本,同时添加mltable依赖):
name: sklearn-mltable-env dependencies: - python=3.7 - pip: - mltable - azure-ai-ml - scikit-learn==0.24.1
- 在提交作业的代码中定义并使用这个自定义环境:
from azure.ai.ml import command from azure.ai.ml.entities import Environment # 定义自定义环境 custom_env = Environment( name="sklearn-0.24-mltable-cpu", conda_file="./conda.yml", image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:latest", description="Custom environment with scikit-learn 0.24 and mltable" ) # 配置并提交作业 job = command( code="./folder", command="python --script--.py", environment=custom_env, compute="--computename--", display_name="....", experiment_name="...." )
这种方式的好处是环境只需要创建一次,后续作业可以直接引用这个自定义环境的名称(比如sklearn-0.24-mltable-cpu@latest),作业启动速度更快。
方法三:使用AzureML官方带mltable的预制环境
AzureML有一些预制环境已经包含了mltable模块,比如AzureML-mltable-ubuntu18.04-py37-cpu@latest,你可以直接替换原来的环境参数:
job = command( code="./folder", command="python --script--.py", environment="AzureML-mltable-ubuntu18.04-py37-cpu@latest", compute="--computename--", display_name="....", experiment_name="...." )
不过要注意这个环境是否包含你需要的scikit-learn 0.24版本,如果版本不匹配可能会引发其他依赖问题,所以如果有特定的包版本要求,还是方法二更稳妥。
你可以根据自己的场景选择其中一种方法,应该就能解决模块找不到的问题啦~
备注:内容来源于stack exchange,提问作者Karthik S

