一、显存占用由哪几部分构成
(一)参数本身
模型参数是最直观的一块,按参数量乘以单个参数占用的字节数即可估算。参数量相同的模型,采用不同精度时占用差别很大,这也是精度选择成为第一个决策点的原因。
(二)梯度与优化器状态
训练阶段还要存放梯度与优化器状态,常见优化器还会额外保存若干份与参数同等规模的中间量。这几块加起来通常是参数本身的数倍,只按参数量估显存会严重低估。
(三)激活值与临时缓冲
前向传播产生的中间结果要保留到反向传播结束,这部分占用随批量大小与序列长度增长。序列越长、批量越大,这部分膨胀得越快,也最容易触发不足。
二、精度选择的连锁影响
1. 低精度省显存也更快
采用较低的数值精度,参数与激活值的占用直接下降,同时在支持低精度运算的硬件上速度也更快。这是当前大规模训练普遍采用混合精度的原因。
2. 数值稳定要有兜底
低精度并非没有代价,部分运算仍需在较高精度下完成,否则可能出现数值异常。常见做法是关键环节保留高精度副本,其余部分使用低精度。
3. 推理阶段可以更低
推理不涉及梯度与优化器状态,显存压力小得多,可以采用更激进的低精度方案,这对降低单位请求成本帮助明显。
三、卡间互联在多卡场景的作用
(一)加速比不是线性的
增加卡的数量并不带来同等倍数的提速,节点之间需要交换梯度与中间结果,通信耗时随规模上升而变大,最终吃掉一部分收益。
(二)互联方式决定额度
同一台机器内的多张卡通过高速通道互联,跨机器则走网络,两者的带宽与时延差距明显。能单机多卡解决的任务,尽量不要拆到多机。
(三)先小规模实测
在同一批数据上分别测单卡、双卡、四卡的吞吐,得到实际加速比曲线之后再决定规模,比按理论值估算可靠得多。
四、三类常见错配
遇到下面三类情况,可以按对应办法调整:
① 显存差一点就够:优先调小批量规模或缩短序列长度,其次再考虑换更大规格的卡。
② 显存富余但吞吐低:说明瓶颈不在显存而在读取或通信,应优先查数据管道。
③ 多卡加速比明显偏低:多半是互联或切分策略不合适,先减少卡数再测一遍。
五、规格与数量怎么组合
(一)大模型优先大规格单卡
模型规模较大时,单卡显存是硬门槛,优先满足单卡规格再考虑数量,否则再多的卡也无法容纳一次前向与反向。
(二)中小模型可以多用小卡
模型不大、批量也不大时,用规格适中但数量更多的组合往往更具性价比,也便于同时跑多个任务提高整体利用率。
(三)留出余量
估算结果之上留出两成左右余量,应对输入长度波动、临时增大的批量以及其他未预估到的开销。余量留得太少,运行中触发不足的概率会明显上升。
六、算完之后的几项复核
(一)用真实数据试跑
估算只是起点,用真实数据与真实批量跑一轮,观察实际占用与吞吐,比任何公式都准。试跑时间不必长,跑通若干次迭代即可。
(二)记录并对比
把不同组合的实测结果记录下来,形成内部的对照表,下次选型直接参考。记录可存放在天翼云存储,与任务日志放在一起。
(三)盯住长期利用率
-
选定组合之后,持续跟踪卡时利用率。长期偏低说明选型或调度存在浪费,配合天翼云主机做轻量调试,能把大规模任务的占用压下来。
-
闲置时长的统计要单独做。它往往比选型不当造成的浪费更可观,也更容易被忽略。
-
若任务有明显峰谷,按峰谷调整实例数量,比长期保持固定规模更省。
-
短任务更适合灵活安排。把调试、评测这类耗时不长的任务放在低峰时段,或者使用规格较小的实例,能减少对长任务的干扰。
-
资源紧张时,排队等待与换用其他规格之间要做取舍。等待若干小时拿到理想规格,与立刻用次优规格开跑,哪个更划算取决于任务时长。
(四)显存估算与优化手段
-
参数量相同的模型,因结构不同,激活值的占用可能相差不少,粗算结果只能作为起点。
-
优化器的选择直接影响显存,换用状态更少的优化器往往比换更大的卡更划算。
-
梯度累积可以在不增大显存占用的前提下获得与大批量相当的收敛效果,是显存紧张时的首选手段。
-
激活重计算以时间换空间,在显存紧张而算力富余的场景下非常实用。
-
序列长度对显存的影响通常呈超线性,长文本任务要单独估算,不能按短文本的经验外推。
-
推理场景可以按并发路数反推显存,同时服务的请求越多,需要预留的空间越大。
-
批量规模与显存占用近似线性,找到临界点之后,留出余量即可,不必追求用满。
-
碎片也会影响可用性。长时间运行后即使总量够,也可能因为连续空间不足而失败,定期重启实例能缓解。
-
资源紧张时,先减少并发任务数,比让多个任务互相挤占显存更划算。
(五)选型与硬件匹配
-
同一规格的卡在不同任务上的表现差别可能很大,选型时要以自家任务为准,而不是只看标称参数。
-
算力与显存带宽要一起看。显存够但带宽不足时,算力会长时间空转。
-
低精度单元的有无会显著影响吞吐,支持与否往往比核心数量更关键。
-
长时间运行的任务要留意温度与降频,散热不佳会让实际吞吐明显低于标称。
(六)实测方法
-
实测时要用与生产一致的输入长度分布,用短样本测出的吞吐放到真实场景会明显偏高。
-
实测时至少跑满若干个完整周期,只跑几十步得到的吞吐通常偏高,因为预热开销被摊薄了。
(七)天翼云与记录归档
-
天翼云主机可用于跑小规模对照实验与跑通流程,先确认代码正确性,再把宝贵的卡时留给正式训练。
-
不同组合的实测结果建议记录到天翼云存储,形成内部对照表,后续选型直接参考查询即可。
-
用量数据按项目分账,配合天翼云安全的审计能力,能做到支出可追溯。
结语:选卡型的正确顺序是显存先行、数量其次、互联最后,按这个顺序走,基本不会出现跑不起来或者排队等换卡的窘境。显存粗算不需要非常精确,留出两成余量就足够应付多数情况。多卡场景要额外留意互联方式,它对实际加速比的影响,往往比单纯增加卡的数量更明显。