TensorFlow后端下Keras无法调用GPU的排查方法
调试TensorFlow-GPU无法识别GTX780的分步指南
我之前在Windows环境下折腾TensorFlow-GPU的时候也碰到过一模一样的GPU识别问题,给你梳理几个逐步排查的调试步骤,应该能帮你定位到故障点:
1. 先核对版本兼容性矩阵
这是最容易踩坑的点!TensorFlow-GPU对CUDA、cuDNN和自身版本的匹配要求非常严格:
- 先运行
pip show tensorflow-gpu查看你安装的TF版本 - 确认CUDA 9.1对应的cuDNN版本是7.1.x(不是随便的7.x),而TensorFlow-GPU 1.8~1.12版本才适配CUDA 9.1
- 如果版本不匹配,卸载现有TF和cuDNN,重新安装对应版本的组合
2. 验证环境变量与路径配置
虽然你说已经把cuDNN64_7.dll加入PATH,但要确认以下几点:
- 在Jupyter中运行
import os; print(os.environ['PATH']),检查输出里是否同时包含:- CUDA 9.1的bin目录(比如
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\bin) - cuDNN解压后的bin目录(比如你放cuDNN的文件夹下的
bin)
- CUDA 9.1的bin目录(比如
- 检查系统环境变量是否存在
CUDA_PATH和CUDA_PATH_V9_1,且指向正确的CUDA安装目录
3. 测试CUDA本身是否能识别GPU
如果CUDA本身都识别不了GPU,那和TensorFlow无关:
- 找到CUDA安装目录下的samples文件夹(默认路径是
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.1) - 编译并运行
deviceQuery示例程序(可以用Visual Studio打开对应的sln文件编译,或者用命令行) - 如果运行结果显示
Result = PASS,说明CUDA和显卡、驱动的交互正常;如果失败,那就要:- 确认GTX780的驱动版本是不是CUDA 9.1要求的388.xx及以上(最新驱动可能只适配高版本CUDA,反而不兼容9.1,建议回退到对应版本驱动)
- 检查显卡是否有硬件故障(不过概率很低)
4. 确认VirtualEnv环境的正确性
有时候VirtualEnv会偷偷装CPU版TensorFlow:
- 在Jupyter中运行:
import tensorflow as tf print(tf.__version__) print(tf.test.is_built_with_cuda()) - 如果
is_built_with_cuda()返回False,说明你装的是CPU版TF,执行以下步骤修复:pip uninstall tensorflow pip install tensorflow-gpu==[你需要的对应版本]
5. 检查Jupyter Kernel是否关联到VirtualEnv
很多时候Jupyter默认用系统Python,而不是你的VirtualEnv环境:
- 在Jupyter中运行
import sys; print(sys.executable),查看路径是否指向你的VirtualEnv下的python.exe - 如果不是,先激活你的VirtualEnv,然后执行:
pip install ipykernel python -m ipykernel install --user --name=你的环境名称 - 重启Jupyter,切换到新添加的kernel再测试
6. 查看TensorFlow的详细日志
开启DEBUG日志,找初始化失败的具体原因:
- 在代码开头添加:
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '0' # 开启所有日志 import tensorflow as tf tf.debugging.set_log_device_placement(True) - 然后运行
print(tf.test.gpu_device_name()),查看输出日志里的错误信息(比如找不到cuDNN库、版本不匹配、显卡计算能力不支持等)
内容的提问来源于stack exchange,提问作者Jonas Sourlier
相关产品推荐
相关产品推荐

