文档首页/ AI开发平台ModelArts/ 常见问题/ Standard训练作业/ 训练过程读取数据/ 大量数据文件,训练过程中读取数据效率低?
更新时间:2024-10-28 GMT+08:00

大量数据文件,训练过程中读取数据效率低?

当数据集存在较多数据文件(即海量小文件),数据存储在OBS中,训练过程需反复从OBS中读取文件,导致训练过程一直在等待文件读取,效率低。

解决方法

  1. 建议将海量小文件,在本地压缩打包。例如打包成.zip格式。
  2. 将此压缩后的文件上传至OBS。
  3. 训练时,可直接从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)