
# OBS复制过程中提示"BrokenPipeError: Broken pipe"
#### 问题现象
训练作业在使用MoXing复制数据时，日志中出现报错"BrokenPipeError: \[Errno xx\] Broken pipe"。
#### 原因分析
出现该问题的可能原因如下：
- 在大规模分布式作业上，每个节点都在复制同一个桶的文件，导致OBS桶限流。
- OBS Client连接数过多，进程/线程之间的轮询，导致一个OBS Client与服务端连接30S内无响应，超过超时时间，服务端断开了连接。
 
#### 处理方法
1. 如果是限流问题，日志中还会出现如下报错，OBS相关的错误码解释请参见[OBS官方文档](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_1502.html)，这种情况建议提工单。
   ```
   [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)
   ```
   ![](https://support.huaweicloud.com/trouble-modelarts/public_sys-resources/note_3.0-zh-cn.png)
   创建训练作业时，可通过环境变量"MOX_FILE_PARTIAL_MAXIMUM_SIZE"设置用户需要分段下载的大文件阈值（单位为Bytes），超过该阈值的文件将使用并发下载模式进行分段下载。
   
 
#### 建议与总结
在创建训练作业前，推荐您先使用ModelArts开发环境调试训练代码，避免代码迁移过程中的错误。
- 直接使用线上notebook环境调试请参考[使用JupyterLab开发模型](https://support.huaweicloud.com/devtool-modelarts/devtool-modelarts_0012.html)。
- 配置本地IDE（Pycharm或者VSCode）连接云上环境调试请参考[使用本地IDE开发模型](https://support.huaweicloud.com/devtool-modelarts/devtool-modelarts_0019.html)。
 
