【问题标题】:Tensorflow. How to distribute ops between GPUs张量流。如何在 GPU 之间分配操作
【发布时间】:2017-12-16 04:12:05
【问题描述】:

我在谷歌云机器学习引擎上运行一个非常大的 Tensorflow 模型。 使用缩放层 basic_gpu(使用 batch_size=1)时,我收到如下错误:

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

因为模型太大,无法装入一个 GPU。

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

但是,我记得读过 GPU 之间的通信速度很慢,并且会在训练中造成瓶颈。这是真的吗?

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

【问题讨论】:

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


    【解决方案1】:

    我推荐以下指南:

    Optimizing for GPU

    来自指南:

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

    基于指南的一些建议:

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

    【讨论】:

    • 指南中使用的方法在 GPU 上复制模型,每个 GPU 处理不同的数据。我的模型不适合一个 GPU,所以我必须使用多个 GPU 来处理一批。我正在使用K80。该模型称为VNet
    • 谢谢,我已经在PS和CPU上放了变量,我会尝试更强大的GPU。我认为最终的解决方案必须是将输入分成更小的张量。
    【解决方案2】:

    使用 Tesla P100 GPU 而不是 Tesla K80 GPU 可以解决此问题,因为 P100 有一个名为 Page Migration Engine 的东西。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多