更新时间:2024-10-30 GMT+08:00
OBS复制过程中提示“BrokenPipeError: Broken pipe”
问题现象
训练作业在使用MoXing复制数据时,日志中出现报错“BrokenPipeError: [Errno xx] Broken pipe”。
原因分析
出现该问题的可能原因如下:
- 在大规模分布式作业上,每个节点都在拷贝同一个桶的文件,导致OBS桶限流。
- OBS Client连接数过多,进程/线程之间的轮询,导致一个OBS Client与服务端连接30S内无响应,超过超时时间,服务端断开了连接。
处理方法
- 如果是限流问题,日志中还会出现如下报错,OBS相关的错误码解释请参见OBS官方文档,这种情况建议提工单。
[ModelArts Service Log]2021-01-21 11:35:42,178 - file_io.py[line:658] - ERROR: stat:503 errorCode:None errorMessage:None reason:Service Unavailable
- 如果是client数太多,尤其对于5G以上文件,OBS接口不支持直接调用,需要分多个线程分段拷贝,目前OBS侧服务端超时时间是30S,可以通过如下设置减少进程数。
# 设置进程数 os.environ['MOX_FILE_LARGE_FILE_TASK_NUM']=1 import moxing as mox # 拷贝文件 mox.file.copy_parallel(src_url=your_src_dir, dst_url=your_target_dir, threads=0, is_processing=False)
创建训练作业时,可通过环境变量“MOX_FILE_PARTIAL_MAXIMUM_SIZE”设置用户需要分段下载的大文件阈值(单位为Bytes),超过该阈值的文件将使用并发下载模式进行分段下载。
建议与总结
在创建训练作业前,推荐您先使用ModelArts开发环境调试训练代码,避免代码迁移过程中的错误。
- 直接使用线上notebook环境调试请参考使用JupyterLab开发模型。
- 配置本地IDE(Pycharm或者VSCode)联接云上环境调试请参考使用本地IDE开发模型。
父主题: OBS操作相关故障