2、CUDA开发环境搭建:NVIDIA驱动安装、CUDA Toolkit安装、cuDNN配置、环境变量设置
说实话,环境搭建这事儿,看着简单,但坑是真不少。我见过太多同学卡在这一步,代码写好了,结果跑不起来——一查,驱动版本不对,或者CUDA Toolkit和cuDNN没配对。嗯,咱们今天就把这事儿捋清楚。
2.1 NVIDIA驱动安装:你的GPU得先“醒过来”
GPU本身是个硬件,你得让操作系统认识它。NVIDIA驱动就是干这个的。没有驱动,CUDA根本没法跟GPU通信。
怎么查你的GPU型号?
在终端里敲这个命令:
lspci | grep -i nvidia
或者用更直观的方式:
nvidia-smi
如果这个命令能跑出结果,说明驱动已经装好了。如果提示“command not found”,那你就得手动装了。
安装驱动的方式(我推荐第二种)
- 方式一:从官网下载.run文件——手动安装,适合有洁癖的人。我个人不太推荐,因为容易跟系统已有的驱动冲突。
- 方式二:用系统包管理器安装——比如Ubuntu下:
sudo apt update
sudo apt install nvidia-driver-535
装完重启,再跑nvidia-smi,你应该能看到类似这样的输出:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.05 Driver Version: 535.86.05 CUDA Version: 12.2 |
+-----------------------------------------------------------------------------+
注意看右上角那个“CUDA Version”,它表示你的驱动支持的最高CUDA版本。这个数字很重要,后面选CUDA Toolkit时要用到。
sudo vim /etc/modprobe.d/blacklist-nouveau.conf,加上两行:blacklist nouveau 和 options nouveau modeset=0。
2.2 CUDA Toolkit安装:真正的“工具箱”
驱动只是让GPU能用,但你要写CUDA代码,还得靠CUDA Toolkit。它里面包含了编译器nvcc、各种库(如cuBLAS、cuFFT)、调试工具等等。
版本选择:别盲目追新
我个人习惯是:选驱动支持的版本里,稍微老一点但稳定的。比如驱动支持CUDA 12.2,那我可能选CUDA 12.1或12.0。为什么?因为新版本有时会有兼容性问题,我在项目中遇到过CUDA 12.2刚发布时,某些第三方库还没适配,折腾了半天。
安装步骤(以CUDA 12.1为例)
- 去NVIDIA官网下载对应系统的runfile或deb包。
- 我推荐用runfile方式,因为它可以让你选择不装驱动(驱动我们已经装好了):
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run
安装过程中,取消勾选“Driver”,只保留CUDA Toolkit和CUDA Samples。
验证安装
nvcc --version
如果看到类似Cuda compilation tools, release 12.1, V12.1.66,那就成了。
/usr/local/cuda-12.1目录下。我习惯创建一个软链接:sudo ln -s /usr/local/cuda-12.1 /usr/local/cuda,这样以后切换版本时只改链接就行。
2.3 cuDNN配置:深度学习加速的“秘密武器”
cuDNN是NVIDIA专门为深度学习优化的库。说白了,它让卷积、池化这些操作跑得更快。如果你只是做通用GPU计算,可以不装它。但如果你搞深度学习,那必须装。
下载cuDNN
需要注册NVIDIA开发者账号才能下载。注意:cuDNN的版本必须跟CUDA Toolkit版本匹配。比如CUDA 12.1,就下载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 /usr/local/cuda/lib64/libcudnn*
验证cuDNN
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
如果输出版本号,就对了。
sudo ldconfig。
2.4 环境变量设置:让系统找到CUDA
装完了,但系统还不知道CUDA在哪。你得告诉它。说白了,就是设置PATH和LD_LIBRARY_PATH。
编辑~/.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
验证环境变量
echo $CUDA_HOME
which nvcc
如果都能正确输出,那环境就齐活了。
📌 总结一下整个流程:
- 装驱动 → 跑
nvidia-smi确认 - 装CUDA Toolkit → 跑
nvcc --version确认 - 装cuDNN(可选) → 检查头文件和库文件
- 设环境变量 →
source ~/.bashrc
你想想看,是不是每一步都有对应的验证方法?这样出了问题,你也能快速定位。
嗯,环境搭建就这些。别嫌麻烦,这一步做好了,后面写代码才顺畅。下一章咱们就开始写第一个CUDA程序了——到时候你会觉得,前面这些折腾都是值得的。