如何使用TF 2.0 / 1.14.0-ager和自定义训练循环(渐变磁带)中的分布式训练执行梯度累积?

时间:2019-06-27 15:03:31

标签: tensorflow tensorflow2.0 tf.keras

背景: 我有一个模型,我正在尝试将其移植到TF 2.0,以获得一些渴望的执行力,但是我似乎无法弄清楚如何进行分布式训练(4个GPU)并同时执行梯度累积。

问题:

  • 我需要能够使用带有梯度带的自定义训练循环,因为我有一个复杂的多模型问题(几个输入模型和输出模型一起训练),我不需要二阶梯度

  • 使用我的模型大小(中等,像中等大小的变压器),我无法获得大于约32的批处理大小,其中有4个GPU,这是我可以获得的最大实例,可悲的是,这些确实是旧的11GB K80,因为Azure似乎认为Google甚至不再免费提供的GPU已经足够好了...........

  • 我有一个需要非常大批处理的数据集,因为我必须解决非常大的不平衡(我也使用了c的权重和焦点损失),因此我需要执行4-8步的梯度累加平滑渐变。

我已经阅读了分布式培训循环指南,并设法实现了它: https://www.tensorflow.org/beta/tutorials/distribute/training_loops

我还针对自定义训练循环和tf.keras在TF 2.0中实现了梯度累积: https://colab.research.google.com/drive/1yaeRMAwhGkm1voaPp7EtFpSLF33EKhTc

1 个答案:

答案 0 :(得分:-1)

如果您仍有任何问题,请阅读https://www.tensorflow.org/tutorials/distribute/custom_training并更新您的问题。