Tensorflow 小批量多GPU的培训

Tensorflow 小批量多GPU的培训,tensorflow,Tensorflow,我在一台有两个GPU的机器上运行TensorFlow,每个GPU都有3 GB内存。我的批量大小只有2GB,因此可以安装在一个GPU上。使用两个GPU(使用CUDA\u VISIBLE\u设备)进行培训是否有意义?如果我这样做了,TensorFlow将如何分配培训?关于内存:我假设您的意思是一个数据批是2GB。然而,Tensorflow也需要内存来存储变量以及隐藏层结果等(计算梯度)。出于这个原因,它还取决于您的具体型号是否有足够的内存。您最好的选择是只使用一个GPU,看看程序是否因内存错误而崩溃

我在一台有两个GPU的机器上运行TensorFlow,每个GPU都有3 GB内存。我的批量大小只有2GB,因此可以安装在一个GPU上。使用两个GPU(使用
CUDA\u VISIBLE\u设备
)进行培训是否有意义?如果我这样做了,TensorFlow将如何分配培训?

关于内存:我假设您的意思是一个数据批是2GB。然而,Tensorflow也需要内存来存储变量以及隐藏层结果等(计算梯度)。出于这个原因,它还取决于您的具体型号是否有足够的内存。您最好的选择是只使用一个GPU,看看程序是否因内存错误而崩溃

关于分布:Tensorflow根本不会自动完成这项工作。每个op都放在某个设备上。默认情况下,如果您有任意数量的GPU可用,所有与GPU兼容的操作都将放在第一个GPU上,其余的放在CPU上。尽管默认情况下Tensorflow在所有GPU上保留所有内存,但仍然存在这种情况

你应该看看。最重要的是,您可以将
与tf.device
上下文管理器一起使用,以便在其他GPU上放置ops。使用此方法,可以将批处理拆分为X个块(X=GPU的数量),并在每个设备上定义模型,每次都将相应的块作为输入,并确保重用变量

如果您使用的是
tf.Estimator
,则有一些信息。在这里,仅使用两个简单的包装器就可以很容易地执行分布式执行,但我个人还未能成功地使用它(速度非常慢,并且会随机崩溃)