在TensorFlow中使用共享GPU内存?

问题描述 投票:12回答:2

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

不可否认,我对显卡知之甚少,但据dxdiag说它确实有:

4060MB的专用内存(VRAM)和;

8163MB的共享记忆

总共约12224MB

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

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

tensorflow shared-memory vram
2个回答
12
投票

共享内存是为图形保留的主系统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图形驱动程序(例如,在两者上运行不同的显示时)。卸载Intel驱动程序和/或禁用BIOS和共享内存中的Intel HD图形将消失。

(b)NVIDIA正在使用它。这可以是例如额外的纹理存储器等。它也可以不是真实存储器而是仅对应于GPU存储器的存储器映射区域。查看NVIDIA驱动程序的高级设置以获取控制此设置的设置。

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.