在 Linux + PyTorch 场景下,“内存不足”可能指两种不同层面:
OutOfMemoryError: unable to allocate ...CUDA out of memory下面分别说明常见原因和解决办法。
loss.backward() 后 optimizer.zero_grad()del x / torch.cuda.empty_cache()loss.item() 以外的 Python 操作with torch.no_grad():pin_memory=True + 多进程# 减小 batch size
batch_size = 8 # ↓
# 使用混合精度
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
with autocast():
output = model(x)
loss = criterion(output, y)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
# 及时清理
del output, loss
torch.cuda.empty_cache()
# 推理时不记录梯度
with torch.no_grad():
out = model(x)
其他:
torch.utils.checkpointmodel.half()(FP16)DataParallel / DDP)# 减少 worker
DataLoader(..., num_workers=4)
# 使用内存映射
np.load(..., mmap_mode='r')
# 及时释放
del data
gc.collect()
ulimit -a
若 max memory size 很小,可修改。
docker run --memory=16g ...
dmesg | grep -i oom
# GPU 显存
nvidia-smi
# CPU 内存
free -h
top
htop
# 进程内存
ps aux --sort=-rss
PyTorch 内存不足,90% 是 GPU 显存问题,核心原因是 batch 大 + 计算图未释放。
如果你愿意,可以贴出:
我可以帮你精确定位并给出修改方案。