我對在Tensorflow中使用GPU有些疑惑。我正在遵循卷積神經網絡教程here(tensorflow/models/image/cifar10/cifar10_train.py)。與本教程中一樣,所有參數(例如權重)均在CPU內存中存儲和更新,而GPU僅用於計算梯度或推理。在TensorFlow中使用GPU時的內存管理
由於權重存儲在CPU中,它們應該在每次迭代中同步,看起來GPU未充分利用(根據nvidia-smi
,大約60%)。在使用多個GPU的情況下,我知道權重應該存儲在CPU內存中以在GPU之間同步。但是,爲什麼本教程即使在單GPU中也將所有權重存儲在CPU中?有什麼方法可以在GPU內存中存儲和更新它們嗎?
在推斷的情況下,權重是否複製到GPU一次並重用它們?還是應該在每次使用時複製它們?
圖像數據如何?看起來這些數據駐留在GPU中(不確定)。這些數據何時轉移到GPU?從磁盤加載它們時?或者當GPU需要它們時?
- 如果將它們從磁盤加載後立即複製到GPU,如果圖像數據的大小太大而無法放入GPU內存,會發生什麼情況?在這種情況下,有任何方法可以分別複製數據(如預取)?
- 如果將它們按需複製到GPU,在GPU實際使用它們以避免空閒時間之前是否有任何方法來預取它們?
編輯:這將是有益的,如果有任何的方法來檢查,其中發送/ recv的節點被CPU和GPU之間插入(如在white paper)。
您可以使用隊列將數據提取到GPU中。它將在計算進行時被複制,並且有線程代碼保持它已滿。 – drpng