计算服务 LLM 所需的 GPU 显存
如果你计划自托管一个 LLM,你首先需要估算的事情之一就是它需要多少 GPU 显存(VRAM)。
在 LLM 推理期间,模型权重必须驻留在 GPU 显存中,以便模型服务请求。这个固定的基线主要取决于模型的规模和权重所用的精度。
- 模型规模(参数量)。模型越大,需要的显存越多。具有数百亿或数千亿参数的模型通常需要 NVIDIA H100 或 H200 这样的高端 GPU。
- 位精度。所使用的精度(如 FP16、FP8、INT8)会影响显存消耗。较低精度的格式可以显著减少显存占用,但可能会影响准确性。对于 Hugging Face 上的模型,你通常可以在
config.json文件中找到权重数据类型。torch_dtype属性指示了模型权重所使用的精度。有关详细信息,请参阅 LLM 量化。
权重显存并不是服务需求的全部。例如,一个 FP16 的 7B 模型仅权重就需要大约 14 GB,因此它也许能加载到 16 GB 的 GPU 上。然而,这并不意味着该 GPU 有足够的余量用于生产推理。单个短请求也许可行,但更长的提示词、更大的批次或更多的并发用户会迅速耗尽剩余显存。
KV 缓存通常是最大的运行时开销。它存储注意力的键和值,以便模型在解码期间重用之前的 token,而不是重新计算它们。缓存会随着序列长度和活动请求数而增长。服务引擎还需要显存用于临时激活、工作区缓冲区、框架分配,有时还包括 CUDA graphs。如果你在权重之外只留下极少的 GPU 显存,那么你只能处理短上下文、小批次和低并发。
估算服务显存的一个粗略公式是:
Memory (GB) = P * (Q / 8) * (1 + Overhead)
- P: 参数量(以十亿为单位)
- Q: 位精度(如 16、32),除以 8 将位转换为字节
- Overhead(%): 权重之外额外的服务显存,如 KV 缓存、激活缓冲区、工作区显存,以及框架/运行时预留
基于百分比的额外开销是一种快速估容的捷径,而非精确的容量模型。KV 缓存显存取决于序列长度、批次大小、并发度、层数和隐藏维度,因此长上下文工作负载可能需要比简单的 10–30% 估算多得多的余量。
使用下面的计算器来估算你的模型的 GPU 显存需求:
备注
并非所有 GPU 都原生支持所有精度格式。A100 和其他 Ampere GPU 支持 INT8,但在硬件上不支持 FP8。原生 FP8 需要 Hopper、Ada 或更新的架构。如果你的推理栈依赖 FP8 内核,请确保你的 GPU 支持它们。一些 4-bit 模型使用 INT4 量化,而原生 FP4 支持依赖于更新的架构和软件栈。