文档首页> AI开发平台ModelArts> 故障排除> 训练作业> OBS操作相关故障> OBS拷贝过程中提示“BrokenPipeError: Broken pipe”
更新时间:2023-09-08 GMT+08:00

OBS拷贝过程中提示“BrokenPipeError: Broken pipe”

问题现象

训练作业在使用moxing拷贝数据时出现如下报错。

图1 错误日志

原因分析

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

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

处理方法

  1. 如果是限流问题,日志中还会有如下错误,OBS相关的错误码解释请看 OBS官方文档,这种情况建议提工单。
    图2 错误日志
  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)

    创建训练作业时,可通过环境变量“_PARTIAL_MAXIMUM_SIZE”设置用户需要分段下载的大文件阈值(单位为Bytes),超过该阈值的文件将使用并发下载模式进行分段下载。

建议与总结

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