cudnn_cnn_infer64_8.dll报错126 Jupyter训练模型内核崩溃求助
问题背景
在Jupyter环境中搭建用于图像处理任务的卷积神经网络二分类模型,执行训练逻辑时Jupyter内核直接崩溃,关联CMD窗口抛出错误:Could not load library cudnn_cnn_infer64_8.dll. Error code 126。已将cuDNN路径加入系统环境变量Path,多次更换CUDA、cuDNN、TensorFlow版本后问题仍复现。
模型架构代码
model = Sequential() model.add(Conv2D(64, kernel_size=(3,3), input_shape=(150, 150, 3), activation='relu')) model.add(MaxPooling2D(pool_size=2)) model.add(Conv2D(32, kernel_size=(3,3), activation = 'relu')) model.add(MaxPooling2D(pool_size=2)) model.add(Flatten()) model.add(Dense(32, activation='tanh')) model.add(Dense(1, activation='sigmoid'))
数据加载配置
训练集数据增强与生成器
train_datagen=ImageDataGenerator( rotation_range=15, rescale=1./255, shear_range=0.1, zoom_range=0.2, horizontal_flip=True, width_shift_range=0.1, height_shift_range=0.1) train_datagenerator=train_datagen.flow_from_dataframe(dataframe=train_data, x_col="image_path", y_col="labels", target_size=(150, 150), class_mode="binary", batch_size=64)
测试集数据生成器
test_datagen = ImageDataGenerator(rescale=1./255) test_datagenerator=test_datagen.flow_from_dataframe(dataframe=test_data, x_col="image_path", y_col="labels", target_size=(150, 150), class_mode="binary", batch_size=64)
触发崩溃的训练代码
history = model.fit(train_datagenerator, epochs=20)
当前环境版本
- Python 3.9
- CUDA 11.5
- cuDNN 8.3.1(适配CUDA 11.5版本)
- TensorFlow 3.7(注:目前无正式发布的TensorFlow 3.7版本,大概率为笔误,对应匹配CUDA11.5的GPU版本应为TensorFlow 2.7)
排查解决步骤
错误码126的核心原因是系统加载cudnn_cnn_infer64_8.dll时,要么找不到该文件本身,要么找不到该dll依赖的其他关联文件,仅把cuDNN路径加入系统Path不能完全解决加载问题,按以下顺序操作:
- 直接部署cuDNN文件到CUDA目录
不要仅靠添加环境变量加载cuDNN:- 解压cuDNN 8.3.1安装包,得到
bin、include、lib三个文件夹 - 将三个文件夹内的所有文件,直接复制到CUDA 11.5安装目录的对应同名文件夹下,默认安装路径为
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5,出现同名文件提示时选择覆盖 - 操作完成后重启电脑,清空dll加载缓存
- 解压cuDNN 8.3.1安装包,得到
- 补全缺失的依赖项
cudnn_cnn_infer64_8.dll加载失败多数情况是缺少它依赖的其他运行库:- 安装最新版x64架构的Microsoft Visual C++ Redistributable运行库
- 检查CUDA的bin目录下是否存在
zlibwapi.dll,如果没有,下载64位版本的该dll放入bin目录 - 可以用Dependencies工具打开
cudnn_cnn_infer64_8.dll,直接查看工具标红的缺失依赖项,针对性补全即可
- 调整环境变量优先级
- 打开CMD执行
where cudnn_cnn_infer64_8.dll,查看返回的路径列表 - 如果排在首位的路径不是CUDA 11.5安装目录下的bin路径,打开系统环境变量编辑页,将CUDA 11.5的bin路径上移到Path列表的最顶端,避免系统加载到其他软件(其他版本CUDA、显卡驱动自带组件、WSL等)附带的不兼容版本dll
- 打开CMD执行
- 问题验证
如果以上操作后仍报错,可以在代码最开头加入以下两行,强制TensorFlow使用CPU运行:
加完代码后如果模型能正常训练,可100%确认问题出在CUDA/cuDNN的dll加载链路,回到前面步骤重新排查即可。import os os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
内容的提问来源于stack exchange,提问作者Walid Torfa
相关产品推荐
相关产品推荐

