下面从工程实践角度系统讲一下:如何用 Python 优化深度学习(训练速度、显存、精度、稳定性)。我会按「层次」来讲,方便你按需使用。
DataLoader + 多线程from torch.utils.data import DataLoader
loader = DataLoader(
dataset,
batch_size=64,
num_workers=8,
pin_memory=True,
prefetch_factor=4
)
✅ 要点:
num_workers 一般 = CPU 核数pin_memory=True(GPU 训练)❌ 错误:
def __getitem__:
img = cv2.imread(...) # 每次都在 GPU 前做
✅ 正确:
.npy / .tfrecord / LMDBtorchvision.transforms 的 v2 加速torch.compile(PyTorch 2.0+)model = torch.compile(model)
✅ 效果:
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
with autocast():
out = model(x)
loss = crit(out, y)
scaler.scale(loss).backward()
scaler.step(opt)
scaler.update()
✅ 好处:
nn.Conv2d → F.conv2dLayerNorm → FusedLayerNormxformers(Transformer 专用)pip install xformers
accum_steps = 4
loss = loss / accum_steps
loss.backward()
if step % accum_steps == 0:
opt.step()
opt.zero_grad()
✅ 推荐:
from torch.optim.lr_scheduler import CosineAnnealingLR
torchrun --nproc_per_node=4 train.py
或使用:
DistributedDataParallelDeepSpeedFSDP(超大模型)| 问题 | 解决 |
|---|---|
| 保存过多中间变量 | del x |
不必要 .cpu() |
减少 |
| 大 tensor 常驻 | torch.no_grad() |
with torch.no_grad():
eval()
gradient checkpointingmodel.gradient_checkpointing_enable()
✅ 用时间换显存
with torch.profiler.profile() as p:
train_step()
print(p.key_averages().table())
nvidia-smi)✅ 优先顺序:
torch.compile❌ 不要一开始:
你可以告诉我:
我可以直接给你一套可运行的优化模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。