
# 在ModelArts上如何提升训练效率并减少与OBS的交互？
#### 场景描述
在使用ModelArts进行自定义深度学习训练时，训练数据通常存储在对象存储服务（OBS）中，且训练数据较大时（如200GB以上），每次都需要使用GPU/NPU资源池进行训练，且训练效率低。
希望提升训练效率，同时减少与对象存储OBS的交互。可通过如下方式进行调整优化。
#### 优化原理
对于ModelArts提供的GPU/NPU资源池，每个训练节点会挂载500GB的NVMe类型SSD提供给用户免费使用。此SSD挂载到"/cache"目录，"/cache"目录下的数据生命周期与训练作业生命周期相同，当训练作业运行结束以后"/cache"目录下面所有内容会被清空，腾出空间，供下一次训练作业使用。因此，可以在训练过程中将数据从OBS复制到"/cache"目录，然后每次从"/cache"目录读取数据，直到训练结束。训练结束以后"/cache"目录的内容会自动被清空。
#### 优化方式
以TensorFlow代码为例。
优化前代码如下所示：
```
...
tf.flags.DEFINE_string('data_url', '', 'dataset directory.')
FLAGS = tf.flags.FLAGS
mnist = input_data.read_data_sets(FLAGS.data_url, one_hot=True)
```
优化后的代码示例如下，将数据复制至"/cache"目录。
```
...
tf.flags.DEFINE_string('data_url', '', 'dataset directory.')
FLAGS = tf.flags.FLAGS
import moxing as mox
TMP_CACHE_PATH = '/cache/data'
mox.file.copy_parallel('FLAGS.data_url', TMP_CACHE_PATH)
mnist = input_data.read_data_sets(TMP_CACHE_PATH, one_hot=True)
```
