直接结论:不用手动装cuda toolkit和cudnn,用conda安装pytorch时一并解决依赖,成功率最高、踩坑最少;因为conda能统一管理python包与c/c++库,自动匹配驱动支持的cuda版本并打包pytorch、cudatoolkit、cudnn为兼容原子单元,而pip仅装python包,无法保障底层二进制兼容性。

直接结论:不用手动装 CUDA Toolkit 和 cuDNN,用 conda 安装 PyTorch 时一并解决依赖,成功率最高、踩坑最少。
为什么不能直接 pip install torch
pip 安装的 torch 默认是 CPU 版本;即使指定 cudatoolkit 参数(如 pip install torch cudatoolkit=12.1),它只装 Python 包,不处理底层 CUDA Runtime、cuDNN 二进制兼容性问题。你可能遇到:OSError: libcudnn.so: cannot open shared object file 或 torch.cuda.is_available() 返回 False。
conda 能统一管理 Python 包 + C/C++ 库 + 编译器工具链,PyTorch 官方 wheel 也按 conda channel 分发,版本绑定严格。
- conda 会自动匹配你当前 NVIDIA 驱动支持的最高 CUDA 版本(比如驱动 535.86.05 支持 CUDA 12.2,conda 就不会给你装 12.4)
- 它把
cudatoolkit、pytorch、torchvision打包成原子单元,避免“半截安装” - 不污染系统级 CUDA 安装路径,多个项目可共存不同 CUDA 构建版本
nvidia-smi 显示的 CUDA Version 不是你该装的版本
nvidia-smi 输出里那行 CUDA Version: 12.2 是驱动能支持的最高 CUDA 工具包版本,不是你必须装的版本,更不是 PyTorch 实际链接的版本。
真正决定 PyTorch 是否可用 GPU 的,是:torch.version.cuda(PyTorch 编译时绑定的 CUDA 工具包版本)和你的显卡驱动是否 ≥ 对应最低要求。
- 查驱动最低要求:PyTorch 官网表格或运行
python -c "import torch; print(torch.__config__.show())" - 例如:PyTorch 2.4 + CUDA 12.1 要求驱动 ≥ 530.30.02;你驱动是 525.85.12 → 必须降级到 CUDA 11.8 构建版
- 不要硬凑高 CUDA 版本——驱动旧了,装了也跑不起来
conda install 命令怎么选参数
去 pytorch.org/get-started/locally 页面,选好 OS、Package Manager(conda)、Language(Python)、CUDA(选 “CUDA” 下拉框里最接近你驱动支持上限的版本),复制生成的命令。
典型命令示例(Linux, Python 3.11, CUDA 12.1):
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
关键点:
-
pytorch-cuda=12.1是 conda channel 专用标识,不是 pip 的cudatoolkit;它确保整个 stack 兼容 - 必须加
-c nvidia,否则 conda 可能从默认 channel 拉错cudatoolkit(版本不匹配或缺失 cuDNN) - 不要用
conda install cuda-toolkit=12.1单独装——它和 PyTorch 不保证 ABI 兼容
验证时别只看 is_available()
torch.cuda.is_available() 返回 True 只说明 CUDA 初始化成功,不代表实际能用。容易忽略的三个检查点:
- 运行
print(torch.cuda.get_device_name(0))—— 确认识别的是你的独显,不是集成显卡(笔记本常见) - 运行
print(torch.cuda.memory_allocated())—— 训练前为 0,但模型.to("cuda")后应有非零值 - 执行简单计算:
a = torch.randn(1000, 1000).cuda(); b = a @ a.T; print(b.sum().item())—— 避免“假阳性”,即 CUDA 上下文建了但 kernel 调用失败
最麻烦的其实是多卡场景下 CUDA_VISIBLE_DEVICES 设置错误,或者 WSL2 中 NVIDIA Container Toolkit 未启用——这些不在 conda 安装范围内,得单独排查。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











