Ubuntu环境下TensorFlow无法调用GPU问题求助
结合你的硬件环境(GTX1060 6GB、Ryzen 7 1700x)和系统配置(Ubuntu 18.04、CUDA9.0、驱动390.59),我帮你梳理几个关键排查步骤,一步步定位问题:
1. 先确认TensorFlow真的能识别到你的GPU
别着急跑retrain.py,先写个小脚本验证下TensorFlow GPU版本是否正常识别硬件:
import tensorflow as tf print(f"TensorFlow版本: {tf.__version__}") print(f"可用GPU列表: {tf.config.list_physical_devices('GPU')}")
如果输出里看不到你的GTX1060,大概率是TensorFlow版本和CUDA9.0不兼容——TensorFlow 1.x里支持CUDA9.0的是1.10到1.12版本左右,要是你装的是更高版本的tensorflow-gpu,肯定没法正常调用GPU,得卸载重装对应版本。
2. 检查retrain.py的运行参数有没有强制走CPU
默认情况下retrain.py会自动优先用GPU,但有时候可能不小心加了强制CPU的参数。看看你启动脚本的命令里,有没有--device=cpu这种参数,或者之前设置过CUDA_VISIBLE_DEVICES=-1的环境变量(这个会让TensorFlow看不到GPU)。要是有,去掉这些再重新运行。
另外,要是你的--batch_size设得太小(比如默认的32甚至更小),GPU可能刚启动就完成了小批量计算,看起来使用率就是0。可以试着把batch size调到64或者128,给GPU足够的计算任务。
3. 验证CUDA和驱动环境是否正常工作
先在终端跑两个命令确认基础环境没问题:
nvcc --version nvidia-smi
nvidia-smi得显示你的GTX1060和390.59的驱动版本,nvcc要输出CUDA9.0.176的信息。要是这两个命令报错,说明CUDA或者驱动安装有问题,得先把环境修对——比如驱动和CUDA版本不匹配?不过390.59是支持CUDA9.0的,大概率是环境变量没设对。
打开~/.bashrc文件,添加这两行环境变量:
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
保存后运行source ~/.bashrc生效,再重启终端试试。
4. 看看是不是数据集太小导致GPU“没事干”
retrain.py里的图像预处理(解码、缩放、归一化这些)都是在CPU上做的,只有模型的训练计算才会用到GPU。如果你的数据集特别小,CPU很快就把预处理做完了,GPU还没来得及启动就没事干了,使用率自然显示为0。
可以试试:
- 扩充你的数据集规模,让GPU有持续的计算任务
- 调整
--num_preprocessing_threads参数,增大预处理的线程数,让CPU更快喂数据给GPU
5. 强制TensorFlow绑定GPU运行
要是前面都没问题,那就强制指定GPU运行试试,在启动retrain.py前加个环境变量:
CUDA_VISIBLE_DEVICES=0 python retrain.py [你的其他训练参数]
这里的0是你的GPU设备编号(单GPU的话就是0),这个命令会让TensorFlow只看到这块GPU,避免它自动选CPU。
内容的提问来源于stack exchange,提问作者user9857700

