gpt4 book ai didi

python - TensorFlow:分配给 cpu 而不是 gpu 的关键图形操作

转载 作者:行者123 更新时间:2023-11-28 22:38:41 26 4
gpt4 key购买 nike

我已经将 TensorFlow DNN 模型(2 个隐藏层,带有在 MNIST 上训练的 elu 激活函数)实现为 Python 类,以便将 TF 调用包装在另一个库中,并使用其自己的优化例程和工具。

在 TeslaK20 上运行一些测试时,我注意到 GPU 的使用率为总容量的 4%。因此,我更仔细地查看了日志设备放置,并发现所有关键操作,如 MatMulSumAddMean 等被分配给 CPU。

首先想到的是因为我用的是dtype=float64,所以我改用了dtype=float32。虽然更多的操作分配给了 GPU,但仍有很多操作分配给了 CPU,例如 Meangradient/Mean_grad/Prodgradient/Mean

所以这是我的第一个问题(我在最后链接了一个工作代码示例),

1) 为什么会这样?我编写了不同的 TF 模型,其中包含简单的张量乘法和缩减,只要我使用单精度,它们就可以完全在 GPU 上运行。

那么第二个问题来了

2) 为什么TF会根据数据类型将图分配给不同的设备?我知道并非所有内核都是为 GPU 实现的,但我认为像 MatMul 这样的东西可以在 GPU 上同时运行单精度和 double 。

3) 模型包装在 Python 类中这一事实会产生影响吗?我不认为是这种情况,因为正如我所说,其他类似包裹但更简单的模型并没有发生这种情况。

4) 我可以采取哪些步骤在 GPU 上完全运行模型?

这是我从库中分离出来的代码的完整示例

https://gist.github.com/smcantab/8ecb679150a327738102 .

如果您运行它并查看输出,您将看到图形的不同部分是如何分配给不同设备的。要查看这如何随着类型和设备的变化而变化,请在示例末尾的 main() 中更改 dtypedevice。请注意,如果我设置 allow_soft_placement=False,图形将无法初始化。

如有任何建议,我们将不胜感激。

最佳答案

正如 Yaroslav 所说:Mean, in particular, was not yet implemented for GPU ,但它现在可用,因此这些操作应该在具有最新 TensorFlow 的 GPU 上运行。 (根据该链接上的 DEVICE_GPU 注册)

在平均值可用之前,它的状态是:

(a) 您可以手动实现均值,因为reduce_sum is available on GPU .

(b) 我已重新联系某人以查看是否有添加 GPU 支持的简单方法,但我们会拭目以待。

关于 GPU 上的 float64,三天前有人打开了一个问题,其中包含一个补丁 supporting float64 reductions on GPU .目前正在审核和测试中。

不,它是否包装在 Python 中并不重要 - 实际上只是关于是否定义了内核以使其在 GPU 上执行。在许多情况下,答案是“为什么 Y 不支持 GPU 上的 X?”归结为是否需要 Y 在 GPU 上运行。 float64 的答案更简单:float32 快得多,因此在大多数情况下,人们努力让他们的模型尽可能在 float32 中运行,因为它提供了全面的速度优势。

关于python - TensorFlow:分配给 cpu 而不是 gpu 的关键图形操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35443080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com