3、CUDA环境搭建:NVIDIA驱动安装、CUDA Toolkit安装、cuDNN配置、环境变量设置、验证安装
说实话,很多初学者在CUDA上栽的第一个跟头,不是算法太难,而是环境没搭好。
我见过太多人花了一整天装驱动,结果黑屏了。或者CUDA Toolkit装好了,一跑代码报错说找不到设备。嗯,这些坑我都踩过。今天我就把一套稳妥的流程拆开来讲,你跟着做就行。
3.1 先搞清楚你的硬件
动手之前,先确认一件事:你的显卡支不支持CUDA?
NVIDIA官网有个列表,叫「CUDA-Enabled GPUs」。我建议你直接去查一下。我个人习惯用命令行查:
# Windows下
wmic path win32_VideoController get name
# Linux下
lspci | grep -i nvidia
看到类似「GeForce RTX 3060」、「Tesla T4」这样的型号,基本就没问题。
3.2 NVIDIA驱动安装
驱动是基础。没有驱动,CUDA Toolkit装得再好也没用。
第一步:卸载旧驱动
如果你之前装过NVIDIA驱动,建议先清理干净。我遇到过驱动冲突导致CUDA死活认不到卡的情况。
# Windows:控制面板 → 程序和功能 → 卸载NVIDIA相关所有组件
# Linux:
sudo apt-get purge nvidia-*
sudo apt-get autoremove
第二步:下载对应驱动
去NVIDIA官网,选择你的显卡型号和操作系统。我个人建议选「Studio Driver」而不是「Game Ready Driver」。为什么?Studio驱动更稳定,适合开发环境。
第三步:安装
Windows下双击运行,一路下一步就行。Linux下稍微麻烦点:
sudo chmod +x NVIDIA-Linux-*.run
sudo ./NVIDIA-Linux-*.run
安装完重启,用 nvidia-smi 验证。看到类似下面的输出,说明驱动装好了:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.05 Driver Version: 525.85.05 CUDA Version: 12.0 |
+-----------------------------------------------------------------------------+
3.3 CUDA Toolkit安装
驱动装好了,接下来装CUDA Toolkit。说白了,这就是CUDA编程的「编译器+运行时库」。
版本选择
我建议你选最新的稳定版,但别追最新。比如现在CUDA 12.x是主流,那就装12.x。为什么?因为PyTorch、TensorFlow这些框架对新版CUDA的支持有滞后。
安装步骤
去NVIDIA CUDA Toolkit存档页面下载。Windows下是exe安装包,Linux下是runfile或deb包。
# Linux下用runfile安装(推荐)
sudo sh cuda_12.0.0_525.60.13_linux.run
# 注意:安装时不要勾选Driver,因为我们已经装过了
安装路径默认在 /usr/local/cuda-12.0。我个人习惯创建一个软链接:
sudo ln -s /usr/local/cuda-12.0 /usr/local/cuda
这样以后升级版本,只需要改软链接就行。
3.4 cuDNN配置
cuDNN是NVIDIA专门为深度学习优化的库。如果你只是做通用GPU计算,可以不装。但做深度学习,必须装。
下载cuDNN
需要注册NVIDIA开发者账号。下载对应CUDA版本的cuDNN。比如你装的是CUDA 12.0,就下载cuDNN for CUDA 12.x。
安装
其实cuDNN不需要安装,解压后把文件复制到CUDA目录就行:
# 解压
tar -xzvf cudnn-linux-x86_64-8.9.0.131_cuda12-archive.tar.xz
# 复制文件到CUDA目录
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
# 设置权限
sudo chmod a+r /usr/local/cuda/include/cudnn*.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
3.5 环境变量设置
装完了,系统还不知道CUDA在哪。需要告诉它。
Linux下(~/.bashrc或~/.zshrc)
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda
然后 source ~/.bashrc 使其生效。
Windows下
系统环境变量里添加:
CUDA_PATH→C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0PATH里追加%CUDA_PATH%\bin和%CUDA_PATH%\libnvvp
echo $CUDA_HOME 检查一下。很多问题都是环境变量没生效导致的。
3.6 验证安装
终于到了最激动人心的环节。验证一下到底能不能用。
验证CUDA Toolkit
nvcc --version
看到类似 Cuda compilation tools, release 12.0, V12.0.76 就对了。
验证cuDNN
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
会输出类似:
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 9
#define CUDNN_PATCHLEVEL 0
写个简单程序测试
我个人习惯写一个最小的CUDA程序来验证:
#include <stdio.h>
int main() {
int deviceCount;
cudaGetDeviceCount(&deviceCount);
printf("找到 %d 个CUDA设备\n", deviceCount);
for (int i = 0; i < deviceCount; i++) {
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, i);
printf("设备 %d: %s\n", i, prop.name);
printf(" 计算能力: %d.%d\n", prop.major, prop.minor);
printf(" 显存大小: %.2f GB\n", prop.totalGlobalMem / 1024.0 / 1024.0 / 1024.0);
}
return 0;
}
编译运行:
nvcc test.cu -o test
./test
看到输出你的显卡信息,恭喜你,环境搭建成功了!
- 「nvcc: command not found」→ 环境变量没配好
- 「cudaGetDeviceCount返回0」→ 驱动问题,或者权限不够
- 「libcudart.so找不到」→ LD_LIBRARY_PATH没设置对
3.7 我的一些建议
环境搭建这件事,说白了就是「耐心」二字。我刚开始学CUDA时,光装驱动就重装了三次系统。后来总结出一套经验:
- 用Docker:如果你只是做开发,NVIDIA提供了官方CUDA Docker镜像。一行命令就能拉起环境,省心省力。
- 记录版本号:把驱动版本、CUDA版本、cuDNN版本记下来。以后出问题,排查起来快很多。
- 别用太老的版本:CUDA 10.x虽然稳定,但很多新库已经不兼容了。建议用CUDA 11.x或12.x。
好了,环境搭好了,下一章我们正式开始写CUDA代码。到时候你会发现,前面这些折腾都是值得的。