I
站方编辑 · Staff
“我的显卡能不能跑这个模型?”这是算力版最高频的问题。下面给出一个简单的估算方法,帮助大家在部署前心里有数。
【一、模型权重】
显存 ≈ 参数量 × 每个参数的字节数。
- FP16 / BF16:2 字节/参数。7B 模型约 14 GB。
- INT8:约 1 字节/参数。7B 模型约 7 GB。
- INT4:约 0.5 字节/参数,加上量化缩放系数等开销,7B 模型大约 4 GB 左右。
这只是权重本身,实际运行还需要更多。
【二、KV Cache】
生成时每个 token 都要缓存各层的 Key 和 Value,公式:
KV Cache ≈ 2 × 层数 × KV 头数 × 每头维度 × 每元素字节数 × 序列长度 × 并发数
要点:
- 随上下文长度和并发数线性增长,长上下文、高并发时可能超过权重本身。
- 使用 GQA/MQA 的模型 KV 头数少,KV Cache 显著更小,这也是很多新模型采用它的原因。
- 部分推理框架支持 KV Cache 量化(如 FP8),可以进一步节省显存,但需验证质量。
具体层数、头数等参数可在模型的 config.json 中查到。
【三、其他开销】
- 激活值与临时缓冲区。
- CUDA 上下文与框架本身的占用。
- 部分框架会预先占用一定比例的显存作为 KV Cache 池(例如 vLLM 的 gpu_memory_utilization 参数),所以“显存占满”不一定代表不够用。
经验上,在权重 + KV Cache 之外预留一些余量更稳妥。
【四、显存不够怎么办】
1. 量化:INT8/INT4 权重量化。
2. 降低最大上下文长度或并发数。
3. 张量并行(Tensor Parallel):把模型拆到多张卡上,注意卡间互联带宽会影响速度。
4. CPU/内存卸载(offload):能跑起来,但速度会明显下降。
【五、常见坑】
- 只算权重,忽略 KV Cache,上线后高并发时显存溢出(OOM)。
- 混淆 GB 与 GiB,估算偏差。
讨论:
1. 你在估算显存时,通常预留多少余量?
2. 多卡部署时,你们遇到过哪些互联带宽相关的瓶颈?
【一、模型权重】
显存 ≈ 参数量 × 每个参数的字节数。
- FP16 / BF16:2 字节/参数。7B 模型约 14 GB。
- INT8:约 1 字节/参数。7B 模型约 7 GB。
- INT4:约 0.5 字节/参数,加上量化缩放系数等开销,7B 模型大约 4 GB 左右。
这只是权重本身,实际运行还需要更多。
【二、KV Cache】
生成时每个 token 都要缓存各层的 Key 和 Value,公式:
KV Cache ≈ 2 × 层数 × KV 头数 × 每头维度 × 每元素字节数 × 序列长度 × 并发数
要点:
- 随上下文长度和并发数线性增长,长上下文、高并发时可能超过权重本身。
- 使用 GQA/MQA 的模型 KV 头数少,KV Cache 显著更小,这也是很多新模型采用它的原因。
- 部分推理框架支持 KV Cache 量化(如 FP8),可以进一步节省显存,但需验证质量。
具体层数、头数等参数可在模型的 config.json 中查到。
【三、其他开销】
- 激活值与临时缓冲区。
- CUDA 上下文与框架本身的占用。
- 部分框架会预先占用一定比例的显存作为 KV Cache 池(例如 vLLM 的 gpu_memory_utilization 参数),所以“显存占满”不一定代表不够用。
经验上,在权重 + KV Cache 之外预留一些余量更稳妥。
【四、显存不够怎么办】
1. 量化:INT8/INT4 权重量化。
2. 降低最大上下文长度或并发数。
3. 张量并行(Tensor Parallel):把模型拆到多张卡上,注意卡间互联带宽会影响速度。
4. CPU/内存卸载(offload):能跑起来,但速度会明显下降。
【五、常见坑】
- 只算权重,忽略 KV Cache,上线后高并发时显存溢出(OOM)。
- 混淆 GB 与 GiB,估算偏差。
讨论:
1. 你在估算显存时,通常预留多少余量?
2. 多卡部署时,你们遇到过哪些互联带宽相关的瓶颈?