2017-08-24 60 views
0

我做了一个非常简单的网络使用mxnet(两个fc层暗淡512)。为什么mxnet的GPU版本比CPU版本更耗费内存?

通过更改ctx = mx.cpu()或ctx = mx.gpu(0),我在CPU和GPU上运行相同的代码。

GPU的内存成本比CPU版本要大得多(我使用'top'代替'nvidia-smi')。

看起来很奇怪,由于GPU版本已经在GPU上拥有内存,为什么GPU仍然需要更多内存空间?

CPU and GPU memory

(第1行CPU的程序/ 2行GPU程序)

回答

0

这可能是在每个过程多少时间运行的差异所致。 看看你的截图,CPU进程有5:48.85,而GPU有9:11.20 - 所以GPU的训练几乎是时间的两倍,这可能是原因。

1

在GPU上运行时,您将在内存中首先分配内存中的一堆不同的低级库(CUDA,CUDnn等)。如果您的网络非常小,就像您当前的情况一样,将这些库加载到RAM中的开销将高于将网络权重存储在RAM中的开销。

对于任何更大规模的网络,当在CPU上运行时,权重使用的内存量将大大超过内存中加载的库。

相关问题