深色模式
GPU 与 CUDA
配 GPU 环境是新手最容易卡住的地方,问题几乎都出在“版本对不上”。先弄清楚几个概念,就能少走很多弯路。
几个概念
| 名词 | 是什么 | 怎么查看 |
|---|---|---|
| GPU(显卡) | 擅长大规模并行计算的硬件,深度学习的计算主要在它上面完成 | nvidia-smi |
| 显存 | GPU 自己的内存。模型权重、中间结果、KV Cache 都要放在显存里,显存大小决定了能跑多大的模型 | nvidia-smi 中的 Memory-Usage |
| 驱动(Driver) | 让操作系统能使用显卡的底层软件,装在系统上 | nvidia-smi 第一行的 Driver Version |
| CUDA | NVIDIA 的 GPU 编程平台。PyTorch 通过它调用 GPU | 见下文 |
| CUDA Toolkit | 编译 CUDA 程序用的工具(nvcc 编译器等) | nvcc --version |
| cuDNN、NCCL | 深度学习算子库、多卡通信库 | PyTorch 已自带 |
最关键的一点:用 pip 或 uv 安装的 PyTorch 自带了它需要的 CUDA 运行库,你只需要装好显卡驱动,不需要另外安装 CUDA Toolkit。 只有要自己编译 CUDA 代码(比如编译某些论文的自定义算子)时才需要 Toolkit。
另一个常见误解:nvidia-smi 右上角显示的 CUDA Version: 13.x,是这个驱动最高支持的 CUDA 版本,不是你装了哪个版本的 CUDA。
版本关系(截至 2026 年 10 月)
| 项目 | 情况 |
|---|---|
| PyTorch 最新稳定版 | 2.14(以官网的安装选择器为准) |
Linux 上 pip install torch 默认装的版本 | 基于 CUDA 13.0 构建 |
| CUDA 13.x 需要的驱动 | Linux 上驱动版本 ≥ 580 |
| 老显卡(Maxwell、Pascal、Volta 架构,例如 GTX 10 系列、V100) | CUDA 13 的版本已不支持,需要安装 CUDA 12.6 版本的 PyTorch(cu126) |
Windows 原生(不是 WSL)上 pip install torch | 默认装的是 CPU 版本,要用官网给出的带 CUDA 的安装命令 |
| Mac | 默认版本即可,使用 Apple 芯片的 MPS 加速 |
版本会持续更新,安装前到 PyTorch 官网用选择器确认最新的安装命令。
安装 PyTorch
第 1 步:确认驱动
bash
nvidia-smi能看到显卡信息就说明驱动正常。看第一行的 Driver Version:Linux 上 ≥ 580 可以直接装最新版 PyTorch。WSL 用户看到的是 Windows 驱动的版本,在 Windows 上更新驱动即可。
第 2 步:安装
bash
# 常见情况(Linux / WSL,驱动 ≥ 580,较新的显卡):
uv pip install torch torchvision # 或在 uv 项目里:uv add torch torchvision
# 驱动较旧、暂时不能升级,或者是老显卡:安装 CUDA 12.6 版本
uv pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126服务器上没有权限升级驱动时,用第二种方式即可。
第 3 步:验证
python
# check_gpu.py
import time
import torch
print("PyTorch", torch.__version__, "| 构建所用 CUDA", torch.version.cuda)
print("GPU 可用:", torch.cuda.is_available())
if torch.cuda.is_available():
print("显卡:", torch.cuda.get_device_name(0), "| 数量:", torch.cuda.device_count())
n = 8192
a = torch.randn(n, n, device="cuda", dtype=torch.float16)
a @ a # 预热
torch.cuda.synchronize()
start = time.perf_counter()
for _ in range(10):
a @ a
torch.cuda.synchronize()
seconds = (time.perf_counter() - start) / 10
print(f"FP16 矩阵乘法实测算力:{2 * n**3 / seconds / 1e12:.1f} TFLOPS")输出 GPU 可用: True 就说明配置成功。最后一行的实测算力可以和显卡的官方标称值对比,这个计算方法在数学基础里讲过。
看懂 nvidia-smi
text
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.xx Driver Version: 580.xx CUDA Version: 13.0 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name | Memory-Usage | GPU-Util |
| 0 NVIDIA GeForce RTX 4090 | 18000MiB / 24564MiB | 95% |
| 1 NVIDIA GeForce RTX 4090 | 2MiB / 24564MiB | 0% |
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU PID Type Process name GPU Memory |
| 0 12345 C python 17990MiB |
+-----------------------------------------------------------------------------------------+(简化示意)这台机器有两张 4090:0 号卡正在被一个 Python 进程使用,显存用了约 18 GB,利用率 95%;1 号卡空闲。这时你应该用 CUDA_VISIBLE_DEVICES=1 指定 1 号卡。
注意:CUDA 默认按“最快的卡优先”给显卡编号,可能和 nvidia-smi 按插槽排列的编号不一致(机器上有不同型号的卡时常见)。先运行 export CUDA_DEVICE_ORDER=PCI_BUS_ID,两边的编号就一致了,可以写进 ~/.bashrc。
更直观的工具:uv tool install nvitop 后运行 nvitop,可以实时看到每张卡、每个进程的占用;watch -n 1 nvidia-smi 每秒刷新一次。
没有 GPU 怎么办
| 选择 | 说明 | 适合 |
|---|---|---|
| 实验室服务器 | 进组后申请账号,见使用服务器 | 正式实验 |
| Kaggle Notebooks | 免费,每周约 30 小时 GPU(T4 或 P100),单次会话最长 12 小时,需要手机号验证 | 学 PyTorch、跑小实验 |
| Google Colab | 免费版提供 T4,额度不固定;需要能访问 Google | 同上 |
| 魔搭 ModelScope Notebook | 免费 CPU 环境长期可用,新用户有一定的免费 GPU 时长(以页面显示为准),国内访问快 | 跑通国内模型、小规模实验 |
| 按小时租云 GPU:AutoDL、恒源云、智星云等 | RTX 4090 大约 1.6~2.5 元/小时(2026 年水平,随时段和库存波动);AutoDL 等平台对学生认证有会员优惠 | 需要较大显存、较长时间的实验 |
租云 GPU 的注意事项
- 用完立刻关机,按时计费,开着不用也在扣钱。
- 选择预装了 PyTorch 的镜像,省去配环境的时间。
- 数据放在平台的数据盘或网盘里,关机后系统盘内容可能会被清理,重要结果及时下载到本地。
- 热门时段(如毕业季、会议截稿前)可能抢不到卡,提前规划。
常见问题
| 现象 | 原因与解决 |
|---|---|
nvidia-smi: command not found | 没装驱动,或者在虚拟机里(虚拟机用不了本机显卡)。WSL 用户检查 Windows 上是否装了 NVIDIA 驱动 |
torch.cuda.is_available() 返回 False | 最常见:装成了 CPU 版本(Windows 原生环境直接 pip install torch 就是 CPU 版)。用 python -c "import torch; print(torch.version.cuda)" 检查,输出 None 就是 CPU 版,按上文重新安装 |
CUDA driver version is insufficient for CUDA runtime version | 驱动太旧,不支持这个 PyTorch 使用的 CUDA 版本。升级驱动,或者安装 cu126 版本的 PyTorch |
no kernel image is available for execution on the device | 显卡太老,新版 PyTorch 不支持。安装 cu126 版本 |
CUDA out of memory | 显存不够:减小 batch size、换小模型、检查是否有别的进程占着显存 |
| WSL 里 GPU 突然不能用了 | 是否在 WSL 里装了 Linux 显卡驱动?卸载它,只保留 Windows 上的驱动 |
需要 nvcc(编译 CUDA 代码) | 安装与 PyTorch 构建版本对应的 CUDA Toolkit;在 WSL 里要安装 WSL 专用的 Toolkit,参考 NVIDIA CUDA on WSL 指南 |