RTX 2070上配置指定版本TensorFlow1.14 GPU版运行Conv2D报cuDNN初始化失败怎么办
执行Conv2D算子报cuDNN初始化失败的排查方案
基础兼容判定
当前所用的依赖版本组合(CUDA 10.1.243 + cuDNN 7.6.5 + TensorFlow 1.14)理论上支持GeForce RTX 2070显卡,报错通常由配置错配触发,按以下顺序排查即可定位问题。
分步排查操作
- 核验显卡驱动版本基线
RTX 2070运行CUDA 10.1对应的最低驱动版本为418.87.00,直接在终端执行nvidia-smi,查看输出右上角显示的支持CUDA版本,若低于10.1,需先升级显卡驱动,否则即使conda环境内依赖安装完全,也会出现cuDNN无法初始化的问题。 - 清理重复安装的TensorFlow包冲突
当前安装列表同时存在tensorflow=1.14.0=gpu_py36h3fb9ad6_0和tensorflow-gpu=1.14.0=h0d30ee6_0两个功能重叠的包,二者会互相覆盖底层动态库文件,是该场景下最高发的报错触发源。需执行以下命令清理后重新安装单一份额的GPU版TensorFlow:conda remove tensorflow tensorflow-gpu tensorflow-base tensorboard tensorflow-estimator conda install tensorflow-gpu=1.14.0 cudatoolkit=10.1.243 cudnn=7.6.5 - 修复显存访问权限冲突
RTX 2070默认开启的显存统一映射(UBO)功能,会导致TensorFlow 1.14初始化时一次性申请全量显存的逻辑失效,cuDNN因无法获取合法显存区域无法完成初始化。需要在代码最开头、所有TensorFlow导入逻辑之前,添加以下环境变量配置:
上述配置会关闭TensorFlow的全量显存预分配逻辑,改为按需申请显存,避免UBO映射区域的访问权限错误。import os os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true' os.environ['CUDA_DEVICE_ORDER'] = 'PCI_BUS_ID' os.environ['CUDA_VISIBLE_DEVICES'] = '0' - 规避动态库路径优先级冲突
若系统层面安装过其他版本的CUDA/cuDNN,系统动态库搜索路径LD_LIBRARY_PATH会优先加载旧版本库,与conda环境内的版本不匹配导致初始化失败。可在启动训练前,临时将conda环境的lib目录加入动态库搜索优先级:export LD_LIBRARY_PATH=/home/khawar/anaconda3/envs/AAAIFace/lib:$LD_LIBRARY_PATH python train_main.py - 关闭卷积算法自动寻优完成验证
TensorFlow 1.14默认会调用cuDNN的cudnnFind接口自动搜索最优卷积算法,若搜索过程中因为显存不足、权限问题失败,就会触发当前报错。可在TensorFlow会话初始化时,关闭自动寻优、限制单进程显存占比,快速定位问题:import tensorflow as tf config = tf.ConfigProto() config.gpu_options.allow_growth = True config.gpu_options.per_process_gpu_memory_fraction = 0.5 tf.Session(config=config)
内容的提问来源于stack exchange,提问作者Khawar Islam
相关产品推荐
相关产品推荐

