共计 1842 个字符,预计需要花费 5 分钟才能阅读完成。
为什么我的 PyTorch 用不了 GPU?
刚入门深度学习的同学经常会遇到这样的场景:

import torch
print(torch.cuda.is_available()) # 输出 False
或者更令人崩溃的报错:
RuntimeError: CUDA error: no kernel image is available for execution on the device
这些问题的根源往往来自环境配置的细节疏漏。今天我们就用 Anaconda+PyCharm 这套最常用的组合,手把手搭建可用的 PyTorch GPU 环境。
环境配置方案对比
1. 独立环境 vs 全局安装
- 全局安装:直接往系统 Python 里装 PyTorch
- 优点:简单粗暴
-
缺点:容易引发包冲突,特别是需要同时运行多个项目时
-
Anaconda 虚拟环境:
conda create -n pytorch_gpu python=3.8 - 优点:环境隔离,可创建多个不同版本的环境
- 推荐指数:★★★★★
2. Conda vs Pip 安装
通过 conda 安装 PyTorch 时会自动处理 CUDA 依赖:
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
而 pip 安装需要手动确保 CUDA 版本匹配:
pip install torch==1.12.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
实战配置步骤
1. 创建 conda 环境(带版本锁定)
# 创建指定 Python 版本的环境
conda create -n pytorch_gpu python=3.8
# 激活环境
conda activate pytorch_gpu
# 安装 PyTorch 全家桶(注意 CUDA 版本)conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
2. GPU 验证代码
import torch
# 检查 CUDA 是否可用
print(f"CUDA available: {torch.cuda.is_available()}")
# 显示当前设备
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")
# 创建测试张量
tensor = torch.randn(3,3).to(device)
print(tensor)
3. PyCharm 环境绑定
- 打开
File > Settings > Project: YourProject - 选择
Python Interpreter - 点击齿轮图标选择
Add... - 选择
Conda Environment > Existing environment - 找到你的 conda 环境路径(通常在 Anaconda 安装目录的 envs 文件夹下)
关键避坑指南
版本兼容性矩阵
| PyTorch 版本 | CUDA 版本 | cuDNN 版本 |
|---|---|---|
| 1.12.0 | 11.3 | 8.2 |
| 1.11.0 | 11.3 | 8.2 |
| 1.10.0 | 11.1 | 8.0 |
常见环境变量问题
- 报错
libcudart.so.11.0: cannot open shared object file - 解决:
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH
性能验证
用 MNIST 数据集测试 CPU/GPU 速度差异:
import time
# CPU 版本
start = time.time()
# 训练代码...
print(f"CPU time: {time.time()-start:.2f}s")
# GPU 版本
model.to(device)
start = time.time()
# 训练代码...
print(f"GPU time: {time.time()-start:.2f}s")
典型结果对比:
– CPU:约 120 秒 /epoch
– GPU:约 15 秒 /epoch(GTX 1080Ti)
监控显存使用:
watch -n 1 nvidia-smi
延伸思考
- 当你的模型太大,单卡显存不够时,如何用
DataParallel实现多 GPU 训练? - 在 Docker 容器中如何暴露 GPU 给 PyTorch 使用?
- 不同世代的 GPU(如 Pascal vs Turing 架构)对 PyTorch 性能有什么影响?
配置环境虽然繁琐,但一次正确的配置可以节省后续大量的调试时间。建议收藏本文的版本对照表,下次环境出问题时可以快速排查。
正文完
