大模型训练吃内存的真相:参数、激活、优化器各占多少
大模型训练吃内存的真相:参数、激活、优化器各占多少
16 字节每参数的铁律
用 Adam 优化器混精度训练,每参数固定吃掉 16 字节:FP16 权重 2 字节、FP16 梯度 2 字节、优化器状态 12 字节(FP32 主权重 4 + 一阶动量 4 + 二阶动量 4)。一个 7B 模型就是 7B×16≈112GB,70B 直接到 1120GB,光这一项就超出任何单卡显存,必须靠分片或卸载才能跑。
这还没算激活值。激活跟 batch size 和序列长度挂钩,和参数量无关,7B 模型在 seq=8192、batch=4 时激活能到约 24GB,单卡大概率装不下,得靠梯度检查点把它换算力。序列越长、批越大,激活这一项越不容忽视,有时候它比权重还占地。
推理和训练差出一个量级
推理只需权重,7B FP16 是 14GB,INT8 压到 7GB;训练却要 112GB。所以同一张卡能推理的模型,训练往往得换更大显存或多卡分片,两者对内存的压力根本不是一回事。新手常误以为能跑推理就能训,结果一开训练就 OOM。
- 权重(参数):FP16 下 2 字节/参数
- 梯度:FP16 下 2 字节/参数,训练独有
- 优化器状态:FP32 共 12 字节/参数,占训练显存 75%
有个直观换算:每十亿参数,训练约吃 16GB、推理权重约吃 2GB。当你拿到一个 13B 或 70B 的模型卡,先拿这个数乘一乘,就能在动手前预判显存会不会爆,而不是等框架报错才去翻日志找原因。
记住这条账:优化器状态才是训练显存的大头,它也是 ZeRO 和 offload 重点削减的对象。理解了占比,才知道省内存该从哪下手,也才明白为什么训练机比推理机更吃内存。实际排障时,先看显存占用拆解图,定位到底是哪一块涨得快,比盲目加卡省钱得多。
买内存不能只信规格书上的数字。真正要命的是高温长周期下的衰减与抖动。HeroTEST 提供模组级 DDR5 RDIMM 宽温测试与可信分级,把每条模组的实际表现量化出来,欢迎来询。