使用TensorFlow';具有多GPU训练的s数据集API

使用TensorFlow';具有多GPU训练的s数据集API,tensorflow,gpu,tensorflow-gpu,Tensorflow,Gpu,Tensorflow Gpu,使用Tensorflow的新数据集API进行多GPU培训(来自TFRecords格式)似乎比在单个GPU上运行(1对4特斯拉K80)要慢得多(1/4) 从英伟达smi的输出来看,似乎使用4个gpu只会导致每个gpu的利用率约为15%,而使用单个gpu则约为45% 从磁盘加载数据(tfrecords格式)是否会导致培训速度出现瓶颈?使用常规的提要dicts,将整个数据集加载到内存中的速度远远快于使用数据集API的速度。您的网络似乎受到以下因素的限制: 从光盘上输入IO,如您上一段所述 如果您以读取

使用Tensorflow的新数据集API进行多GPU培训(来自
TFRecords
格式)似乎比在单个GPU上运行(1对4特斯拉K80)要慢得多(1/4)

从英伟达smi的输出来看,似乎使用4个gpu只会导致每个gpu的利用率约为15%,而使用单个gpu则约为45%


从磁盘加载数据(tfrecords格式)是否会导致培训速度出现瓶颈?使用常规的
提要dicts
,将整个数据集加载到内存中的速度远远快于使用数据集API的速度。

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

  • 从光盘上输入IO,如您上一段所述 如果您以读取TFRecords开始数据集,则它将从光盘读取;相反,您可以将它们读入列表/目录,并从范围序列开始。例如
  • tf.data.Dataset()\
    .range(您的数据大小)\
    .预取(20)\
    .shuffle(缓冲区大小=20)\
    .map(lambda i:your_loaded_list[i],num_parallel_calls=8)

  • 繁重的前/后处理,如第2段所述,其中单个GPU利用率为45%;如果当时您已经将数据预加载到内存中,则表明您的网络在“主”计算主体之外进行了工作
  • 首先,您可以检查使用多线程和上述map调用是否有帮助;同时减少一些tf.summary操作,这些操作可能会反馈大量不必要的数据,从而限制您的带宽/写入光盘

    希望这有帮助