文档首页/ AI开发平台ModelArts/ 故障排除/ 训练作业/ OBS操作相关故障/ OBS复制过程中提示“BrokenPipeError: Broken pipe”
更新时间:2024-10-30 GMT+08:00

OBS复制过程中提示“BrokenPipeError: Broken pipe”

问题现象

训练作业在使用MoXing复制数据时,日志中出现报错“BrokenPipeError: [Errno xx] Broken pipe”

原因分析

出现该问题的可能原因如下:

  • 在大规模分布式作业上,每个节点都在拷贝同一个桶的文件,导致OBS桶限流。
  • OBS Client连接数过多,进程/线程之间的轮询,导致一个OBS Client与服务端连接30S内无响应,超过超时时间,服务端断开了连接。

处理方法

  1. 如果是限流问题,日志中还会出现如下报错,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
  2. 如果是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开发环境调试训练代码,避免代码迁移过程中的错误。