文章目录
为什么你的PyTorch总在摸鱼??
兄弟们!今天必须跟你们唠唠这个世纪难题——为啥你的PyTorch死活用不上GPU?(别问我怎么知道的,说多了都是泪)昨天刚帮学弟调试代码,发现他训练MNIST居然要2小时!点开任务管理器一看,好家伙,显卡占用率0%…
安装前的灵魂拷问
你的显卡配吗?(扎心预警)
首先掏出你的设备管理器(Win+R输入devmgmt.msc
),展开显示适配器。如果看到的是:
- Intel HD Graphics ➜ 洗洗睡吧
- AMD Radeon ➜ 建议转身拥抱TensorFlow
- NVIDIA GeForce ➜ 恭喜获得入场券!
(注意:MX系列显卡建议直接放弃治疗,那点CUDA核心数还不如CPU跑得快)
驱动版本要到位!
右键桌面→NVIDIA控制面板→帮助→系统信息,这里能看到你的CUDA支持版本。比如显示11.6,那最高只能装CUDA11.x的PyTorch版本!
(超级重要)驱动一定要去官网更新!我之前在Windows Update装的驱动,结果CUDA死活不认!!
手把手安装教学
终极选择:conda还是pip?
这里有个惊天大秘密:用conda会自动安装CUDA Toolkit,而pip需要系统提前装好!
推荐两种方案:
- 方案A(新手友好):
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
- 方案B(版本控):
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
(注意!这里的cu113要改成你的CUDA版本号,比如11.6就是cu116)
验证安装的正确姿势
不要再用print(torch.cuda.is_available())
糊弄自己了!试试这个诊断脚本:
import torch
print("===== 显卡信息 =====")
print(f"显卡型号: {torch.cuda.get_device_name(0)}")
print(f"算力等级: {torch.cuda.get_device_capability(0)}")
print("\n===== 性能测试 =====")
x = torch.randn(10000, 10000).cuda()
y = torch.randn(10000, 10000).cuda()
%timeit z = x @ y # 正常应该在1秒以内
如果看到类似这样的报错:
NVIDIA driver version is insufficient for CUDA version
赶紧去更新驱动!别犹豫!
常见翻车现场实录
案例1:CUDA不可用但显示True
遇到过最坑的情况:torch.cuda.is_available()
返回True,但一用就报错。解决方法:
- 彻底卸载重装(要用
pip autoremove
) - 检查PATH环境变量是否有多个CUDA路径
- 终极杀招:重装系统!(别笑,我上次被逼到重装了3次)
案例2:内存不足的玄学问题
明明显存还剩6G,却报OOM?试试这些骚操作:
- 在代码开头加
torch.cuda.empty_cache()
- 把batch_size改成奇数(别问为什么,玄学有时管用)
- 换用
pin_memory=True
的DataLoader
性能调优黑科技
让你的显卡火力全开
在训练循环前加上这三行魔法:
torch.backends.cudnn.benchmark = True
torch.set_float32_matmul_precision('high')
os.environ["CUDA_LAUNCH_BLOCKING"] = "1" # 调试时用
混合精度训练真香!
修改你的训练循环:
scaler = torch.cuda.amp.GradScaler()
with torch.autocast(device_type='cuda', dtype=torch.float16):
outputs = model(inputs)
loss = criterion(outputs, labels)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
实测这个改动能让3090的训练速度提升40%!(不过要注意有些操作不支持半精度)
写给Linux用户的特供坑位
驱动安装的十八弯
Ubuntu用户切记:
- 先装gcc/g++(版本要匹配!)
- 禁用nouveau驱动(不然等着黑屏吧)
- 千万别用
sudo apt install nvidia-driver
!去官网下.run文件手动装!
Docker用户的隐藏福利
直接使用官方镜像省去80%的麻烦:
docker run --gpus all -it pytorch/pytorch:1.13.0-cuda11.6-cudnn8-runtime
(记得替换成你的CUDA版本)
最后的灵魂拷问
安装成功后,不妨问问自己:
- 我的数据预处理够高效吗?(别让CPU成瓶颈)
- 真的需要这么大的batch_size吗?
- 有没有尝试过梯度累积这种骚操作?
记住,GPU不是万能药!上次我帮人优化代码,光是改了个数据加载方式,速度就提升了10倍…(手动狗头)
祝大家都能让显卡火力全开!遇到坑别慌,多Google多问(但千万别去某度!)