2017-08-16 91 views
1

我使用的計算機是1080,其具有8GB的GPU存儲器,我的計算機的存儲器是32GB,但是陣列數據可能會很大以供我恢復,電腦告訴我資源枯竭。如果有無論如何解決這個問題或評估我需要這樣一個龐大的numpy陣列的GPU內存,所以我可以買一臺更好的計算機進行計算。通過我使用的batch_size的方式是1,所以我已經將內存減少到最小,或者我應該考慮減少原始列和我的numpy數組的高度,並且我認爲這會影響我的結果的解決方案,那將是可以的。當分配形狀張量時的OOM [1,144,144,144,128]

如果有人能回答我的問題。謝謝

回答

1

您使用的張量本身很大,但對於8Gb GPU來說並不那麼大。 144 * 144 * 144 * 128約爲3.8億,所以即使是32位的產品也需要1.5GiB。我有一塊GeForce GTX 1070配備8GB(同樣大小你)這是我的Tensorflow實驗:

import numpy as np 
import tensorflow as tf 

X = tf.placeholder(dtype=tf.int32, shape=(1, 144, 144, 144, 128)) 
init = tf.global_variables_initializer() 

with tf.Session() as session: 
    session.run(init) 
    value = session.run([X], feed_dict={X: np.zeros(shape=(1, 144, 144, 144, 128))}) 
    print np.array(value).shape 

輸出:

name: GeForce GTX 1070 
major: 6 minor: 1 memoryClockRate (GHz) 1.7465 
pciBusID 0000:01:00.0 
Total memory: 7.92GiB 
Free memory: 4.14GiB 
2017-08-17 20:05:54.312424: I tensorflow/core/common_runtime/gpu/gpu_device.cc:908] DMA: 0 
2017-08-17 20:05:54.312430: I tensorflow/core/common_runtime/gpu/gpu_device.cc:918] 0: Y 
2017-08-17 20:05:54.312444: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0) 
(1, 1, 144, 144, 144, 128) 

注意空閒內存大於8GB低得多,因爲我用2個UHD監視器。所以這可能是您的情況的第一個原因:其他進程可能會消耗大量GPU資源。

接下來,您沒有提供神經網絡架構,但是如果您使用的是深度卷積神經網絡,請注意第一層消耗大量內存用於參數和漸變。您可能想要閱讀this helpful page for details。如果是這種情況,則可能需要插入另一個GPU並將圖形分割到所有可用的GPU(here's how you can do it)中。 NVidia提供12Gb內存GPU。

最後,您始終可以考慮爲所有變量減少浮動精度tf.float64 -> tf.float32 -> tf.float16。這可以節省8倍的內存,這有時足以在GPU上運行。

+0

感謝您的回覆,我已經通過讓老闆購買了更好的機器來解決了這個問題。並且可以通過使用特殊的更淺的網絡並使用int32或int16來緩解問題 – user158615

相關問題