70B 的大模型,量化后也要 40GB 上下,单张消费卡装不下,怎么办?答案是把一个模型拆开,让多张卡合力装下它。这个拆法叫模型切分,这篇讲清它怎么切、代价是什么。
一张卡装不下怎么办:切分思路
模型的参数是一个整体,但推理时不必拘泥于「一张卡装一个模型」。既然显存是按容量装的,容量不够就把参数摊到几张卡上,计算时各卡分工协作。就像一本书太厚放不进一个书包,可以一人背几章,凑齐了照样讲课。
听起来简单,难点在协作:模型各层之间是流水关系,前一层的结果是后一层的输入,参数被拆到不同卡上后,中间结果就得跨卡传递,每一次传递都有时间成本。切分方案的设计,本质是在「装得下」和「传得快」之间找平衡。
按层切和按张量切
第一种是按层切,也叫流水线并行。模型本来就由几十层堆叠而成,把前后层分给不同的卡:卡一算完前几层,把结果递给卡二接着算,像工厂流水线。优点是卡间通信少、实现简单;缺点是同一时刻只有一张卡在干活,其余的干等,除非把多个请求错峰排进流水线,才能把空闲填上。
第二种是按张量切,也叫张量并行。把一层内部的那个大矩阵拆成几块,每张卡各算一块,再拼回结果。每层都要通信一次,开销大得多,但所有卡同时干活,单次推理的延迟低。实践中常见混合用法:机器内几张卡用张量并行拼速度,多台机器之间用流水线并行扩容量。
切分方式对照
- 按层切:通信少、好部署,单请求延迟大,适合并发高的服务
- 按张量切:全程并行、延迟低,通信频繁,适合机器内高速互联
- 混合切:大模型跨机部署的常见做法
- 通用提醒:卡与卡之间的互联速度,决定切分方案的成败
切之前先看你的卡之间说话有多快。
切分不是越多卡越快
直觉上多加卡就该更快,实际未必。卡与卡之间要传递中间结果,传递走的是机器内的通道,速度远低于卡内部的带宽;切得越碎,传递占比越高,某些环节上多卡反而比单卡慢。行业里有个形象的观察:跨机切分时,机器之间的通信可能吃掉大量等待时间,具体损耗与模型结构和网络条件相关,以实测为准。
所以切分前的正确顺序是:先量化压缩,看能不能塞进单卡;实在不行再考虑双卡;多卡和多机是服务化的选择,不是个人的常规操作。很多人从「加卡」开始,结果花了两倍的钱买来更慢的速度,问题就出在通信开销上。一个直观的参照是接力赛:人多未必快,每人跑的距离短了,交棒次数却多了,等待和交接的损耗会吃掉省下的时间——卡间的数据传递就是那次交棒。
从单卡到多机,代价和适用面排一遍。
| 规模 | 什么时候走这一步 | 主要代价 | 适用面 |
|---|---|---|---|
| 单卡(先量化压缩) | 压缩后能塞进一张卡 | 量化带来的精度损失 | 首选,个人和轻量部署的常规解 |
| 双卡切分 | 单卡实在装不下 | 中间结果跨卡传递,某些环节反而更慢 | 谨慎使用,先确认单卡方案已走到头 |
| 多卡、多机 | 真有并发需求的服务化场景 | 跨机通信可能吃掉大量等待时间 | 不是个人的常规操作 |
切分取舍一句话
模型切分的取舍可以浓缩成一句:切分解决的是装得下的问题,顺手解决不了跑得快的问题。单卡优先,双卡谨慎,多卡留给真有并发需求的场景。装不下之前先试压缩,见什么是量化部署?压缩后再上卡,一个例子讲透;各档位卡的显存差异看消费级显卡和专业卡有什么区别?;切分之后流量涌进来怎么管,读什么是网关限流?给 API 加一道闸;配套的软件层选型见推理框架怎么选?主流引擎的定位。
换个问法再问模型切分三句
- 两张 8GB 卡能跑 16GB 的模型吗?:切开后可以,但卡间通信会拖慢速度,若模型有 8 位版本能塞进单卡,优先用单卡方案。
- 切分和量化能同时用吗?:能,而且常常搭配使用,先量化减小体积,再对剩余部分做切分,两头的开销都降低。
- 不同型号的卡混用可以吗?:技术上可行,实际麻烦多,各卡算力和带宽不匹配会让快卡等慢卡,尽量同型号组队。


