TensorFlow+CUDA+cuDNN环境运行ResNet152报错:DNN库未找到
问题描述
在Conda环境的Jupyter Notebook中运行ResNet152模型时,出现DNN library is not found.错误(对应节点为model/conv1_conv/Conv2D)。已将TensorFlow降级至2.10.0、CUDA降级至11.2、cuDNN降级至8.1.0,且配置好系统路径,但问题仍未解决。
运行代码
from tensorflow.keras.applications import ResNet50, ResNet101, ResNet152, InceptionResNetV2, DenseNet121 from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Activation, BatchNormalization from tensorflow.keras import mixed_precision, layers, models import tensorflow as tf from tensorflow.keras.optimizers.schedules import ExponentialDecay from tensorflow.keras.optimizers import Adam, RMSprop import os # 补充原代码缺失的os导入 mixed_precision.set_global_policy('mixed_float16') base_model = ResNet152(weights='imagenet', include_top=False, input_shape=(256, 256, 3)) for layer in base_model.layers: layer.trainable = True pooling_layer = layers.GlobalAveragePooling2D()(base_model.output) output_layer = layers.Dense(1, activation='sigmoid', name='output_layer')(pooling_layer) model = Model(inputs=base_model.input, outputs=output_layer) initial_learning_rate = 0.001 lr_schedule = ExponentialDecay( initial_learning_rate, decay_steps=50, decay_rate=0.9, staircase=False) optimizer = Adam(learning_rate=lr_schedule) model.compile( optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy', tf.keras.metrics.Precision(), tf.keras.metrics.Recall(), tf.keras.metrics.AUC(name='auc')] ) model.summary() os.environ['CUDA_VISIBLE_DEVICES'] = '0' history = model.fit(dataset_batched_withoutnames, epochs=5)
报错信息
DNN library is not found. [[{{node model/conv1_conv/Conv2D}}]] [Op:__inference_train_function_55822]
可能的解决方向
验证CUDA/cuDNN加载状态:在代码开头添加检测代码,确认TensorFlow是否真的识别到GPU和相关库:
print(tf.config.list_physical_devices('GPU')) print(tf.test.is_built_with_cuda()) print(tf.test.is_built_with_gpu_support()) print(tf.__version__)如果输出无GPU设备或CUDA未启用,说明环境配置未生效——可能是Conda环境未关联系统CUDA库,或是路径配置仅在终端生效、Jupyter未读取到。
提前设置GPU可见性:把
os.environ['CUDA_VISIBLE_DEVICES'] = '0'移到代码最开头(导入os之后、导入TensorFlow之前),避免TensorFlow初始化时默认用CPU。暂时关闭混合精度:注释掉
mixed_precision.set_global_policy('mixed_float16'),测试是否能正常运行。部分旧版CUDA/cuDNN对混合精度的兼容性较差,若关闭后能运行,再针对性调整混合精度配置。确认Conda环境独立性:用
conda list查看当前环境的TensorFlow版本是否为2.10.0,且无其他版本残留;同时确认环境内是否安装了cudatoolkit=11.2和cudnn=8.1.0。如果是手动下载的cuDNN,要确保解压后的文件放到了Conda环境的lib和include目录下(比如your_env_path/lib/和your_env_path/include/),而非仅放在系统路径。重启环境与内核:修改配置或库版本后,必须重启Jupyter内核、重新激活Conda环境,避免旧配置被缓存导致新设置不生效。
检查GPU驱动版本:CUDA 11.2要求最低NVIDIA驱动版本为450.80.02,确认你的驱动版本达标,过低的驱动会导致CUDA无法正常工作。
内容的提问来源于stack exchange,提问作者Stephen Lee

