文档首页> AI开发平台ModelArts> 故障排除> 训练作业> 云上迁移适配故障> 训练作业日志中提示“No module named .*”
更新时间:2023-01-10 GMT+08:00

训练作业日志中提示“No module named .*”

用户请按照以下思路进行逐步排查:

  1. 检查依赖包是否存在
  2. 检查依赖包路径是否能被识别
  3. 检查训练作业使用的资源规格是否正确
  4. 建议与总结

检查依赖包是否存在

如果依赖包不存在,您可以使用以下两种方式完成依赖包的安装。

  • 方式一(推荐使用):在创建我的算法时,需要在“代码目录”下放置相应的文件或安装包。

    请根据依赖包的类型,在代码目录下放置对应文件:

    • 依赖包为开源安装包时

      “代码目录”中创建一个命名为“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相关调用报错。

建议与总结

在创建训练作业前,推荐您先使用ModelArts开发环境调试训练代码,避免代码迁移过程中的错误。