天天看點

tensorflow2.0卷積報錯Failed to get convolution algorithm. This is probably because cuDNN failed ttensorflow2.0卷積報錯Failed to get convolution algorithm. This is probably because cuDNN failed t

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)
           

這個設定為按需配置設定