【问题标题】:Using TensorFlow's Dataset API with multi-GPU training使用 TensorFlow 的 Dataset API 进行多 GPU 训练
【发布时间】:2018-03-03 23:47:39
【问题描述】:

使用 Tensorflow 的新数据集 API 进行多 GPU 训练(来自 TFRecords 格式)似乎比在单个 GPU 上运行(1 对 4 Tesla K80s)慢得多(慢 1/4)。

查看nvidia-smi 的输出,似乎使用 4 个 GPU 只会导致每个 GPU 的使用率约为 15%,而使用单个 GPU 时则为 45% 左右。

从磁盘加载数据(tfrecords-format)是否会导致训练速度出现瓶颈?使用常规的feed-dicts,将整个数据集加载到内存中比使用数据集 API 快得多。

【问题讨论】:

    标签: tensorflow gpu tensorflow-gpu


    【解决方案1】:

    您的网络似乎受到以下因素的限制:

    1. 来自光盘的 IO,如您在上一段中所述 如果您从读取 TFRecords 开始数据集,那么它将从磁盘读取;相反,您可以将它们读入列表/字典,并从范围序列开始。例如。

    tf.data.Dataset()\ .range(your_data_size)\ .prefetch(20)\ .shuffle(buffer_size=20)\ .map(lambda i: your_loaded_list[i], num_parallel_calls=8)

    1. 大量的预处理/后处理,如您在第 2 段中提到的,其中单个 GPU 利用率为 45%;如果那时您已经将数据预加载到内存中,则表明您的网络在“主要”计算体之外进行工作。

    首先,您可以检查使用多线程和上面的 map 调用是否有帮助;还减少了一些 tf.summary 操作,这些操作可能会反馈大量不必要的数据,这些数据会限制您的带宽/之后写入磁盘。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-04-24
      • 2017-09-10
      • 2016-10-20
      • 2021-10-03
      • 2019-01-01
      • 2019-01-28
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多