
# 使用MoXing复制数据报错
#### 问题现象
1. 调用moxing.file.copy_parallel()将文件从开发环境的OBS桶中复制到其他OBS桶里，但是桶内没有出现目标文件。
2. 使用MoXing复制数据不成功，出现报错。如：
   - ModelArts开发环境使用MoXing复制OBS数据报错：keyError: 'request-id'
   
   - ModelArts使用MoXing复制报错：No files to copy
   
   - ModelArts使用MoXing复制报错：**some parts are failed when download**
   
   - socket.gaierror: \[Errno -2\] Name or service not known
   
   - ERROR:root:Failed to call: func=\<bound method ObsClient.getObject of \<obs.client.ObsClient object at 0x7fd705939710\>\>
     args=('bucket', 'data/TFRecord/HY_all_inside/no_adjust_light_3/09_06_6x128x128_0000000212.tfrecord')
     
   
   
   
   - 报错：TimeoutError: \[Errno 110\] Connection timed out
   
   - WARNING:root:Retry=9,Wait=0.1, Timestamp = 1567152567.5327423
    
 
#### 原因分析
当使用MoXing复制数据不成功，可能原因如下：
- 源文件不存在。
- OBS路径不正确或者是两个OBS路径不在同一个区域。
- 训练作业空间不足。
- 训练解密组件异常
 
#### 处理方法
按照报错提示，需要排查以下几个问题：
1. 检查moxing.file.copy_parallel()的第一个参数中是否有文件，否则会出现报错：No files to copy
   - 文件存在，请执行[2]。
   
   - 文件不存在，请忽略该报错继续执行后续操作。
    
2. 报错timeout时，检查复制的OBS的路径是否与开发环境或训练作业在同一个区域。
   进入ModelArts管理控制台，查看其所在区域。然后再进入OBS管理控制台，查看您使用的OBS桶所在的区域。查看是否在同一区域。
   - 是，请执行[3]。
   
   - 否，请在ModelArts同一区域的OBS中新建桶和文件夹，并将所需的数据上传至此OBS桶中。
    
3. 出现错误码403时检查OBS的路径是否正确，是否写为了"obs://xxx"。可使用如下方式判断OBS路径是否存在。
   mox.file.exists('obs://bucket_name/sub_dir_0/sub_dir_1')
   - 路径存在，请执行[4]。
   
   - 路径不存在，请更换为一个可用的OBS路径。
    
4. 出现报错some part are failed when download。检查使用的资源是否为CPU，CPU的"/cache"与代码目录共用10G，可能是空间不足导致，可在代码中使用如下命令查看磁盘大小。
   os.system('df -hT')
   - 磁盘空间满足，请执行[5]。
   
   - 磁盘空间不足，请您使用GPU资源。
    
5. 如果是在Notebook使用MoXing复制数据不成功，可以在Terminal界面中使用df -hT命令查看空间大小，排查是否因空间不足导致，可在创建Notebook时使用EVS挂载。
6. 出现错误码503或报错的requestid为空时联系OBS服务查看对应桶的后台监控，确认是否出现带宽或并发打满导致的流控现象，调整后重试即可。
7. 出现**can't find xxx.temp** 或**FileNotFoundError**报错信息，检测是否多个进程同时下载了同一文件并避免该场景出现。
 
如果代码写作正确，仍然无法解决该问题，请提交工单，由专业工程师为您分析并解决问题。
