测试Yolo-v3遇InvalidArgumentError:GPU设备分配失败求助
解决TensorFlow-GPU 1.15无法识别GPU的训练报错问题
从你遇到的错误信息来看,核心问题很明确:TensorFlow被要求在/device:GPU:0上执行操作,但它根本检测不到可用的GPU设备,只能 fallback 到CPU运行。咱们一步步排查可能的原因,先从最基础的环境配置开始:
1. 先验证TensorFlow是否真的能识别GPU
先别着急跑YOLO训练,先在Python环境里执行这段代码,直接确认TensorFlow对GPU的检测情况:
import tensorflow as tf # TensorFlow 1.x的GPU检测命令 print(tf.test.is_gpu_available()) print(tf.test.gpu_device_name())
如果输出是False或者空字符串,那说明TensorFlow-GPU完全没识别到GPU,问题和YOLO代码无关,百分百出在GPU环境配置上。
2. 检查版本匹配性(最常见的坑)
TensorFlow 1.15对CUDA、cuDNN的版本有严格要求,版本不对的话,哪怕装了tensorflow-gpu,也会自动用CPU运行:
- 必须搭配CUDA 10.0(注意:1.15不支持CUDA 10.1及以上版本,别图新装高版本)
- 对应cuDNN版本是7.6.x(比如7.6.5)
你可以先查看自己的CUDA版本(终端输入nvcc -V),以及cuDNN的版本,确认是否符合要求。
3. 检查NVIDIA驱动版本
CUDA 10.0需要的NVIDIA驱动版本至少是410.48,如果你的驱动版本低于这个数值,也会导致GPU无法被识别。终端输入nvidia-smi就能看到当前驱动版本,要是不够的话,得升级到对应版本(注意别升太新,和CUDA 10.0兼容就行)。
4. 确认环境变量配置正确
CUDA和cuDNN的路径必须正确添加到系统环境变量里,否则TensorFlow找不到相关库:
- Windows:把
CUDA_PATH\bin、CUDA_PATH\libnvvp,以及cuDNN解压后的bin、lib\x64路径加到系统Path变量中 - Linux:在
~/.bashrc里添加以下内容,然后执行source ~/.bashrc生效:export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH export PATH=/usr/local/cuda/bin:$PATH
5. 代码层面的小排查(如果前面都没问题)
要是前面的验证都显示GPU可用,但训练时还是报错,那可以看看YOLO代码的设备指定逻辑:
- 检查
config.json里有没有强制指定GPU编号的配置,或者train.py里有没有手动写tf.device('/device:GPU:0')的代码——如果你的GPU实际编号不是0(比如多GPU环境),就会出现这个错误。 - 可以尝试在
train.py开头添加这段代码,让TensorFlow自动选择可用GPU:import tensorflow as tf config = tf.ConfigProto() config.gpu_options.allow_growth = True # 按需分配GPU显存,避免占满 sess = tf.Session(config=config)
总结
从你的报错来看,大概率是TensorFlow-GPU的环境配置出了问题,导致它没识别到GPU。优先按上面的顺序排查,先通过GPU检测代码确认问题根源,再针对性解决版本、驱动或环境变量的问题。
内容的提问来源于stack exchange,提问作者jwm
相关产品推荐
相关产品推荐

