梯度检查点是通过只保存部分中间激活值、反向时重算前向来节省显存的技术,能降低40%~60%显存但增加15%~30%训练时间,要求模块前向可重入且无副作用。梯度检查点是什么,为什么能省显存梯度检查点(torch.utils.checkpoint.checkpoint)不是"不存梯度",而是"不存中间激活值"。反向传播时需要前向计算的中间结果来算梯度,常规训练会把所有层的输出全存着,显存占用和网络深度线性增长;而检查点只存部分层的输入,反向时临时重跑对应前向------用时间换空间。典型节省比例:ResNet-50 训练 batch size 可从 16 提到 32,ViT-L 类模型显存常降 40%~60%。但注意:它只对**前向可重入、无副作用**的模块有效,比如不能包裹含 nn.Dropout(训练态随机行为不可复现)或修改全局状态的自定义层。怎么加 checkpoint,最简安全写法别直接套整个模型,先从单个 nn.Sequential 或自定义 forward 块开始。PyTorch 官方推荐方式是用 checkpoint.checkpoint 包裹函数调用,而不是用装饰器(后者容易隐式捕获非 tensor 参数)。必须确保被包裹函数只接收 Tensor 参数,且不依赖闭包变量(如 self.training)若模块含 training 切换逻辑(如 Dropout),改用 checkpoint.checkpoint_sequential 或手动拆分 + torch.no_grad() 重算示例:对 Transformer 层列表做检查点from torch.utils.checkpoint import checkpointdef custom_forward(x, layer): return layer(x)# 替换原循环:x = layer(x)x = checkpoint(custom_forward, x, layer)常见报错和绕过方法RuntimeError: Trying to backward through the graph a second time:说明 checkpoint 内部用了被复用的 Tensor(比如共享 embedding),或者你在检查点外又对同一张量调了 backward()。根本原因是计算图被意外保留。 VWO 一个A/B测试工具
相关推荐
IvorySQL2 小时前
PostgreSQL 日报|恢复期 COPY TO 未日志表修复(10 月 21 日)贝猫说python3 小时前
大模型比赛2.3智能体开发(工具调用智能问答助手)许彰午5 小时前
28-ORA-01110数据文件读取错误凯凯姜5 小时前
MySQL 联合索引设计与索引失效猫咪很可爱5 小时前
Oracle TEMP 表空间不足(ORA-01652)问题分析与优化实践外收内放6 小时前
面向对象高级(实战案例)专业程序开发源6 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计FPGA小迷弟6 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南卷无止境6 小时前
面向arm64桌面客户端开发全景:语言、框架与生态九零HTTP7 小时前
10月21号-CSDN配菜-IP池的5个坑