
1. 环境准备与版本选型别让第一步就埋雷装 CUDA 这件事说简单也简单说坑多那是真的多。我见过太多人上来就apt install nvidia-cuda-toolkit结果装完发现版本对不上、驱动冲突、nvcc找不到最后只能重装系统。所以这一节我们先不急着敲命令把版本选型这件事聊透。1.1 先搞清楚三个东西的关系很多人搞混驱动、CUDA Toolkit、cuDNN 这三者的关系。我用一个生活化的类比来解释N 卡驱动Driver相当于你电脑的“操作系统底座”它负责让系统认识这张显卡。没有它显卡就是一块砖。CUDA Toolkit相当于“编译器 标准库”它提供nvcc编译器、CUDA 运行时库、数学库等。你写的.cu代码要靠它编译成 GPU 能执行的指令。cuDNN相当于“深度学习加速插件”它是建立在 CUDA 之上的高层库专门为卷积、池化、RNN 等神经网络操作做了极致优化。TensorFlow、PyTorch 这些框架底层调用的就是它。三者的依赖关系是驱动版本决定了你最高能装哪个版本的 CUDA Toolkit而 CUDA Toolkit 版本又决定了你能用哪个版本的 cuDNN。这个链条一旦某一环选错后面全崩。1.2 驱动版本怎么查、怎么选在 Linux 下查驱动版本最直接的方式是nvidia-smi输出右上角会显示Driver Version: 550.144.03这样的信息同时还会显示CUDA Version: 12.4。注意这里的CUDA Version不是说你已经装了 CUDA 12.4而是说这个驱动最高支持到 CUDA 12.4 运行时。这是一个非常容易误解的点我见过不少新手以为nvidia-smi显示了 CUDA 版本就等于装好了 CUDA结果nvcc --version一敲报“不是内部或外部命令”。在 Windows 下你可以通过“设备管理器 → 显示适配器 → 右键属性 → 驱动程序”查看或者直接右键桌面打开 NVIDIA 控制面板左下角“系统信息”里也有。选驱动版本的原则很简单如果你要用深度学习框架优先看框架官方要求的 CUDA 版本再反推驱动版本。比如 TensorFlow 2.5.0 官方要求 CUDA 11.2 cuDNN 8.1那你就需要驱动版本至少支持 CUDA 11.2。根据 NVIDIA 的兼容性表Linux 下 460 系列驱动就够Windows 下 461 以上即可。1.3 CUDA Toolkit 版本选择的核心逻辑CUDA Toolkit 的版本选择核心就一句话跟着你的深度学习框架走不要跟着“最新版”走。我整理了一份常见框架与 CUDA 版本的对应关系方便你直接查表框架版本推荐 CUDA推荐 cuDNN最低驱动LinuxTensorFlow 2.5.011.28.1460.27TensorFlow 2.1011.88.6520.61PyTorch 1.1211.38.2465.19PyTorch 2.011.7 / 11.88.5515.43llama.cpp (CUDA 后端)11.7不需要515.43注意cuDNN 从 8.x 开始不再需要单独注册账号下载直接去官网下载对应版本即可。但 8.0 之前的版本仍然需要登录开发者账号。如果你只是想做 CUDA 编程学习不涉及深度学习框架那直接装最新版 CUDA Toolkit 就行驱动也升到最新省心。1.4 WSL2 场景下的特殊考量现在越来越多人在 WSL2 里跑 CUDA毕竟 Windows 下开发体验好Linux 下跑训练方便。但 WSL2 的 CUDA 安装和原生 Linux 有本质区别WSL2 不需要在 Linux 侧安装显卡驱动。你只需要在 Windows 侧装好 N 卡驱动建议 470 以上WSL2 会自动通过/usr/lib/wsl/lib下的libcuda.so透传显卡能力。如果你在 WSL2 里又装了一遍 Linux 驱动大概率会把系统搞崩。WSL2 里装 CUDA Toolkit 的步骤和原生 Linux 基本一致但要注意不要装cuda-drivers这个包只装cuda-toolkit即可。另外WSL2 对 CUDA 版本有最低要求太老的版本如 CUDA 10.x在 WSL2 下跑不起来建议至少 CUDA 11.0 起步。2. 驱动安装实操从裸机到 nvidia-smi 正常输出这一节我们分 Linux 原生、Windows 原生、WSL2 三种场景来讲每种场景的坑点都不一样。2.1 Linux 原生安装推荐用官方 runfileLinux 下装驱动有三种方式apt 包管理、官方 runfile、以及 NVIDIA 的 CUDA 网络安装包。我实测下来最稳的是官方 runfile原因是 apt 源里的驱动版本往往偏旧而且和 CUDA Toolkit 的版本匹配容易出问题。具体步骤先去 NVIDIA 官网下载对应显卡的驱动 runfile。比如 RTX 4060 Ti选 Linux 64-bit 版本下载.run文件。禁用 nouveau 驱动。这是 Linux 开源的 N 卡驱动不禁用的话会和 NVIDIA 官方驱动冲突。操作如下sudo bash -c echo blacklist nouveau /etc/modprobe.d/blacklist-nouveau.conf sudo bash -c echo options nouveau modeset0 /etc/modprobe.d/blacklist-nouveau.conf sudo update-initramfs -u sudo reboot重启后进入文本模式CtrlAltF3关闭图形界面sudo systemctl stop gdm3 # 或者 lightdm看你用的哪个给 runfile 加执行权限并安装chmod x NVIDIA-Linux-x86_64-550.144.03.run sudo ./NVIDIA-Linux-x86_64-550.144.03.run安装过程中会问你几个问题比如是否安装 32 位兼容库、是否更新 X 配置一般选默认即可。如果提示“预编译内核模块失败”说明你需要先装kernel-headers和kernel-devel用uname -r查当前内核版本然后apt install linux-headers-$(uname -r)。安装完成后重启运行nvidia-smi如果能看到显卡信息表格说明驱动装好了。实操心得如果你之前用 apt 装过驱动一定要先apt purge nvidia-*彻底清理否则 runfile 安装时会报“已存在驱动”而失败。清理后记得apt autoremove把残留依赖也删掉。2.2 Windows 原生安装DDU 清理是王道Windows 下装驱动本来是最简单的下载 exe 双击下一步就行。但如果你之前装过驱动、换过显卡、或者系统自动更新过驱动直接覆盖安装大概率会出问题表现为nvidia-smi能跑但 CUDA 程序报错或者干脆蓝屏。我的标准流程是下载DDUDisplay Driver Uninstaller这是一个专门清理显卡驱动残留的工具。重启进入安全模式运行 DDU选择“清除并重启”。重启后安装新驱动安装时选“自定义安装”勾选“执行清洁安装”。安装完成后重启验证nvidia-smi。注意Windows 下nvidia-smi的路径默认不在环境变量里你需要去C:\Program Files\NVIDIA Corporation\NVSMI目录下运行或者把这个路径加到 PATH 里。很多人说“nvidia-smi 不是内部或外部命令”就是因为这个。2.3 WSL2 安装Windows 侧驱动是唯一入口WSL2 的驱动安装最简单因为你只需要在 Windows 侧装驱动。步骤在 Windows 侧安装最新 N 卡驱动建议 470 以上最好 520。在 WSL2 里运行nvidia-smi如果能看到显卡信息说明透传成功。如果看不到检查 WSL2 内核版本运行wsl --update更新内核。WSL2 里不需要装 Linux 驱动也不需要装cuda-drivers。如果你不小心装了用sudo apt purge cuda-drivers删掉然后重启 WSL2。实操心得WSL2 下nvidia-smi显示的 CUDA Version 是 Windows 驱动的最高支持版本不是你 WSL2 里装的 CUDA Toolkit 版本。要查 Toolkit 版本还是得nvcc --version。3. CUDA Toolkit 与 cuDNN 安装细节决定成败驱动装好了接下来就是 CUDA Toolkit 和 cuDNN。这一节我按 Linux 原生和 WSL2 分别讲Windows 原生的 CUDA Toolkit 安装基本就是下一步下一步不展开。3.1 Linux 原生安装 CUDA Toolkit推荐用官方 runfile 安装而不是 apt。原因是 apt 安装的 CUDA Toolkit 路径分散而且版本切换麻烦。runfile 安装可以自定义路径多版本共存也方便。下载 runfile 后执行sudo sh cuda_11.8.0_520.61.05_linux.run安装过程中关键一步是取消勾选 Driver。因为我们已经单独装了驱动如果再装一遍驱动会冲突。只勾选 CUDA Toolkit 即可。安装完成后需要配置环境变量。在~/.bashrc里加上export PATH/usr/local/cuda-11.8/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH然后source ~/.bashrc运行nvcc --version如果输出版本信息说明装好了。注意如果你之前装过其他版本的 CUDA/usr/local/cuda这个软链接可能指向旧版本。用ls -l /usr/local/cuda看一下如果不是你想要的版本手动改软链接sudo ln -sf /usr/local/cuda-11.8 /usr/local/cuda。3.2 cuDNN 安装复制粘贴就完事cuDNN 的安装本质就是把头文件和库文件复制到 CUDA 的对应目录。下载 cuDNN 的 tar 包后tar -xzvf cudnn-11.8-linux-x64-v8.6.0.163.tgz sudo cp cuda/include/cudnn*.h /usr/local/cuda-11.8/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.8/lib64 sudo chmod ar /usr/local/cuda-11.8/include/cudnn*.h sudo chmod ar /usr/local/cuda-11.8/lib64/libcudnn*验证 cuDNN 是否装好可以编译一个 CUDA Samples 里的deviceQuery或者直接跑一个 PyTorch 程序看能不能调用 GPU。实操心得cuDNN 的版本必须和 CUDA 版本严格对应。比如 CUDA 11.8 只能用 cuDNN 8.6 及以上用 8.1 会报libcudnn.so.8: cannot open shared object file。下载时看清楚文件名里的cuda11字样。3.3 WSL2 下安装 CUDA Toolkit 与 cuDNNWSL2 下的安装和原生 Linux 几乎一样但有两个坑不要装cuda-drivers。WSL2 的驱动由 Windows 侧提供Linux 侧装驱动会冲突。/usr/local/cuda软链接可能不存在。WSL2 下安装完 CUDA Toolkit 后需要手动创建软链接sudo ln -sf /usr/local/cuda-11.8 /usr/local/cudacuDNN 的安装和原生 Linux 完全一致复制粘贴即可。注意WSL2 下跑 CUDA 程序内存和显存是共享的。如果你的模型很大可能会爆显存。建议在 WSL2 配置文件.wslconfig里限制内存使用避免 Windows 侧卡死。4. 常见问题与排查技巧实录这一节我整理了我这些年踩过的坑和帮别人排查过的问题做成速查表方便你直接对号入座。4.1 nvcc 找不到PATH 没配好这是最高频的问题。nvidia-smi能跑但nvcc --version报“不是内部或外部命令”。原因就一个nvcc不在 PATH 里。Linux 下nvcc默认在/usr/local/cuda/bin你需要把这个路径加到 PATH。Windows 下nvcc在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin同样需要加到 PATH。排查技巧用which nvccLinux或where nvccWindows查一下如果找不到就是 PATH 问题。另外如果你装了多版本 CUDAnvcc可能指向旧版本用nvcc --version确认。4.2 CUDA Samples 找不到新版不再默认安装CUDA 11.x 之后Samples 不再随 Toolkit 一起安装需要单独从 GitHub 克隆。很多人装完 CUDA 想跑deviceQuery验证结果发现 Samples 目录是空的。解决方法git clone https://github.com/NVIDIA/cuda-samples.git cd cuda-samples git checkout v11.8 # 切换到对应版本 make编译完成后bin/x86_64/linux/release/下就有deviceQuery和bandwidthTest跑一下就能验证 CUDA 是否正常工作。4.3 多版本 CUDA 共存软链接切换法有时候你需要同时保留多个 CUDA 版本比如一个用于 TensorFlow 2.5CUDA 11.2一个用于 PyTorch 2.0CUDA 11.8。这时候不要改 PATH而是用软链接切换sudo ln -sf /usr/local/cuda-11.2 /usr/local/cuda然后source ~/.bashrcnvcc --version就会显示 11.2。切换回 11.8 同理。实操心得多版本共存时cuDNN 也要对应多个版本。我的做法是每个 CUDA 版本目录下放对应的 cuDNN切换 CUDA 时 cuDNN 自动跟着切。4.4 4060 Ti 支持的 CUDA 版本别装太老的RTX 4060 Ti 是 Ada Lovelace 架构算力 8.9。这个算力需要 CUDA 11.8 及以上才支持。如果你装 CUDA 11.2编译时会报nvcc fatal: Unsupported gpu architecture compute_89。所以 4060 Ti 用户注意最低 CUDA 11.8推荐 CUDA 12.x。驱动也要对应升级到 520 以上。4.5 llama.cpp 与 CUDA 不兼容编译参数是关键llama.cpp 的 CUDA 后端对版本比较敏感。如果你用 CUDA 11.7 编译报错大概率是因为 llama.cpp 用了某些新 API。解决方法make LLAMA_CUDA1 LLAMA_CUDA_DMMV_X32 LLAMA_CUDA_MMV_Y1如果还报错升级 CUDA 到 11.8 或 12.x。另外llama.cpp 不需要 cuDNN所以不用装。4.6 常见问题速查表问题现象可能原因解决方法nvidia-smi 报 command not found驱动没装或 PATH 没配装驱动加 PATHnvcc 报不是内部或外部命令CUDA Toolkit 没装或 PATH 没配装 Toolkit加 PATHnvidia-smi 显示 CUDA Version 但 nvcc 没有只装了驱动没装 Toolkit装 CUDA Toolkit编译报 Unsupported gpu architectureCUDA 版本太老升级 CUDAlibcudnn.so.8 cannot opencuDNN 没装或版本不对装对应版本 cuDNNWSL2 下 nvidia-smi 找不到Windows 驱动太老升级 Windows 驱动多版本 CUDA 切换后 nvcc 版本没变软链接没更新重建软链接CUDA Samples 目录为空新版不默认安装从 GitHub 克隆最后分享一个小技巧如果你不确定当前环境到底装了什么跑一遍这个命令组合基本能摸清底细nvidia-smi nvcc --version ls -l /usr/local/cuda cat /usr/local/cuda/version.json这四个命令跑完驱动版本、CUDA 版本、软链接指向、详细版本信息全都有了。排查问题时先把这四个输出贴出来能省很多沟通成本。这个内容后续还可以这样扩展如果你需要在 Docker 里跑 CUDA可以研究nvidia-container-toolkit的安装和配置如果你需要做 CUDA 迁移比如从一台机器迁到另一台重点检查驱动版本和 CUDA 版本的兼容性以及 cuDNN 的路径配置。