华为云AI开发平台ModelArts训练作业日志中提示“No such file or directory”_云淘科技

问题现象

训练作业运行失败,日志中提示“No such file or directory”。

例如:找不到训练输入的数据路径时,会提示“No such file or directory”。

例如:找不到训练启动文件时,也会提示“No such file or directory”。

图1 日志提示找不到启动文件(示例)

原因分析

找不到训练输入数据路径,可能是报错的路径填写不正确。用户请按照以下思路进行逐步排查:

检查报错的路径是否为OBS路径
检查报错的路径是否存在

找不到启动文件,可能是训练作业启动命令的路径填写不正确,参考使用自定义镜像创建训练作业时,检查启动文件路径排查解决。
可能为多个进程或者worker读写同一个文件。如果使用了SFS,则考虑是否多个节点同时写同一个文件。分析代码中是否存在多进程写同一文件的情况。建议避免作业中存在多进程,多节点并发读写同一文件的情况。

检查报错的路径是否为OBS路径

使用ModelArts时,用户数据需要存放在自己OBS桶中,但是训练代码运行过程中不能使用OBS路径读取数据。

原因:

训练作业创建成功后,由于在运行容器直连OBS服务进行训练性能很差,系统会自动下载训练数据至运行容器的本地路径。所以,在训练代码中直接使用OBS路径会报错。例如训练代码的OBS路径为obs://bucket-A/training/,训练代码会被自动下载至${MA_JOB_DIR}/training/。

假设训练代码的OBS目录为obs://bucket-A/XXX/{training-project}/,“{training-project}”是存放训练代码的文件夹名称。训练时会自动下载OBS中{training-project}目录下的数据到训练容器的本地路径$MA_JOB_DIR/{training-project}/。

如果报错路径为训练数据路径,需要在以下两个地方完成适配,具体适配方法请参考自定义算法适配章节的输入输出配置部分:

在创建算法时,您需要在输入路径配置中设置代码路径参数,默认为“data_url”。
您需要在训练代码中添加超参,默认为“data_url”。使用“data_url”当做训练数据输入的本地路径。

检查报错的路径是否存在

由于用户本地开发的代码需要上传至ModelArts后台,训练代码中涉及到依赖文件的路径时,用户设置有误的场景较多。

推荐通用的解决方案:使用os接口得到依赖文件的绝对路径,避免报错。

示例:

|---project_root                #代码根目录
   |---BootfileDirectory        #启动文件所在的目录
     |---bootfile.py            #启动文件
   |---otherfileDirectory       #其他依赖文件所在的目录
     |---otherfile.py           #其他依赖文件
    

在启动文件中,建议用户参考以下方式获取依赖文件所在路径,即示例中的otherfile_path。

import os
current_path = os.path.dirname(os.path.realpath(__file__)) # BootfileDirectory, 启动文件所在的目录
project_root = os.path.dirname(current_path) # 工程的根目录,对应ModelArts训练控制台上设置的代码目录
otherfile_path = os.path.join(project_root, "otherfileDirectory", "otherfile.py")

使用自定义镜像创建训练作业时,检查启动文件路径

以OBS路径“obs://obs-bucket/training-test/demo-code”为例,训练代码会被自动下载至训练容器的“${MA_JOB_DIR}/demo-code”目录中,demo-code为OBS存放代码路径的最后一级目录,可以根据实际修改。

使用自定义镜像创建训练作业时,在代码目录下载完成后,镜像的启动命令会被自动执行。启动命令的填写规范如下:

如果训练启动脚本用的是py文件,例如train.py,运行命令可以写为python ${MA_JOB_DIR}/demo-code/train.py。
如果训练启动脚本用的是sh文件,例如main.sh,运行命令可以写为bash ${MA_JOB_DIR}/demo-code/main.sh。

其中demo-code为OBS存放代码路径的最后一级目录,可以根据实际修改。

建议与总结

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

直接使用线上notebook环境调试请参考使用JupyterLab开发模型。
配置本地IDE(Pycharm或者VSCode)联接云上环境调试请参考使用本地IDE开发模型。

父主题: 云上迁移适配故障

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家