Tensorflow。如何在GPU之间分配操作

时间:2017-12-15 15:44:21

标签: multithreading tensorflow tensorflow-gpu google-cloud-ml

我在google cloud ml-engine上运行了一个非常大的Tensorflow模型。 使用比例等级basic_gpu(使用batch_size=1)时,我会收到如下错误:

  

资源耗尽:OOM在分配形状的张量时[1,155,240,240,16]

因为模型太大而无法放入一个GPU中。

使用提供4个GPU的层comple_model_m_gpu,我可以在4个GPU之间传播操作。

但是,我记得读过GPU之间的通信速度很慢,可能会造成培训的瓶颈。这是真的吗?

如果是这样,是否有建议的方法在GPU之间传播操作以防止出现此问题?

2 个答案:

答案 0 :(得分:3)

我推荐以下指南:

Optimizing for GPU

从指南中:

  

处理变量更新的最佳方法取决于模型,   硬件,甚至硬件的配置方式。

基于指南的一些建议:

  • 尝试使用具有16 GB RAM的P100(与K80上的12相比)。它们也明显更快,但它们也花费更多
  • 将变量放在CPU上:tf.train.replica_device_setter(worker_device=worker, ps_device='/cpu:0', ps_tasks=1)

答案 1 :(得分:0)

使用Tesla P100 GPU代替Tesla K80 GPU解决了这个问题,因为P100具有Page Migration Engine的功能。

  

页面迁移引擎使开发人员可以更专注于调优   计算性能而不是管理数据移动。应用   现在可以扩展到GPU的物理内存大小到虚拟   无限的记忆。