在科研服务器或非 root 权限环境下,用户往往无法通过 apt
或 yum
安装 CUDA/cuDNN。本文以 CUDA 11.5 和 cuDNN 8.3.3 为例,演示如何手动下载并配置 cuDNN,使 TensorFlow 成功识别 GPU 并启用加速。
nvcc --version
示例输出:
Cuda compilation tools, release 11.5, V11.5.119
访问官网下载 cuDNN:
https://developer.nvidia.com/rdp/cudnn-download
找到 cuDNN 8.3.3 for CUDA 11.5
选择 Linux .tar.xz
格式,例如:
cudnn-linux-x86_64-8.3.3.40_cuda11.5-archive.tar.xz
注意:需登录 NVIDIA 账户;如遇网络问题,可通过国内镜像或云盘转存。
mkdir -p $HOME/cudnn-11.5
tar -xvf cudnn-linux-x86_64-8.3.3.40_cuda11.5-archive.tar.xz -C $HOME/cudnn-11.5 --strip-components=1
验证解压结果:
ls $HOME/cudnn-11.5/lib/libcudnn.so*
将 cuDNN 的 lib
和 include
路径加入当前 shell 环境:
export LD_LIBRARY_PATH=$HOME/cudnn-11.5/lib:$LD_LIBRARY_PATH
export CPATH=$HOME/cudnn-11.5/include:$CPATH
为了每次自动加载,可以将其加入 ~/.bashrc
:
echo 'export LD_LIBRARY_PATH=$HOME/cudnn-11.5/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export CPATH=$HOME/cudnn-11.5/include:$CPATH' >> ~/.bashrc
进入你安装了 TensorFlow 的虚拟环境,例如 conda activate your_env
,运行:
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
如果一切正常,将输出类似:
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU'), ...]
Cannot dlopen some GPU libraries
问题原因:找不到 cuDNN 的动态库。
✅ 解决方法:
$LD_LIBRARY_PATH
包含 cuDNN 解压路径中的 lib/
或 lib64/
libcudnn.so
文件真实存在Memory growth cannot differ between GPU devices
问题原因:设置 memory growth 时有多个 GPU 未统一。
✅ 解决方法:在代码初始化 GPU 时,设置所有设备一致:
import tensorflow as tf
gpus = tf.config.list_physical_devices('GPU')
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
TensorFlow was not built with CUDA kernel binaries compatible with compute capability 9.0
问题原因:GPU 为新型号(如 NVIDIA H800),但当前 TensorFlow 不包含对应的预编译内核。
✅ 解决方法:
运行一个实际任务(如 BERT embedding、模型推理)并用 nvidia-smi
查看 GPU 占用:
nvidia-smi
看到进程使用 GPU 显存即表明配置成功。
步骤 | 内容 |
---|---|
CUDA 检查 | nvcc --version |
下载 cuDNN | 官网或国内镜像 .tar.xz |
解压配置环境 | export LD_LIBRARY_PATH 等 |
TensorFlow 检测 | tf.config.list_physical_devices('GPU') |
GPU 占用确认 | nvidia-smi |