大模型部署不盲目,是需要精确计算
1.显存去哪了?三大块
部署一个LLM做推理,显存被三样东西吃掉:
|
显存占用项 |
说明 |
占比 |
|
模型权重 |
参数量 x 每参数字节数 |
约 65%~80% |
|
KV Cache |
缓存每层attention的key/value,随序列长度和并发数线性增长 |
约15%~30% |
|
激活值/中间结果/框架开销 |
推理临时张量+框架自身开销(CUDA context等) |
约2%~5% |
公式:总显存 = 模型权重 + Kv cache + 激活/开销
2.模型权重的精确计算
2.1基本公式
权重显存(GB) = 参数量 x 每个参数的字节数
2.2常见进度对照表
|
精度 |
每个参数字节数 |
说明 |
|
FP32 |
4 Bytes |
全精度,训练常用 |
|
FP16 |
2 Bytes |
半精度,推理标配 |
|
BF16 |
2 Bytes |
同FP16,但动态范围更大 |
|
FP8 |
1 Bytes |
Hopper 框架原生支持 |
|
INT8 |
1 Bytes |
量化推理 |
|
INT4 |
0.5 Bytes |
极低精度量化 |
2.3 实例速算
|
模型规模 |
FP32 |
FP16/BP16 |
FP8/INT8 |
INT4 |
|
7B |
28G |
14G |
7G |
3.5G |
|
70B |
280G |
160G |
70G |
35G |
所以A100 (80G) 用FP16 ,单卡最多装 约40B 参数量的模型(因为还要预留空间给KV cache)
3.KV Cache的精确计算
3.1 公式
KV Cache (Bytes) = 2 x 层数 x 头数 x 每头维度 x 序列长度 x 每个参数字节数 x 并发数
简化版(更实用)
KV Cache (Bytes)= 2 x (hidden_size x 层数 x 序列长度 x 并发数 x 精度字节数) / (1024 ** 3)
估算版
KV Cache (Bytes)= 参数量(B) x 序列长度(tokens) x 并发数 x 0.0013 (FP16的经验系数0.0013)
3.2 具体例子:Llama-2-7B, FP16
- hidden_size = 4096, 层数 = 32, 头数 = 32,每头维度 = 128
- 单token且单并发的 KV Cache = 2 x 32 x 32 x 128 x 2 Bytes = 512KB
- 序列长度4096,并发1: 512KB x 4096 = 2G
- 序列长度4096,并发8:2G x 8 = 16G
所以 A100 80G 跑Llama-2-7B FP16:
权重14B + KV Cache(8并发,seq 4096, 约16G) = 30G, 所以运行轻松。
3.3 再算:Llama-2-70B, FP16
- 权重约140GB, 单卡装不下权重本身,必须多卡或者量化。
4.回到考题:A100 80G 能部署多大模型
4.1 分析思路
步骤1:确定精度1(FP16 / FP8 / INT4),算出纯权重占用
步骤2:估算KV Cache (给定序列长度,并发数)
步骤3:加5%的框架开销
步骤4:看是否 小于80G
4.2 FP16场景
纯权重:A100 80G 下 FP16模型权重的理论上限 = 80G / 2 = 40B 参数。
但预留KV Cache空间之后:
|
场景 |
可行模型 |
|
低并发(seq=2048, 并发=1) |
最多 约34B (留12GB给 KV Cache) |
|
中并发(seq=4096, 并发=4) |
最多 约20B (留40GB给 KV Cache) |
|
高并发(seq=8192, 并发=8) |
最多 约13B (留54GB给 KV Cache) |
4.3 FP8 / INT8 场景(量化)
|
模型 |
FP16 权重 |
FP8 权重 |
省下的显存 |
能否单卡 A100 80G |
|
7B |
14 GB |
7 GB |
7 GB |
✅ 非常轻松 |
|
13B |
26 GB |
13 GB |
13 GB |
✅ 轻松 |
|
32B |
64 GB |
32 GB |
32 GB |
✅ 可跑,有空间给 KV Cache |
|
70B |
140 GB |
70 GB |
70 GB |
⚠️ 权重占满,KV Cache 极受限 |
|
72B |
144 GB |
72 GB |
72 GB |
⚠️ 同上 |
4.4 INT4 场景
|
模型 |
INT4 权重 |
能否单卡 A100 80G |
|
70B |
35 GB |
✅ 可跑,留 45 GB 给 KV Cache |
|
72B |
36 GB |
✅ 可跑 |
|
405B |
202.5 GB |
❌ 单卡不行,需 3 卡 |
5.量化到底能省多少显存?
5.1 省的比例
省显存 = 1 - (量化精度字节 / 原始精度字节)
|
转换 |
省显存比例 |
示例(70B 模型) |
|
FP32 → FP16 |
50% |
280 GB → 140 GB,省 140 GB |
|
FP16 → INT8 |
50% |
140 GB → 70 GB,省 70 GB |
|
FP16 → INT4 |
75% |
140 GB → 35 GB,省 105 GB |
|
FP32 → INT4 |
87.5% |
280 GB → 35 GB,省 245 GB |
5.2 量化不只省显存
- 显存带宽利用率提升:每 token 需要搬运的字节数减少 → decode 阶段加速(memory-bound 场景)。
- 吞吐提升:更小的模型 → 更大的 batch size。
- 精度损失:INT8 几乎无损,INT4 有轻微损失(可用 AWQ/GPTQ 缓解)。
6.多卡场景速算
|
GPU 组合 |
总显存 (FP16 可用) |
能跑的最大模型 |
|
2 × A100 80G |
160 GB |
70B FP16(权重 140 GB + 20 GB KV Cache) |
|
4 × A100 80G |
320 GB |
70B FP16(轻松,可高并发) |
|
8 × A100 80G |
640 GB |
405B FP16(权重 810 GB 不够)→ 需 INT8/INT4 或更多卡 |
|
1 × H100 80G |
80 GB |
同 A100,但推理更快(更高带宽) |
|
1 × H200 141G |
141 GB |
70B INT8(70 GB + 71 GB KV Cache,可高并发) |
更多推荐
所有评论(0)