GPU 版本訓練,程序剛啓動時,可能會出現下面的錯誤信息:
-
Could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
-
Failed to get convolution algorithm. This is probably because cuDNN failed to initialize.so try looking to see if a warning log message was printed above
解決方案:
- 首先請確保安裝的 CUDA、Cudnn、Tensorflow-gou 版本一致兼容性,關於各版本對應需安裝的版本情況,可以查看這篇博文:tensorflow各個版本的CUDA以及Cudnn版本對應關係;此處一個小建議:不要安裝的 CUDA 版本太高,9.0、10.0的就可以,安裝tensorflow-gpu是不要用conda 命令,要用 pip 命令,conda 安裝的話會捆綁一個對應不兼容 CUDA版本
-
在安裝版本沒有問題的情況下,導致報錯的原因就是內存不足的原因,可以在在代碼開始部分加入幾行控制 GPU 內存消耗的命令,如下;
參考鏈接: https://github.com/tensorflow/tensorflow/issues/28326
import keras
import tensorflow as tf
config = tf.ConfigProto(allow_soft_placement=True)
config.gpu_options.allow_growth = True
config.gpu_options.per_process_gpu_memory_fraction = 0.7
keras.backend.tensorflow_backend.set_session(tf.Session(config=config))
per_process_gpu_memory_fraction = 0.7
,0.7表示 GPU 內存消耗最大佔比,不要設置過高,0.7、0.8即可;allow_soft_placement=True
,當 訓練時 GPU 內存消耗不足或者衝突是,程序自行對內存進行分配;不足或者衝突是,程序自行對內存進行分配;