我使用mxnet创建了一个非常简单的网络(两个fc图层,dim为512)。
通过更改ctx = mx.cpu()或ctx = mx.gpu(0),我在CPU和GPU上运行相同的代码。
GPU的内存成本比CPU版本大得多。(我使用' top'而不是' nvidia-smi')检查了它。
看起来很奇怪,因为GPU版本也已经在GPU上有内存,为什么GPU仍然需要更多内存空间?
(第1行是CPU程序/第2行是GPU程序)
答案 0 :(得分:1)
在GPU上运行时,您将在内存中加载一堆不同的低级库(CUDA,CUDn等),这些库首先在RAM中分配。如果您的网络非常小,就像当前情况一样,在RAM中加载库的开销将高于在RAM中存储网络权重的成本。
对于任何更大的网络,当在CPU上运行时,权重使用的内存量将显着大于内存中加载的库。
答案 1 :(得分:0)
这可能是由于每个进程运行的时间不同。 看看你的截图,CPU进程有5:48.85而GPU有9:11.20 - 因此GPU训练的运行时间几乎是原因的两倍。