Keras-TensorFlow GPU内存异常及双GPU配置问题求助
问题排查与解决方案
看起来你遇到的问题是由CUDA版本不匹配、GPU资源分配异常以及系统更新后的驱动/配置变动共同导致的,我帮你逐一拆解解决:
1. 优先解决CUDA版本不匹配的核心问题
这是最关键的诱因:你的nvcc --version显示CUDA toolkit是9.1,但NVIDIA-SMI显示驱动支持的最高CUDA版本是10.2,而TensorFlow 1.13.1的官方要求是CUDA 10.0 + cuDNN 7.4。版本不匹配会导致TensorFlow无法正确和GPU驱动交互,进而出现内存计算错误、设备识别异常等问题。
解决步骤:
- 卸载当前的CUDA 9.1 toolkit,安装对应TensorFlow 1.13.1的CUDA 10.0(注意选择和系统适配的版本)
- 下载并安装匹配CUDA 10.0的cuDNN 7.4,将cuDNN的文件复制到CUDA安装目录对应的文件夹中
- 调整系统PATH环境变量,确保CUDA 10.0的
bin和libnvvp目录排在最前面,避免旧版本干扰
2. 修复GPU识别与内存分配问题
关于Quadro K620未被识别
Quadro K620属于Kepler架构,TensorFlow 1.13.1理论上是支持的,未被识别大概率是CUDA版本不兼容导致的。解决完上面的CUDA版本问题后,重新运行以下代码检查:
from tensorflow.python.client import device_lib print(device_lib.list_local_devices())
如果还是无法识别,可以尝试:
- 卸载当前NVIDIA驱动,安装适配CUDA 10.0的推荐驱动(比如418.96版本,官方适配CUDA 10.0的稳定驱动)
- 检查Windows更新是否禁用了Quadro的硬件加速,在NVIDIA控制面板中确认Quadro K620的3D设置正常
关于Tesla K40c内存分配异常崩溃
训练时一次性占用接近全部GPU内存后崩溃,是因为TensorFlow默认会预占全部GPU内存,加上版本不兼容导致内存计算错误。可以通过代码设置内存按需分配来避免:
import os # 手动指定仅使用Tesla K40c(避免多GPU混淆,先单卡验证) os.environ["CUDA_VISIBLE_DEVICES"] = "0" # 设置GPU内存按需分配,避免一次性占满 from tensorflow.compat.v1 import ConfigProto from tensorflow.compat.v1 import InteractiveSession config = ConfigProto() config.gpu_options.allow_growth = True session = InteractiveSession(config=config)
另外,训练前关闭所有占用GPU的程序(比如其他Jupyter进程、NVIDIA后台服务等),确保Tesla K40c的内存是完全空闲的。
3. AVX警告的影响:完全无关,可忽略
这个警告只是说你的CPU支持AVX高级指令集,但当前安装的TensorFlow二进制包没有编译支持该指令集,只会导致CPU计算速度稍慢,完全不会影响GPU训练、内存分配或者程序崩溃。如果你追求极致CPU性能,可以自己编译TensorFlow,但完全没必要为了这个折腾,直接忽略即可。
4. 额外环境排查建议
- 检查Anaconda环境是否有依赖冲突:可以创建一个全新的虚拟环境,仅安装Python3.6.8、TensorFlow1.13.1、Keras2.2.4,避免旧包干扰
- 确认Windows更新后,系统的GPU硬件加速功能未被禁用,在显示设置中检查图形性能首选项
内容的提问来源于stack exchange,提问作者Naomi Fridman
相关产品推荐
相关产品推荐

