2017-08-24 120 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上運行時,權重使用的內存量將大大超過內存中加載的庫。

相關問題