一个模型能否在设备上运行,以及能否在期限内完成训练,是两个不同问题。前者取决于峰值状态和工作区,后者取决于总工作量与有效处理速度。只给参数量,既不能唯一确定显存,也不能唯一确定设备数。本章从模块形状出发,建立参数、计算、存储与期限之间可以逐项解释的关系。
本章负责推导工作负载需要多少资源。下一章讨论 GPU、网络和存储怎样供给这些资源,分布式训练章再解释状态如何切分、通信怎样执行。以下预算均保留明确假设;构造数值例题不作为任何具体硬件的实测性能。
假设与适用范围
除另行说明外,考虑自回归 Transformer,查询总宽度满足 \(h_qd_h=d\),键和值等宽;线性层不含偏置,前馈层采用三个矩阵的门控结构。将一次乘法与一次加法计为两个浮点操作。参数存储、缓存、激活和工作区分别计量,所有内存先换算为字节后再求和。
27.1计量对象及单位
| 符号 | 含义 |
|---|---|
| \(L,d,V,d_f\) | 层数、隐藏宽度、词表大小、前馈中间宽度。 |
| \(h_q,h_{kv},d_h\) | 查询头数、键值头数、每头宽度。 |
| \(B,T,D\) | 一次计算的序列批量、序列长度、整个训练过程消费的词元数。 |
| \(P,F\) | 参数数与浮点操作数,二者不能混用。 |
| \(b_w,b_g,b_c\) | 权重、梯度、缓存每元素字节数。 |
| \(N,S,u\) | 设备数、时间预算(秒)、按指定口径定义的有效利用率。 |
| \(R_{\mathrm{peak}},\beta\) | 单设备峰值操作率、有效数据传输带宽。 |
浮点操作数(Floating-point Operations,FLOPs)表示完成给定工作量所需的操作数量;FLOP/s 才是每秒操作率。参数数是独立可学习标量的数量。共享同一矩阵两次使用不会增加独立参数,却可能增加计算次数。
十进制 GB 为 \(10^9\) 字节,二进制 GiB 为 \(2^{30}\) 字节。若模型含 \(7\times10^9\) 个参数,每参数两字节,权重为 \(14\times10^9\) 字节,约 \(13.04\) GiB。将“7B”与“7 GiB”混为一谈,会在预算第一步就产生错误。1
峰值还必须带时间语义。训练过程中权重、梯度、保存激活、通信缓冲和检查点暂存的生存区间不同,逐项峰值直接相加可能过于保守;只记录每项平均值又可能漏掉同时存在的瞬时峰值。初步预算可先给保守上界,再用执行时间线细化。
27.2参数量核算
注意力及门控前馈层
查询投影 \(W_Q\in\Real^{d\times h_qd_h}\),键值投影 \(W_K,W_V\in\Real^{d\times h_{kv}d_h}\),输出投影 \(W_O\in\Real^{h_qd_h\times d}\)。因此
第二行使用了 \(h_qd_h=d\);若结构不满足这一条件,必须保留第一行。GQA 减少键值投影参数,但查询和输出两项没有因此消失。
门控前馈采用两条上投影和一条下投影,矩阵形状分别为 \(d\times d_f,d\times d_f,d_f\times d\),故
普通两矩阵前馈则为 \(2dd_f\)。比较两种前馈时要固定宽度还是固定参数预算,应先作选择;不能把系数二与三的差异忽略后宣称同样规模。
若每层有两组只含缩放参数的 RMSNorm,末尾还有一组,则归一化参数为 \((2L+1)d\)。若改为同时含缩放与偏置的 LayerNorm,需要按实际数量重新计数。偏置虽常是小项,精确统计仍应说明是否包含。
输入输出共享及专家层
输入嵌入参数为 \(Vd\)。输出投影若独立,再增加 \(Vd\);若与输入共享,则独立存储只计一次。设 \(\tau=1\) 表示共享,\(\tau=2\) 表示独立,在上述同构稠密结构下
学习到的绝对位置表、额外任务头或查询键归一化参数不包含在该式中,存在时必须逐项加入。
对于专家层,若每个专家为门控前馈,独立路由专家总参数为 \(E\cdot3dd_e\);每词元执行的专家矩阵规模近似为 \(k\cdot3dd_e\)。共享专家、路由器和注意力另计。激活参数影响本次计算,总参数影响需要保存的模型状态。它们不能在显存公式中互换。路由不均衡还会使某设备的实际负载偏离平均值,详见第36章《混合专家模型》。
参数量核算
例15.1
构造模型取 \(L=12,d=1024,V=32000,h_q=16,h_{kv}=4,d_h=64,d_f=2816\),输入输出共享,归一化采用上述 RMSNorm 配置。注意力每层参数为
前馈每层为 \(3(1024)(2816)=8650752\)。12层主干矩阵共 \(135266304\) 个参数,嵌入为 \(32768000\),归一化为 \(25600\),合计
若只把输出改为独立矩阵,增加 \(32768000\) 个参数。若只把键值头由4改成16,每层增加 \(2d(16-4)d_h\) 个参数;其影响不等于把整个模型参数乘四。
27.3矩阵计算量及训练近似
线性层前向及反向
对 \(X\in\Real^{n\times a}\) 和 \(W\in\Real^{a\times b}\),输出 \(Y=XW\) 有 \(nb\) 个元素,每个元素执行 \(a\) 次乘法和约 \(a\) 次加法,故前向近似 \(2nab\) FLOPs。该线性层有 \(ab\) 个参数,因此每行输入的矩阵计算约为 \(2P_W\)。
反向需要 \(\overline X=\overline YW^{\mathsf T}\) 与 \(\overline W=X^{\mathsf T}\overline Y\),两项各约 \(2nab\),前向与反向合计约 \(6nab\)。这解释了稠密模型训练中常用 \(6PD\) 估计的来源:每词元约执行一次前向与两次同阶矩阵反向。
它不是所有参数都精确执行六次操作。查表、共享参数的多次使用、冻结模块、优化器更新、专家路由和非矩阵算子都需要单独判断。尤其在门控网络中,逐元素乘法和激活导数有额外成本;大矩阵占主导时才适合把它们作为次阶项。
注意力的长度平方项
对每条序列,\(QK^{\mathsf T}\) 的计算近似为 \(2h_qT^2d_h\),再与值矩阵相乘也约为同量级,因此
表示常规密集实现的两个主要矩阵乘法,不含投影与 Softmax。利用因果三角结构的专用实现可能减少实际算术,但仅把未来分数设为负无穷的密集实现不一定节省计算。
令每层主干线性参数为 \(P_\ell\),输入输出投影的执行参数按实际路径统计,整个前向可以近似写为
输入查表不按一次 \(Vd\) 密集矩阵乘法计算,输出全词表投影却需要该项。权重共享减少存储,不删除输出计算。长上下文下第二项不能总被 \(2PBT\) 吸收。
以 \(P_\ell\approx12d^2\) 的常见量级作粗略比较,注意力交互与该层线性前向之比约为 \(\frac{T}{6d}\)。长度相对宽度很大时,忽略交互项会系统性低估成本。该比例来自给定参数近似,不是所有模型统一的转折点。
重计算及有效工作量
激活重计算(Activation Recomputation)通过丢弃部分中间量,在反向时重新执行相应前向,从而用计算换显存。若原训练前向计算为 \(F_f\)、反向为 \(F_b\),额外重算为 \(F_r\),实际计算为 \(F_f+F_b+F_r\),不能仍把全部成本记成固定 \(6PD\)。
FlashAttention 等算法减少注意力中间矩阵的显式存储和数据搬运(Dao 等 2022),不意味着注意力关系的数学定义发生变化。使用同一公式计算的两个内核,可以因读写量、重算与硬件利用率不同而具有不同时间。资源报告应分开模型有效工作量、实际执行工作量与墙钟时间。
27.4推理显存及并发容量
权重存储及量化开销
未量化权重存储为 \(Pb_w\)。若使用 \(q\) 位量化且每 \(g\) 个参数共享一个占 \(b_s\) 字节的尺度,忽略边界取整时
\(M_{\mathrm{other}}\) 包含零点、未量化层、对齐和打包元数据。某些后端还需临时反量化工作区。标称四位不能保证总显存恰为 BF16 的四分之一,也不能保证速度更快。
变长请求及键值缓存
对同构 GQA,若第 \(i\) 个并发请求已缓存 \(T_i\) 个位置,则
当全部请求长度相同才化为 \(2LBTh_{kv}d_hb_c\)。这里的长度包含已处理提示与已生成内容,不能只统计最终输出。共享前缀、滑窗淘汰、潜在状态和跨设备切分会改变实际驻留方式,需替换相应状态模型。
若分页块容量为 \(p\) 个位置,且每条请求独立分配整块,则实际保留槽位为 \(\sum_i p\lceil \frac{T_i}{p}\rceil\)。内部浪费小于 \(Bp\) 个位置,但还存在页表与运行时保留。共享前缀时不能同时按逻辑引用数和物理页数重复统计。
并发容量约束
设设备可用显存为 \(M_0\),权重及固定运行时占用 \(M_f\),给定长度 \(T\) 的单请求缓存为 \(m(T)\),工作区上界为 \(W(B,T)\),则并发必须满足
若假设工作区固定,可先求缓存约束的整数上界;实际工作区随批处理变化时,需要在候选并发上逐项计算。平均请求长度只描述典型状态,不能保证长请求同时到达时不越界。
对于前述构造模型,取缓存每元素两字节,单请求每位置缓存为 \(2(12)(4)(64)(2)=12288\) 字节。缓存8192个位置需要 \(96\) MiB,32个同长请求需要 \(3\) GiB。若键值头变成16,其缓存变成四倍;权重、工作区和服务时延仍需分别计算。
27.5训练状态、激活及分片
每参数字节数来自哪些状态
一种混合精度 Adam 配置保存两字节训练权重、两字节梯度、四字节主权重以及两个四字节矩估计,总计每参数16字节。这个数字来自具体状态表,而不是 Adam 的不可变常数。梯度累积可能使用四字节,某些实现不保留独立主权重,低精度优化器又会采用其他布局。
| 状态 | 本例每参数字节数 | 用途 |
|---|---|---|
| 计算权重 | 2 | 前向与反向的矩阵运算。 |
| 梯度 | 2 | 本次更新方向。 |
| 主权重 | 4 | 高精度参数累积。 |
| 一阶矩与二阶矩 | 8 | 自适应更新统计。 |
冻结基座不再为基座计算全部参数梯度和优化器状态,却通常仍需保存激活以向可训练适配器传递梯度。因此 LoRA 或 QLoRA 的显存不能只按可训练参数百分比乘全参数训练显存。
分片降低哪些驻留量
设权重、梯度、优化器相关状态分别为 \(M_w,M_g,M_o\),数据并行组有 \(N_d\) 个设备。理想均匀分片的驻留模型为
这里按 ZeRO 的分阶段思想区分被分片对象(Rajbhandari 等 2019);具体执行协议在第29章《分布式训练》展开。公式没有包含临时聚合完整层参数的峰值、通信桶、预取和激活,也未保证所有层完全均匀。
若总参数状态112 GB,八设备理想全分片后平均为14 GB;但某一执行阶段仍可能临时聚合一个大层。因此用总状态除设备数只能给驻留基线,不能直接当作单设备峰值。
激活模型的结构前提
简单的线性保存模型可写为 \(M_a\approx c_aLBTdb_a\),其中 \(c_a\) 表示每层每位置保存多少个隐藏宽度等效元素。它应由实际计算图或测量校准,而非固定成一个普适常数。若显式保存注意力概率,还可能增加 \(O(LBh_qT^2)\) 元素;使用分块内核与重算后,保存结构发生变化。
峰值训练显存可组织为
各项同时驻留的时间应按执行顺序分析。流水并行可能保存多个在途微批的激活;张量并行可能分摊部分张量,也可能复制其他状态。因此不能对全部分项统一除以设备总数。
27.6带宽、时间及设备数
算术强度及不可突破的下界
算术强度(Arithmetic Intensity)定义为操作数与相应存储层数据搬运字节数之比 \(I=\frac{F}{Q}\)。忽略重叠细节时,单个工作负载的耗时至少满足
一次调用若算术强度低,即使峰值矩阵吞吐很高,也可能受权重或缓存读取限制。提高批量可以复用权重,但同时增加缓存和延迟;性能问题不能只用峰值 FLOP/s 回答。
有效利用率及时间预算
设整个训练所需模型工作量为 \(F_{\mathrm{model}}\),\(N\) 个设备的指定精度峰值总和为 \(NR_{\mathrm{peak}}\)。按模型工作量定义有效利用率
该定义将通信等待、数据等待、重算和其他开销反映在墙钟时间中。若另一个报告把重算计入分子,它采用不同口径,两个利用率不能直接比较。也不能将已包含通信损失的利用率再乘一次同样的通信折损系数。
在假设 \(u\) 对候选设备数近似稳定时,期限 \(S\) 要求
扩容后 \(u\) 往往变化,因此严格预算需要 \(u(N,\text{拓扑},B,T)\) 的情景模型。显存可行性也依赖具体并行方式,不能总用另一个独立常数卡数表示。
同一模型的训练及推理预算
例15.2
沿用前面 \(L=12,d=1024,V=32000,h_q=16,h_{kv}=4,d_h=64,d_f=2816\) 的共享嵌入模型,总参数为 \(P=168059904\)。扣除归一化参数,参与主要线性映射的参数为 \(P_{\mathrm{lin}}=168034304\)。设处理约 \(D=10^9\) 个非填充位置、序列长度 \(T=2048\),忽略最后不满序列的边界修正。若每个独立块采用块内下一词元配对,有效监督量约为 \(\frac{D(T-1)}{T}\);本段计算量使用处理位置数 \(D\)。不使用激活重算,注意力按稠密计算计数,则主要训练计算为
第二项由每层每序列注意力前向 \(4T^2d\) 乘以前反向近似因子3,再乘 \(\frac{LD}{T}\) 得到。本例未计 softmax、逐元素运算和优化器更新,故是声明范围内的估算。
假设单设备峰值为 \(2\times10^{13}\) FLOP/s,该计数口径下端到端有效利用率为0.3,则运行约 \(218365.952\) 秒,即60.66小时。72小时期限下,计算量约束允许一个设备。容量还需独立检查:按每参数16字节保存训练状态,占2.5043 GiB;假设激活、工作区和余量合计4 GiB,峰值约6.5043 GiB,小于假定的16 GiB可用容量。4 GiB是构造输入,不能从参数数目推出。
同一模型切换到推理时,两字节权重占320.55 MiB;四条请求各缓存2048个位置,KV占 \(4\times2048\times12288=96\) MiB。若另预留512 MiB工作区,总计约928.55 MiB。这个容量预算不提供时延保证;实际吞吐必须使用推理阶段的形状、内核与带宽重新评估。由此,一组结构参数可以同时约束训练计算、训练驻留和推理缓存,但三个结果依赖不同的运行假设。
资源联合预算
例15.3
假设某稠密任务含 \(P=7\times10^9\) 参数、训练 \(D=10^{11}\) 词元,暂用 \(F=6PD=4.2\times10^{21}\) 操作的基线。每设备峰值设为 \(2\times10^{14}\) 操作每秒,模型利用率假设 \(.4\),期限为10天,即864000秒。计算约束为
若拓扑要求设备数为八的倍数,可行候选从64开始。这里的61不是实测扩展曲线给出的答案;长上下文交互和重算若未包含在利用率口径中,必须另加工作量。
同一任务若采用本章16字节状态配置,总状态约104.31 GiB。设八路全分片,驻留状态约13.04 GiB,再假设激活、聚合、工作区和余量共8 GiB,则单设备约21.04 GiB,低于假设的40 GiB可用容量。该情景说明显存可能在八设备组内已经可行,而期限仍要求更大的集群。64设备的具体数据、张量和流水并行布局,以及其实际利用率,仍需由分布式执行方案确定。
算法27.1 构建资源可行情景
输入:模型配置、词元预算、长度与并发分布、精度、候选拓扑、期限和容量余量。输出:每个候选的分项预算、可行条件和仍待测量的系数。
按实际共享关系计数参数,分别建立总参数、执行矩阵和特殊状态清单。
对各拓扑计算权重、梯度、优化器、缓存、激活及峰值临时量;拒绝违反单设备容量约束的情景。
按线性、注意力交互与重算分解工作量,使用该拓扑的利用率假设估计时间;检查期限约束。
计算数据供给、检查点、CPU和主机内存需求,检查是否存在上游瓶颈。
分别代入基准、保守和压力假设,记录结论改变的边界,而非只输出一个设备数。
未知测量系数保留为区间,不用虚构的精确小数填补。最终选型前用目标环境测量校准,方法见算力基础设施章。
27.7主机、存储及数据供给预算
训练吞吐目标若为每秒 \(r_t\) 个词元,物化数据平均每词元占 \(b_t\) 字节,则纯输入带宽下界为 \(r_tb_t\);索引、压缩、重试和预取会增加其他开销。若运行时还需解析和分词,应使用对应步骤的实际处理速率估计 CPU 需求,而不直接按 GPU 数量乘固定核数。
检查点大小为 \(C\),允许写入窗口为 \(\Delta\),则平均有效写带宽至少为 \(\frac{C}{\Delta}\)。异步写入不删除数据,只是将等待转移到主机内存、队列和后台 I/O;产生速度长期大于写出速度时,队列仍会无限增长或触发阻塞。
总存储应分开原始数据、清洗数据、词元分片、检查点、评估结果、日志和中间资产。若保留 \(K\) 个完整检查点,每个大小 \(C\),至少需要 \(KC\),另加构建暂存和恢复副本。分片文件数量影响元数据操作与小文件开销,容量充足不保证读取吞吐足够。
27.8敏感性及预算表达
预算报告应给出假设变化如何影响结论。例如固定模型时,普通KV缓存随总驻留词元线性变化;密集注意力交互随单序列长度平方变化;模型利用率从 \(.4\) 降到 \(.3\) 时,在其他条件不变的近似下,所需设备时间增加三分之一。参数量翻倍则同时影响状态与线性计算,但不必把所有缓存维度也翻倍。
余量要标明用途。容量安全余量、故障备用设备、维护窗口和负载峰值是不同项;若某系数已经按高分位负载测得,再把同一负载波动完整重复加入,会高估预算。反过来,不能为了满足费用上限而把未知工作区当成零。
最终预算是可追溯的情景集合:每个情景绑定模型版本、数据量、精度、长度分布、并行配置、有效速度与余量。它允许读者解释某项变化造成的后果,并指出哪些假设必须在实施时重新测量。
硬件标称容量、操作系统显示和框架日志可能采用不同单位。有些界面虽写 GB,实际计算却用二进制除数,资源报告应列出原始字节数及换算规则。↩︎