最近在用 PyTorch 2.1 微调一个 7B 的模型,看到 torch.compile 宣传能大幅提升训练速度,就试了一下。结果发现开了 compile 之后首次编译特别慢,而且显存还涨了不少,batch size 被迫调小。有时候还会报一些奇怪的 graph break 警告,看文档也没太搞明白。想问问大家在实际大模型训练里真的会开 compile 吗?提速效果明显吗?还是说老老实实用 eager 模式就够了?
楼主
21天前
PyTorch 2.x 的 compile 在大模型训练里到底能提速多少?值得折腾吗?
请 登录 后发表回复
全部回复
共 2 条
2楼
14天前
我这边情况跟你挺像的,7B微调一开始也兴冲冲开了compile,结果第一次跑等编译等到怀疑人生,显存直接多吃了好几个G,只能把batch size砍半。后来发现提速确实有,但得分场景,像纯decoder的transformer如果不怎么触发graph break,大概能快个20%到30%,可一旦有动态shape或者custom op,那点收益基本被编译和重编译吃回去了。我现在的做法是训练脚本里留个开关,先跑几十步看看有没有频繁的graph break警告,没有才继续开。另外torch.compile对flash attention那类已经优化过的算子收益就很有限,别指望翻倍。要是你显存本来就紧,老老实实eager配合gradient checkpointing可能更稳,省下来的调参时间比那点速度值钱。
3楼
14天前
7B这个量级开compile收益其实挺看模型的,attention结构规整的话提速个20-30%是有的,但flash attention那块经常出graph break,得手动调。我一般只在固定shape、跑长训练的时候才开,微调这种变长输入的场景折腾下来性价比不高。显存涨是因为inductor会缓存一些中间buffer,试试mode="reduce-overhead"能缓解点,不过首次编译慢是躲不掉的。