如何将TensorFlow图(模型)拆分到多个GPU上以避免OOM?

如何将TensorFlow图(模型)拆分到多个GPU上以避免OOM?,tensorflow,tensorflow-gpu,Tensorflow,Tensorflow Gpu,所以我用TensorFlow r1.2实现了这个非常大和深入的模型,运行在一个NVIDIA Tesla k40上,内存为12GB。该模型由多个RNN、一组权重和嵌入矩阵以及偏差向量组成。当我启动培训计划时,首先需要大约2-3个小时来构建模型,然后由于OOM问题而崩溃。我试图将批大小减少到每批1个数据样本,但仍然遇到同样的问题 如果我在谷歌上搜索tensorflow多个gpu,我发现的例子主要集中在通过并行模型设计利用多个gpu,这意味着让每个gpu运行相同的图形,让CPU计算总梯度,从而传播回每

所以我用TensorFlow r1.2实现了这个非常大和深入的模型,运行在一个NVIDIA Tesla k40上,内存为12GB。该模型由多个RNN、一组权重和嵌入矩阵以及偏差向量组成。当我启动培训计划时,首先需要大约2-3个小时来构建模型,然后由于OOM问题而崩溃。我试图将批大小减少到每批1个数据样本,但仍然遇到同样的问题

如果我在谷歌上搜索tensorflow多个gpu,我发现的例子主要集中在通过并行模型设计利用多个gpu,这意味着让每个gpu运行相同的图形,让CPU计算总梯度,从而传播回每个参数

我知道一个可能的解决方案可能是在内存更大的GPU上运行该模型。但我想知道是否有办法将我的图形(模型)按顺序拆分成不同的部分,并将它们分配给不同的GPU?

上的官方指南在“使用多个GPU”中向您展示了该示例。您只需要在不同的上下文中创建操作;这些节点仍将添加到同一个图中,但它们将使用设备指令进行注释,指示它们应该运行的位置。例如:

with tf.device("/gpu:0"):
    net0 = make_subnet0()
with tf.device("/gpu:1"):
    net1 = make_subnet1()
result = combine_subnets(net0, net1)