更新时间:2024-10-28 GMT+08:00
大量数据文件,训练过程中读取数据效率低?
当数据集存在较多数据文件(即海量小文件),数据存储在OBS中,训练过程需反复从OBS中读取文件,导致训练过程一直在等待文件读取,效率低。
解决方法
- 建议将海量小文件,在本地压缩打包。例如打包成.zip格式。
- 将此压缩后的文件上传至OBS。
- 训练时,可直接从OBS下载此压缩文件至/cache目录。此操作仅需执行一次,无需训练过程反复与OBS交互导致训练效率低。
如下示例,可使用mox.file.copy_parallel将zip文件下载至本地/cache目录并解压,然后再读取做训练。
1 2 3 4 5 6 7 8 9 10 11 12
... tf.flags.DEFINE_string('<obs_file_path>/data.zip', '', 'dataset directory.') FLAGS = tf.flags.FLAGS import os import moxing as mox TMP_CACHE_PATH = '/cache/data' mox.file.copy_parallel('FLAGS.data_url', TMP_CACHE_PATH) zip_data_path = os.path.join(TMP_CACHE_PATH, '*.zip') unzip_data_path = os.path.join(TEMP_CACHE_PATH, 'unzip') #也可以采用zipfile等Python包来做解压 os.system('unzip '+ zip_data_path + ' -d ' + unzip_data_path) mnist = input_data.read_data_sets(unzip_data_path, one_hot=True)
父主题: 训练过程读取数据