Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与分布式tensorflow相关的可伸缩性问题_Tensorflow_Distributed - Fatal编程技术网

与分布式tensorflow相关的可伸缩性问题

与分布式tensorflow相关的可伸缩性问题,tensorflow,distributed,Tensorflow,Distributed,我正在运行一些实验来测试分布式tensorflow的可伸缩性。我的目标是检查与使用单个gpu相比,在2个节点(总共8GPU)上使用4GPU的加速效果如何 我选择ResNet作为网络结构,并将官方模型zoos(github.com/tensorflow/models/tree/master/ResNet)中的ResNet示例代码修改为可以进行分布式培训的代码。 在实验中,使用ResNet 56层在CIFAR10数据集上进行训练,设置与原论文相同 我想确保的第一件事是,通过使用同步SGD(SyncR

我正在运行一些实验来测试分布式tensorflow的可伸缩性。我的目标是检查与使用单个gpu相比,在2个节点(总共8GPU)上使用4GPU的加速效果如何

我选择ResNet作为网络结构,并将官方模型zoos(github.com/tensorflow/models/tree/master/ResNet)中的ResNet示例代码修改为可以进行分布式培训的代码。 在实验中,使用ResNet 56层在CIFAR10数据集上进行训练,设置与原论文相同

我想确保的第一件事是,通过使用同步SGD(SyncReplicateSOptimizer),8GPU可以获得与1gpu相似的曲线,即历元到精度的曲线

请核对实验数据

tf-0:单gpu版本

tf-1:分布式版本(2人,8人)

x轴:#历元(每个历元表示一次遍历整个训练数据)

y轴:CIFAR-10测试数据的准确性

单个gpu(tf-0)的结果与原始文件和许多其他人复制的文件类似(例如,这里有更多示例)

但是,您可以观察到tf-1(8gpus曲线)具有非常不同的模式,这不是我所期望的。我对同步SGD的理解是,优化器累积
#workers
梯度,然后应用于变量。因此,如果设置了相同的有效批量大小,则该过程应与单个gpu完全相同

有趣的是,当我在分布式版本中设置#worker=2时,曲线(tf-2)变得接近单个gpu版本。但是4gpus(tf-3)更接近tf-1

tf-2:分布式版本(2人,2人)

tf-3:分布式版本(1人,4人)

以下是一些详细设置(基本上遵循原始文件):

批量大小=128,剩余数量=9,泄漏率=0

学习速率调度器:1-80历元为0.1,81-120历元为0.01,120-160历元为0.001

环境:

Tensorflow版本:0.12.1

CUDA和cuDNN的安装版本:CUDA 7.5、cuDNN 5.1

可以找到单个gpu版本代码

可以找到分布式版本的代码

有人知道为什么当工人增加时情况会逐渐恶化吗?谢谢


更新的数字

根据commit ecdee38a(我认为v0.12.1包括该commit),tensorflow似乎使用了平均值而不是每个工人计算的求和梯度。因此,我在4gpus案例中尝试了学习率为4倍的一个。但结果更糟

1xlr:1x学习率(0.1/0.01/0.001)

4xlr:4x学习率(0.4/0.04/0.004)


请注意,ecdee38a将梯度聚合从相加更改为平均值,因此需要将k个工人的学习率乘以k才能得到相同的结果。您能否先调试玩具示例(即,为标量x最小化x^2)以确保事情按预期进行?谢谢您的回复。是的,早些时候我意识到了这个可能的问题,所以我运行了一个学习率更高的(乘以#worker)。但我得到了更糟糕的结果。请查看我更新的帖子的数字。感谢您的建议,我稍后将尝试一些玩具示例。sync_副本优化器应该相当于使用单机tensorflow进行更大的批量