tensorflow2.0卷積報錯Failed to get convolution algorithm. This is probably because cuDNN failed t
說明:環境是tensorflow2.0.0,測試GPU沒有問題。
但在運作模型出現錯誤。
UnknownError: 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. [Op:Conv2D]
解決方法添加下面兩行
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '/gpu:0' # 運作程式,都會占用gpu0全部資源
# 多個GPU時,如果運作隻使用了一個的話,可以設定為‘/gpu:0,1’等等
# 另一種寫法
os.environ['CUDA_DEVICE_ORDER'] = 'PCI_BUS_ID' # 按照PCI_BUS_ID順序從0開始排列GPU裝置
os.environ['CUDA_VISIBLE_DEVICES'] = "0,1" #設定目前使用的GPU裝置為0,1号兩個裝置,名稱依次為'/gpu:0'、'/gpu:1'。
#[0,1]和[1,0]排列的裝置是不同的,排在前面的裝置優先級高,運作程式的時候會優先使用。
其他一些解答(我測試沒有成功,但可能是我遇到的情況不一緻)
1.矛頭指向了是因為顯存配置設定沒搞好造成的
解決代碼
import tensorflow as tf
config = tf.compat.v1.ConfigProto(allow_soft_placement=True)
config.gpu_options.per_process_gpu_memory_fraction = 0.8
tf.compat.v1.keras.backend.set_session(tf.compat.v1.Session(config=config))
來分析一下這段代碼以及問題原因:
衆所周知,keras以TensorFlow做背景時,TensorFlow會預設吃掉所有可用的顯存(即便此時沒有用到做計算,這些顯存也會顯示占用來待命)
第二行的0.3,意思是限制每個模型隻能配置設定30%的顯存,不允許吃掉所有。當然這是理論值,當實際開始計算時,如果需要,依然可以超出這個理論值。
2 也是說顯示卡記憶體配置設定問題
from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)
這個設定為按需配置設定