33

所以我在一台装有GeForce GTX 980显卡的 Windows 10 机器上安装了 GPU 版本的 TensorFlow。

诚然,我对显卡知之甚少,但根据 dxdiag 的说法,它确实有:

4060MB专用内存 (VRAM) 和;

8163MB共享内存

总共约12224MB

不过,我注意到的是,这种“共享”内存似乎毫无用处。当我开始训练模型时,VRAM 将填满,如果内存需求超过这些4GB,TensorFlow 将崩溃并显示“资源耗尽”错误消息。

当然,我可以通过选择适当低的批量大小来防止达到这一点,但我确实想知道是否有办法利用这些“额外”8GB的 RAM,或者就是这样,TensorFlow 需要专用内存。

4

3 回答 3

42

共享内存是主系统 RAM 中为图形保留的区域。参考:

https://en.wikipedia.org/wiki/Shared_graphics_memory

https://www.makeuseof.com/tag/can-shared-graphics-finally-compete-with-a-dedicated-graphics-card/

https://youtube.com/watch?v=E5WyJY1zwcQ

这种类型的内存是集成显卡(例如 Intel HD 系列)通常使用的内存。

这不在您的 NVIDIA GPU 上,CUDA 无法使用它。Tensorflow 在 GPU 上运行时不能使用它,因为 CUDA 不能使用它,在 CPU 上运行时也不能使用它,因为它是为图形保留的。

即使 CUDA 可以以某种方式使用它。它不会有用,因为系统 RAM 带宽比 GPU 内存带宽小 10 倍左右, 并且您必须以某种方式通过慢速(和高延迟)PCIE 总线从 GPU 获取数据。

参考带宽:GeForce GTX 980:224 GB/s 台式机主板上的 DDR4:约 25GB/s PCIe 16x:16GB/s

这没有考虑延迟。在实践中,在数据上运行 GPU 计算任务,这些数据太大而无法放入 GPU 内存并且每次访问时都必须通过 PCIe 传输,对于大多数类型的计算来说是如此缓慢,以至于在 CPU 上执行相同的计算会快得多.

当您的机器中有 NVIDIA 卡时,为什么会看到分配了这种内存?好问题。我可以想到几种可能性:

(a) 您同时激活了 NVIDIA 和 Intel 图形驱动程序(例如,在两者上运行不同的显示器时会发生这种情况)。在 BIOS 中卸载 Intel 驱动程序和/或禁用 Intel HD 显卡,共享内存将消失。

(b) NVIDIA 正在使用它。这可能是例如额外的纹理内存等。它也可能不是真正的内存,而只是对应于 GPU 内存的内存映射区域。在 NVIDIA 驱动程序的高级设置中查看控制此设置的设置。

无论如何,不​​,Tensorflow 没有任何东西可以使用。

于 2018-03-09T12:17:11.713 回答
11

CUDA 也可以使用 RAM。在 CUDA 中,VRAM 和 RAM 之间的共享内存称为统一内存。但是,由于性能原因,TensorFlow 不允许这样做。

于 2018-09-07T13:15:59.603 回答
0

嗯,这并不完全正确。就降低批量大小而言,您是对的,但这取决于您正在训练的模型类型。如果你训练 Xseg,它不会使用共享内存,但是当你进入 SAEHD 训练时,你可以在 CPU(而不是 GPU)上设置你的模型优化器以及你的学习辍学率,这样你就可以利用它用于这些优化的共享内存,同时为您的模型分辨率和批量大小节省专用 GPU 内存。所以看起来共享内存似乎没有用,但是使用您的设置,您会发现对于某些设置,这只是重新分配正确任务的问题。您将增加迭代时间,但您将以一种或另一种方式利用该共享内存。我必须进行大量试验才能找到适用于我的 GPU 的方法,并且有一些令人惊讶的发现。这是一篇旧帖子,但我敢打赌你现在已经想通了,希望如此。

于 2021-04-27T18:34:27.720 回答