一、看卡先看四个参数
第一个参数是显存容量。它决定一个模型能不能装进去、能开多大的批次、能支撑多长的上下文。显存不够,任务根本起不来,这是硬门槛,不是调参数能绕过的。第二个参数是显存带宽。它决定数据在显存与计算单元之间搬运的速度,对自回归式的逐字生成尤其关键——这类任务的计算量不大,时间大多花在搬运权重上。第三个参数是计算能力与精度支持。要看支持哪些数值精度,以及在低精度下的实际吞吐。低精度不只是省显存,也直接决定每秒能算多少。第四个参数是互联。卡与卡之间怎么连、带宽多少、是否支持高速互联与跨机互联,决定了多卡能不能线性扩展。单卡看前三个,多卡必须看第四个——很多“加了卡却没变快”的情形,根子在互联上而不是算力上。
二、显存需求怎么估
显存估算是选型里最容易估错的一步,只按参数量乘字节数算会严重偏低。真实占用至少包含五块。第一块是模型权重:参数量乘以每个参数的字节数,低精度下每参数占两字节,全精度翻倍。第二块是优化器状态:训练时优化器往往要为每个参数存一到两份辅助量,全量微调时这部分可能比权重本身还大。第三块是梯度:与权重同量级。第四块是激活值:与批次大小、序列长度、层数正相关,长序列下这一项会突然变成主要开销。第五块是推理时的缓存:逐字生成要缓存历史状态,上下文越长、并发越多,占用越大。估算办法是先按权重算出下限,再按经验放大三到五倍做训练预算、放大一到三倍做推理预算,然后用一次小规模试跑校准。校准这一步不能省,框架版本、并行配置、批次设置都会让实际占用偏离估算。还有一处常被算漏的开销:碎片。显存分配不是完全连续的,长序列任务与短序列任务混跑时,可用显存往往比理论值少一截。稳妥的预算习惯是留出两成余量,宁可换高一档,也不要在启动后反复调批次——调批次看着省资源,实际把调试时间搭了进去。
三、训练侧真正在意什么
训练任务看三件事。第一件是持续算力。训练是长时间满负荷的矩阵运算,卡要能连续跑几小时甚至几天不掉速,散热与功耗的稳定性比峰值数字更重要。第二件是互联带宽。数据并行要频繁同步梯度,模型并行要频繁交换中间结果,互联带宽不足时,增加卡数带来的收益会被通信开销吃掉,扩展效率迅速下滑。实践中的经验是:一到两卡时互联影响不明显,一旦上到八卡、几十卡,互联就是决定成败的因素。第三件是精度支持的完整性。混合精度训练需要框架、驱动、算子库都对低精度有完整支持,某一环缺失就会退回高精度,显存与速度双双受损。此外还要留意卡的故障率与恢复能力:长周期训练中一次硬件异常就可能让几天的工作白费,能不能快速感知故障、能不能从检查点续跑,比单卡跑分更影响实际产出。还有一项是显存档位与并行的配合关系:显存越大,能少切一层并行,通信开销随之下降,扩展效率往往更好。这也是为什么“买大一点的卡”在很多训练场景里反而更省事,账要按整簇算,不是按单卡算。
四、推理侧真正在意什么
推理任务看的是另外三件事。第一件是显存带宽。逐字生成的计算需求低,大部分时间在把权重从显存搬到计算单元,带宽直接决定每秒能出多少字。这也是为什么有些卡算力数字不突出,跑推理却很快。第二件是显存容量。容量决定能同时服务多少个并发会话、能支持多长的上下文。上下文长度是隐性成本:同样一张卡,支持长上下文的并发数可能是短上下文的几分之一。第三件是低精度与量化支持。推理对精度损失相对宽容,量化到低精度往往能换来成倍的吞吐与显存节省,前提是算子库与推理引擎支持到位。还有一项容易被忽略:首字延迟与后续生成速度要分开看。前者取决于输入处理与调度,后者取决于带宽,两者的优化方向不同,选型时也要分别对照实测数据。
五、按场景分档
把场景粗分四类,对应关系会清晰一些。第一类是试验与小模型:参数在十亿以下,做微调验证或跑通流程,二十多 GB 显存的档位就够,重点看性价比与可得性,不必追求互联。第二类是主流规模训练:十亿到百亿级参数,需要多卡并行,四十 GB 上下或八十 GB 档位起步,重点看互联与扩展效率,存储与网络也要同步配足。第三类是大规模训练:百亿以上参数,单机已经不够,需要跨机高速互联,这时选型的主导因素不再是单卡参数,而是整机整簇的网络拓扑与调度能力。第四类是在线推理:以并发与延迟为核心,显存容量与带宽优先,算力峰值反而次要;并发高的业务更适合用多张中档卡分摊,而不是一张顶配卡跑满。四类之间不是泾渭分明,边界处按峰值需求定,低谷靠弹性伸缩回收。分档时还有一条现实考虑:可得性。某些档位在某些时段可能排不上,如果任务的时间窗比较紧,宁可接受相邻档位,也不要把计划押在一个未必能立刻拿到的规格上。选型方案里最好写一行备选,主选与备选各是什么档位、差多少成本、性能差多少,真遇到资源紧张时能立刻切换,而不是重新论证一遍。
六、同一张卡为什么表现不同
常有这样的情形:两张规格相同的卡,在两个环境里跑出的吞吐差出一截。原因通常在四处。第一处是软件栈适配:驱动、算子库、框架版本三者要与卡匹配,缺一个就会走通用路径,性能打折。第二处是并行配置:卡数增加后,切分方式、通信策略、批次大小都要跟着调,照搬单卡配置会导致通信成为瓶颈。第三处是存储与网络:数据读不快,卡就一直在等;跨机带宽不足,多机训练就退化成串行。第四处是任务本身的形态:长序列与短序列、稀疏与稠密,对硬件的偏好不同,同一张卡在不同任务上的相对排名会变。这四处说明一件事:选型不能只看规格表,要看目标任务的实测数据;能拿到与自己任务相近的实测结果,比看任何参数都可靠。实测时还有两个细节要注意:一是固定其他变量,只换卡型,否则测出来的差异说不清是哪一项造成的;二是跑够时长,短测容易被缓存命中抬高成绩,跑十分钟与跑一小时的数据往往不是一个结论。
七、选型做成一张对照表
给一套可照做的次序。第一步,定模型:参数规模、序列长度、精度要求三项写清。第二步,算显存:按上一节的方法估出训练与推理两套需求,取其中较大的一套作为下限。第三步,定互联:单卡够用就不必为互联付溢价;一旦需要多卡,把互联方式与带宽写进必选项。第四步,定规模与扩展方式:需要多少卡、是单机多卡还是多机、未来半年会不会翻倍,留一格余量但不要按五年规划买。第五步,核对软件栈:目标框架与推理引擎在该卡上的支持程度,有没有已知的算子缺口。第六步,实测验证:拿真实模型与真实数据跑一轮,记录吞吐、首字延迟、显存峰值三项,与需求对照。第七步,把结论写成表:每个场景一行,写清档位、卡数、互联要求、实测值、单价与来源,下次扩容或换型号时按表比对,不必重新调研一遍。
结语
卡型的差别落在四个参数上:显存容量决定能不能装下,显存带宽决定推理快不快,计算与精度支持决定训练吞吐,互联决定多卡能不能扩展。训练侧看持续算力与互联,推理侧看带宽与容量,两者的取舍方向并不相同。按试验、主流训练、大规模训练、在线推理四类场景分档,再用七步对照表把需求、实测与成本拉到一张纸上,选型就从“哪个型号更好”变成了“哪个规格更适合这件事”。规格表只能做初筛,真正的判断依据是自己任务上的实测数据。