Keras训练CNN模型CPU运行正常 GPU启动训练即停止如何解决
问题描述
用于正方形、十字形等简单图像分类任务的CNN模型,CPU运行时全流程正常;切换GPU运行后,训练阶段启动前仅输出如下日志即直接中止,无后续响应:
2022-06-15 04:25:49.158944: I tensorflow/stream_executor/cuda/cuda_dnn.cc:384] Loaded cuDNN version 8401
可行修复方案
- 校验版本匹配关系
当前加载的cuDNN版本为8.4.1,需确认本地安装的TensorFlow、CUDA、cuDNN三者版本符合官方适配对应关系:该版本cuDNN适配CUDA 11.x系列、TensorFlow 2.8~2.10区间版本,版本错位是这类无报错挂起的最高频诱因。如果手动安装依赖容易出现版本错配,可直接通过conda安装GPU版TensorFlow自动拉取适配的CUDA、cuDNN依赖,执行命令conda install tensorflow-gpu即可。 - 调整GPU显存分配策略
cuDNN加载完成后会进入显存申请阶段,默认显存全量占用策略容易和系统其他进程显存占用冲突,导致无报错挂起。可在导入TensorFlow的代码最前端添加动态显存增长配置,避免初始化阶段一次性占满显存:import tensorflow as tf gpu_list = tf.config.experimental.list_physical_devices('GPU') for gpu in gpu_list: tf.config.experimental.set_memory_growth(gpu, True) - 关闭cuDNN自动调优
TensorFlow默认开启的cuDNN算子自动调优功能,会在训练启动前遍历测试所有卷积算子选择最快实现,简单CNN模型场景下偶发死锁挂起。可在代码开头添加环境变量关闭该功能:import os os.environ['TF_CUDNN_USE_AUTOTUNE'] = '0' - 排查GPU算力兼容性
如果使用的是早期架构GPU(算力低于5.0的开普勒、麦克斯韦早期型号),cuDNN 8.4.1版本不再提供对应架构的兼容支持,会在初始化算子阶段挂起,可降级cuDNN至7.6.x版本适配老硬件。 - 调整程序运行权限
Windows系统下如果终端/IDE没有足够的GPU硬件访问权限,也会出现cuDNN加载完成后挂起的情况,以管理员身份重新启动运行程序的终端或IDE即可重试。
内容的提问来源于stack exchange,提问作者h_llmnt
相关产品推荐
相关产品推荐

