第二章:CUDA开发环境搭建

说实话,搭建开发环境这事儿,看着简单,但坑是真不少。我见过太多同学卡在这一步,明明代码写得没问题,结果一跑就报错——八成是环境没配好。今天我就带你一步步把这事儿搞定。

2.1 NVIDIA驱动安装

驱动是GPU和操作系统之间的桥梁。没有它,CUDA根本跑不起来。

第一步:确认你的GPU型号

在终端里敲这个命令:

lspci | grep -i nvidia

或者用更直观的方式:

nvidia-smi          # 如果已经装了驱动,这个命令直接看

第二步:下载对应驱动

去NVIDIA官网,找到「驱动程序下载」页面。选你的GPU型号和操作系统。我个人习惯选「生产分支」的驱动,稳定第一。

注意:千万别用系统自带的nouveau开源驱动。它和NVIDIA官方驱动会冲突。装之前先禁用nouveau:
sudo vim /etc/modprobe.d/blacklist-nouveau.conf
# 写入这两行:
blacklist nouveau
options nouveau modeset=0

第三步:安装驱动

sudo chmod +x NVIDIA-Linux-*.run
sudo ./NVIDIA-Linux-*.run

安装过程中会提示你是否安装32位兼容库——我一般选「是」,因为有些老库需要它。

装完重启,跑一下:

nvidia-smi

看到GPU信息列表,驱动就装好了。

小技巧:我曾经在Ubuntu上装驱动,结果黑屏了。后来发现是Secure Boot搞的鬼。进BIOS关掉Secure Boot,世界就清净了。

2.2 CUDA Toolkit安装

驱动装好了,接下来装CUDA Toolkit。它包含了编译器、库文件、调试工具等。

选择版本

去NVIDIA官网下载CUDA Toolkit。我建议你选和驱动匹配的版本。怎么看?

nvidia-smi | grep "CUDA Version"

比如显示CUDA Version: 12.2,那你就装12.x系列的Toolkit。

安装方式

我推荐用runfile方式安装,灵活可控:

wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
sudo sh cuda_12.2.0_535.54.03_linux.run

安装时注意:

  • 不要勾选「Driver」——我们已经装过了
  • 勾选「CUDA Toolkit」和「CUDA Samples」
  • 安装路径我习惯用默认的 /usr/local/cuda-12.2
核心要点:安装完成后,/usr/local/cuda 会是一个软链接,指向你刚装的版本。这样切换版本时只需要改软链接就行。

2.3 cuDNN配置

cuDNN是NVIDIA针对深度神经网络的加速库。说白了,就是帮你把卷积、池化这些操作跑得更快。

下载cuDNN

需要注册NVIDIA开发者账号才能下载。选和CUDA版本匹配的cuDNN版本。比如CUDA 12.2,就选cuDNN for CUDA 12.x。

安装步骤

# 解压
tar -xzvf cudnn-linux-x86_64-8.9.4.25_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*
避坑指南:我曾经直接复制文件后忘了设置权限,结果编译时一直报「找不到libcudnn.so」。折腾了半天才发现是权限问题。嗯,血的教训。

2.4 环境变量设置

环境变量不配好,系统就找不到CUDA的工具和库。我习惯把配置写在 ~/.bashrc 里:

# 打开配置文件
vim ~/.bashrc

# 在文件末尾添加:
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

为什么这么配?

  • PATH:让系统能找到 nvcc 编译器
  • LD_LIBRARY_PATH:让动态链接器能找到CUDA运行时库
  • CUDA_HOME:很多第三方库(比如PyTorch)会读取这个变量
注意:如果你装了多个CUDA版本,切换时记得改 CUDA_HOME 指向的软链接。我一般用:
sudo rm -f /usr/local/cuda
sudo ln -s /usr/local/cuda-12.2 /usr/local/cuda

2.5 验证安装

环境配好了,怎么知道对不对?三步验证法:

第一步:检查驱动

nvidia-smi

看到GPU型号、驱动版本、CUDA版本就对了。

第二步:检查CUDA Toolkit

nvcc --version

会输出CUDA编译器的版本信息。

第三步:编译并运行示例

这是最实在的验证方式:

# 进入示例目录
cd /usr/local/cuda/samples/1_Utilities/deviceQuery

# 编译
sudo make

# 运行
./deviceQuery

如果看到 Result = PASS,恭喜你,环境搭建成功了!

我的经验:如果deviceQuery跑不过,八成是驱动和Toolkit版本不匹配。我遇到过最坑的一次是驱动版本太新,Toolkit太老,结果报「CUDA driver version is insufficient」。解决办法就是统一版本。

你想想看,环境搭建这事儿,说白了就是「驱动→Toolkit→cuDNN→环境变量→验证」这条链。每一步都走对了,后面写代码就顺了。要是卡住了,别急,回头检查一下哪一步漏了。

嗯,下一章我们就要开始写第一个CUDA程序了。到时候你会觉得,今天搭环境的辛苦都是值得的。