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 这样的输出,恭喜你,硬件没问题。

注意: 如果你用的是笔记本,记得确认是独立显卡在工作。有些笔记本默认用集显,CUDA根本认不到独显。我曾经帮一个学生远程调试,折腾了两小时才发现他笔记本的独显根本没启用。

2.1.2 下载并安装驱动

去NVIDIA官网下载对应你显卡型号的驱动。网址我就不贴了,你搜一下「NVIDIA 驱动下载」就行。

选驱动的时候注意三点:

  • 操作系统版本:Windows 10/11 还是 Linux?64位还是32位?
  • 显卡型号:别下错了,RTX 30系的驱动和GTX 10系的不一样
  • 笔记本还是台式机:笔记本驱动有时会标注"Notebook"

安装过程很简单,一路下一步就行。但我建议你选「自定义安装」,然后勾选「执行清洁安装」。这样能避免旧驱动残留导致的问题。

小技巧: 安装完驱动后重启一下电脑。别问我为什么,Windows就是这么任性。

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及以下的版本。

重要: 驱动版本和CUDA Toolkit版本要匹配。别装了CUDA 12.0却用着只支持CUDA 11.x的驱动,那样会报错的。

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,因为驱动不支持。

避坑指南: 我曾经在Ubuntu 20.04上装了CUDA 11.8,结果gcc版本太高不兼容。折腾了半天才发现CUDA 11.8需要gcc 9.x,而我系统默认是gcc 10。所以装之前先查一下兼容性列表。

2.2.2 下载与安装

去NVIDIA开发者官网下载CUDA Toolkit。选对操作系统和架构。

Windows安装:

  1. 下载exe安装包
  2. 双击运行,选自定义安装
  3. 建议只勾选「CUDA」组件,其他如Visual Studio Integration可以按需选
  4. 安装路径默认就行,别乱改

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,说明一切正常。

重点: 如果编译报错,先检查环境变量配没配对。我遇到过很多次,明明装了CUDA,但nvcc找不到,就是因为Path没加对。

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开发环境搭建成功!

补充说明: 如果GPU没有输出,可能是你的显卡不支持CUDA(比如太老的卡),或者驱动没装好。用 nvidia-smi 再确认一下。

2.5 常见问题与解决

我整理了几个新手常遇到的问题,你遇到了可以直接对照:

问题 原因 解决方法
nvidia-smi 找不到 驱动没装好或Path没配 重装驱动,或把驱动目录加到Path
nvcc --version 报错 CUDA Toolkit没装或Path没配 检查CUDA_PATH和Path配置
编译示例代码报错 缺少依赖库或gcc版本不匹配 安装依赖库,或降级gcc版本
运行程序时GPU没输出 显卡不支持或驱动问题 用deviceQuery检查显卡状态

嗯,环境搭建这块就这些了。看起来步骤多,但熟练了也就十分钟的事。我第一次装的时候折腾了一下午,主要是Linux下驱动和Toolkit版本不匹配,反复卸载重装。后来学乖了,每次都先查兼容性列表。

下一章,咱们开始写真正的CUDA程序。准备好了吗?