已配置CUDA环境,如何让TensorFlow调用GPU运行YOLO(darkflow)?
看起来你的核心问题是TensorFlow没有正确识别并调用GTX 650 GPU,导致darkflow只能跑在CPU上,帧率惨不忍睹。咱们一步步排查解决:
1. 先确认TensorFlow本身能否检测到GPU
这是最基础的一步,先排除TensorFlow本身的配置问题。打开Python3终端,运行以下代码:
import tensorflow as tf # TensorFlow 1.x 用这个查看设备分配详情 sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) # 直接检查GPU是否可用 print("GPU available:", tf.test.is_gpu_available())
如果输出里没有GPU设备的信息,或者is_gpu_available()返回False,那问题出在TensorFlow的GPU配置上,和darkflow无关,优先解决这个。
2. 修复环境变量(避免sudo导致的变量丢失)
你用sudo python3运行命令,这会重置系统环境变量,导致TensorFlow找不到CUDA和CudNN的库。解决办法:
- 优先不用sudo运行,确保普通用户能访问darkflow目录、视频文件等资源
- 如果必须用sudo,要手动传递环境变量:
sudo LD_LIBRARY_PATH=$LD_LIBRARY_PATH CUDA_HOME=$CUDA_HOME python3 ./flow --model cfg/yolo.cfg --load yolo.weights --demo dji_0004.MP4 --gpu 1.0
另外,确保你的环境变量已经正确设置并生效,把以下内容加到~/.bashrc里:
export CUDA_HOME=/usr/local/cuda export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH export PATH=/usr/local/cuda/bin:$PATH
然后运行source ~/.bashrc让变量立即生效,再重新测试。
3. 重新编译darkflow的GPU支持
darkflow需要编译对应的CUDA运算内核才能利用GPU,可能你之前的编译没有正确关联CUDA。按以下步骤重新编译:
- 进入darkflow的根目录
- 清理之前的编译残留文件:
rm -rf build/ *.so - 编译GPU版本的扩展模块:
如果编译时提示找不到CUDA,手动指定CUDA路径:python3 setup.py build_ext --inplaceCUDA_PATH=/usr/local/cuda python3 setup.py build_ext --inplace - 重新安装darkflow:
pip install -e .
4. 开启GPU持久化模式
你的nvidia-smi显示GPU的Persistence-M是Off,虽然不是致命问题,但开启后能避免GPU休眠导致的检测失败:
sudo nvidia-smi -pm 1
5. 查看TensorFlow详细日志定位错误
运行darkflow时开启TensorFlow的详细日志,看看有没有具体的错误提示:
TF_CPP_MIN_LOG_LEVEL=0 python3 ./flow --model cfg/yolo.cfg --load yolo.weights --demo dji_0004.MP4 --gpu 1.0
日志里如果出现类似failed to load CUDA library或者unsupported GPU architecture的信息,就能针对性解决。
补充说明:GTX 650的算力3.0确实在TensorFlow 1.0的支持范围内,硬件本身没问题,重点还是环境配置和darkflow的编译环节。
内容的提问来源于stack exchange,提问作者Caio Suzuki

