tf.config.list_physical_devices('gpu') 返回空列表,表明gpu未被tensorflow识别,根本原因是nvidia驱动、cuda toolkit、cudnn、python四者版本未对齐;需依次验证nvidia-smi、nvcc -v、libcudnn.so.8存在性及ld_library_path配置。

tf.config.list_physical_devices('GPU') 返回空列表,不是因为没装 TensorFlow,而是驱动、CUDA、cuDNN、Python 版本四者中至少一个没对齐。别急着重装,先查清楚哪一环断了。
确认 NVIDIA 驱动是否真就绪
nvidia-smi 能显示显卡信息 ≠ 驱动可被 CUDA 调用。常见假成功现象:
- nvidia-smi 正常输出,但 nvcc -V 报 command not found → CUDA Toolkit 根本没装
- nvidia-smi 右上角写 “CUDA Version: 12.4”,但你装的是 CUDA 12.3 → 没问题,这只是驱动支持上限
- nvidia-smi 报 “NVIDIA-SMI has failed…” → 驱动未安装或与内核不兼容,必须重装对应版本的 nvidia-driver(如 Ubuntu 22.04 推荐 nvidia-driver-535)
选对 Python 和 TensorFlow 组合,别碰 3.11 或 3.8
TensorFlow 官方支持 Python 3.8–3.11,但实操中: - Python 3.8:部分新语法(如typing.Union 简写)缺失,某些 tensorflow-probability 包会 import 失败
- Python 3.11:很多预编译 wheel 还没发布,pip install tensorflow 可能退回到源码编译,失败率高
- Python 3.9:conda 渠道默认打包版本,cudatoolkit 和 cudnn 自动匹配成功率最高
所以直接执行:conda create -n tf-gpu python=3.9conda activate tf-gpu
装 tensorflow 不要加 -gpu 后缀,也别用 conda install tensorflow-gpu
从 TensorFlow 2.10 开始,tensorflow-gpu 包名已废弃。现在统一用:
pip install tensorflow但前提是:
- 环境里已有匹配的
cudatoolkit和cudnn(conda 会自动装,pip 不会) - 或你已手动把
libcudart.so.XX和libcudnn.so.8所在路径加进LD_LIBRARY_PATH
更稳的做法是:conda install cudatoolkit=11.8 cudnn=8.6(对应 TF 2.12)pip install tensorflow==2.12.0
验证 GPU 是否真可用,别只看 import 成功
import tensorflow as tf 成功不代表 GPU 就绪。必须跑这句:
print(tf.config.list_physical_devices('GPU'))如果输出 [],按顺序排查:
-
ls /usr/local/cuda-11.8/lib64/libcudnn.so.8是否存在 -
echo $LD_LIBRARY_PATH是否包含该路径(如没有,补export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH) -
python -c "import ctypes; print(ctypes.CDLL('libcudnn.so.8'))"是否报FileNotFoundError
最常被忽略的是:装完 CUDA 后没重启终端,或没把 source /usr/local/cuda-11.8/bin/setup.sh 加进 ~/.bashrc。路径漏了,tensorflow 就只能降级用 CPU。











