如您所知,使用单个CPU进行深度强化学习(DRL(训练可能需要10天以上。使用并行执行工具(如CUDA(,训练时间最多可减少1天(取决于CPU和GPU功能(。但是当使用CUDA时,GPU的使用率约为10%,并且训练时间仍然太长。对于那些希望在开发代码时经常检查结果的开发人员来说,这是非常令人不安的。在编码技巧、构建模型、设置、GPU硬件等方面,你建议如何尽可能减少训练时间?
来自文档:
默认情况下,TensorFlow映射进程可见的所有GPU的几乎所有GPU内存(受CUDA_VISIBLE_DEVICES约束(
所以你不应该为了允许更多的GPU使用而更改任何设置。因此,最快的检查方法可能是batch size
是否足够大——您可能只是没有充分利用可用内存。尝试将批量大小增加到出现OOM错误的程度,然后将其缩小一点,使其正常工作。
如果你可以访问多个GPU,你可以使用tensorflow中的分布式策略来确保所有GPU都在使用:
mirrored_strategy = tf.distribute.MirroredStrategy()
with mirrored_strategy.scope():
<your model training code>
请参阅此处的文档
镜像策略用于在单个服务器上跨多个GPU进行同步分布式训练。在这个博客中还有一个更直观的解释。
最后,为了更有效地进行处理,可以使用混合精度来更改模型间参数的数据类型。