训练作业日志中提示“No module named .*”
用户请按照以下思路进行逐步排查:
检查依赖包是否存在
如果依赖包不存在,您可以使用以下两种方式完成依赖包的安装。
- 方式一(推荐使用):在创建我的算法时,需要在“代码目录”下放置相应的文件或安装包。
请根据依赖包的类型,在代码目录下放置对应文件:
- 依赖包为开源安装包时
在“代码目录”中创建一个命名为“pip-requirements.txt”的文件,并且在文件中写明依赖包的包名及其版本号,格式为“包名==版本号”。
例如,“代码目录”对应的OBS路径下,包含模型文件,同时还存在“pip-requirements.txt”文件。“代码目录”的结构如下所示:
|---模型启动文件所在OBS文件夹 |---model.py #模型启动文件。 |---pip-requirements.txt #定义的配置文件,用于指定依赖包的包名及版本号。
“pip-requirements.txt”文件内容如下所示:
alembic==0.8.6 bleach==1.4.3 click==6.6
- 依赖包为whl包时
如果训练后台不支持下载开源安装包或者使用用户编译的whl包时,由于系统无法自动下载并安装,因此需要在“代码目录”放置此whl包,同时创建一个命名为“pip-requirements.txt”的文件,并且在文件中指定此whl包的包名。依赖包必须为“.whl”格式的文件。
例如,“代码目录”对应的OBS路径下,包含模型文件、whl包,同时还存在“pip-requirements.txt”文件。“代码目录”的结构如下所示:
|---模型启动文件所在OBS文件夹 |---model.py #模型启动文件。 |---XXX.whl #依赖包。依赖多个时,此处放置多个。 |---pip-requirements.txt #定义的配置文件,用于指定依赖包的包名。
“pip-requirements.txt”文件内容如下所示:
numpy-1.15.4-cp36-cp36m-manylinux1_x86_64.whl tensorflow-1.8.0-cp36-cp36m-manylinux1_x86_64.whl
- 依赖包为开源安装包时
- 方式二:可以在启动文件添加如下代码安装依赖包:
import os os.system('pip install xxx')
方式一在训练作业启动前即可完成相关依赖包的下载与安装,而方式二是运行启动文件过程中进行依赖包的下载与安装。
检查依赖包路径是否能被识别
代码如果在本地运行,需要将“project_dir”加入到PYTHONPATH或者将整个“project_dir”安装到“site-package”中才能运行。但是在ModelArts可以将“project_dir”加入到“sys.path”中解决该问题。
使用from module_dir import module_file来导包,代码结构如下:
project_dir |- main.py |- module_dir | |- __init__.py | |- module_file.py
检查训练作业使用的资源规格是否正确
训练作业报错No module named npu_bridge.npu_init
from npu_bridge.npu_init import * ImportError: No module named npu_bridge.npu_init
检查下训练作业使用的规格是否支持NPU,有可能是训练时使用了GPU规格,导致发生了NPU相关调用报错。
建议与总结
- 直接使用线上notebook环境调试请参考使用JupyterLab开发模型。
- 配置本地IDE(Pycharm或者VSCode)联接云上环境调试请参考使用本地IDE开发模型。