2. 开发环境搭建:安装NVIDIA驱动、安装CUDA Toolkit、配置环境变量、验证安装
好,咱们正式开始动手了。
这一章,我带你把CUDA的开发环境搭起来。说实话,这一步看着简单,但坑不少。我见过太多新手卡在环境配置上,代码写好了跑不起来,最后发现是驱动版本不对。
咱们一步步来,别急。
2.1 安装NVIDIA驱动
CUDA要跑起来,首先得有个NVIDIA显卡。这个不用我多说吧?
驱动是显卡和操作系统之间的桥梁。没有它,你的GPU就是个摆设。
2.1.1 检查你的显卡
先看看你电脑里装的是什么卡。我习惯用这个命令:
# Windows下,打开设备管理器
# 或者用命令行
wmic path win32_videocontroller get name
# Linux下
lspci | grep -i nvidia
如果你看到类似 NVIDIA GeForce RTX 3060 或者 NVIDIA Tesla V100 这样的输出,恭喜你,硬件没问题。
2.1.2 下载并安装驱动
去NVIDIA官网下载对应你显卡型号的驱动。网址我就不贴了,你搜一下「NVIDIA 驱动下载」就行。
选驱动的时候注意三点:
- 操作系统版本:Windows 10/11 还是 Linux?64位还是32位?
- 显卡型号:别下错了,RTX 30系的驱动和GTX 10系的不一样
- 笔记本还是台式机:笔记本驱动有时会标注"Notebook"
安装过程很简单,一路下一步就行。但我建议你选「自定义安装」,然后勾选「执行清洁安装」。这样能避免旧驱动残留导致的问题。
2.1.3 验证驱动安装
驱动装好了,怎么知道它工作正常?
打开命令行,输入:
nvidia-smi
如果看到类似这样的输出,说明驱动没问题:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.05 Driver Version: 525.85.05 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce RTX 3060 Off | 00000000:01:00.0 On | N/A |
| 30% 45C P8 10W / 170W | 123MiB / 12288MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
这里有个关键信息:CUDA Version。它表示当前驱动支持的最高CUDA版本。比如上面显示12.0,意味着你可以装CUDA 12.0及以下的版本。
2.2 安装CUDA Toolkit
驱动装好了,接下来装CUDA Toolkit。这个才是我们写CUDA代码要用到的工具集。
CUDA Toolkit包含:编译器(nvcc)、运行时库、开发工具、示例代码等等。
2.2.1 选择版本
我个人建议:选最新稳定版。但别追最新,稳定最重要。
怎么看哪个版本适合你?
- 先看
nvidia-smi输出的CUDA Version - 再看你的项目需求(比如PyTorch、TensorFlow对CUDA版本有要求)
- 最后看操作系统兼容性
举个例子:如果你的驱动显示CUDA Version: 12.0,那你可以装CUDA 12.0、11.8、11.7等。但不能装12.1,因为驱动不支持。
2.2.2 下载与安装
去NVIDIA开发者官网下载CUDA Toolkit。选对操作系统和架构。
Windows安装:
- 下载exe安装包
- 双击运行,选自定义安装
- 建议只勾选「CUDA」组件,其他如Visual Studio Integration可以按需选
- 安装路径默认就行,别乱改
Linux安装(以Ubuntu为例):
# 下载runfile
wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux.run
# 运行安装
sudo sh cuda_12.0.0_525.60.13_linux.run
# 注意:安装时不要选驱动,因为我们已经装过了
嗯,这里要注意:Linux下安装时,安装程序会问你要不要装驱动。选No,因为我们已经装过了。不然可能会覆盖掉你刚装好的驱动,导致版本不匹配。
2.3 配置环境变量
装完了CUDA Toolkit,系统还不知道它在哪里。你得告诉系统:CUDA装在这儿了。
说白了就是配置环境变量。
2.3.1 Windows配置
右键「此电脑」→「属性」→「高级系统设置」→「环境变量」。
在系统变量里添加:
| 变量名 | 变量值 |
|---|---|
| CUDA_PATH | C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0 |
| NVCC_PATH | %CUDA_PATH%\bin |
然后在 Path 变量里添加:
%CUDA_PATH%\bin
%CUDA_PATH%\libnvvp
2.3.2 Linux配置
编辑 ~/.bashrc 或 ~/.zshrc,在末尾添加:
export PATH=/usr/local/cuda-12.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-12.0
然后执行:
source ~/.bashrc
我习惯把 /usr/local/cuda 软链接到具体版本目录,这样切换版本时只需要改软链接就行。比如:
sudo ln -s /usr/local/cuda-12.0 /usr/local/cuda
这样环境变量里写 /usr/local/cuda 就行了,以后换版本只改软链接,不用改环境变量。
2.4 验证安装
环境配好了,怎么知道一切正常?
来,三步验证法:
2.4.1 检查nvcc编译器
nvcc --version
输出应该类似:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Wed_Feb_15_21:33:19_PST_2023
Cuda compilation tools, release 12.0, V12.0.140
Build cuda_12.0.r12.0/compiler.32267302_0
看到版本号就对了。
2.4.2 编译示例代码
CUDA Toolkit自带了很多示例代码。我们找个最简单的来测试:
# 进入示例目录
cd /usr/local/cuda-12.0/samples/1_Utilities/deviceQuery
# 编译
make
# 运行
./deviceQuery
如果输出最后一行是 Result = PASS,说明一切正常。
2.4.3 写个简单的CUDA程序
来,咱们手写一个最简单的CUDA程序:
#include <stdio.h>
__global__ void hello_cuda() {
printf("Hello from GPU!\n");
}
int main() {
hello_cuda<<<1, 1>>>();
cudaDeviceSynchronize();
printf("Hello from CPU!\n");
return 0;
}
保存为 hello.cu,然后编译运行:
nvcc hello.cu -o hello
./hello
如果看到:
Hello from GPU!
Hello from CPU!
恭喜你,CUDA开发环境搭建成功!
nvidia-smi 再确认一下。
2.5 常见问题与解决
我整理了几个新手常遇到的问题,你遇到了可以直接对照:
| 问题 | 原因 | 解决方法 |
|---|---|---|
| nvidia-smi 找不到 | 驱动没装好或Path没配 | 重装驱动,或把驱动目录加到Path |
| nvcc --version 报错 | CUDA Toolkit没装或Path没配 | 检查CUDA_PATH和Path配置 |
| 编译示例代码报错 | 缺少依赖库或gcc版本不匹配 | 安装依赖库,或降级gcc版本 |
| 运行程序时GPU没输出 | 显卡不支持或驱动问题 | 用deviceQuery检查显卡状态 |
嗯,环境搭建这块就这些了。看起来步骤多,但熟练了也就十分钟的事。我第一次装的时候折腾了一下午,主要是Linux下驱动和Toolkit版本不匹配,反复卸载重装。后来学乖了,每次都先查兼容性列表。
下一章,咱们开始写真正的CUDA程序。准备好了吗?