vLLM FP8 量化部署与精度验证

本文说明如何核对 FP8 硬件兼容性,用独立环境生成 FP8_DYNAMIC 或在加载时启用 FP8,再按固定 BOS 设置、业务样本和原模型基线完成精度与性能验证流程。

完成 vLLM FP8 部署要同时处理硬件路径、模型生成或加载、服务启动和精度验证;服务能够启动,只能说明部署链路可运行,不能替代精度对照。执行时以 vllm 官方快速开始给出的 Linux、Python 3.10 至 3.13 环境为入口;--torch-backend=auto 会根据已安装的 CUDA driver 选择 PyTorch index。量化是用模型精度换取更小内存占用的取舍,vLLM 的量化说明明确列出了这一关系,因此部署成功与精度合格应分开验收。

部署前核对 FP8 硬件边界

在 vLLM 量化兼容表中,llm-compressor FP8 (W8A8) 行明确标为支持的列是 Ada、Hopper 和 AMD GPU;其中 Ada 对应 SM 8.9,Hopper 对应 SM 9.0。该表会随硬件和量化支持变化而更新,启动前应查看源目录中的最新状态,不要仅凭模型名称中的 FP8 判断兼容性。

先创建独立环境并安装 vLLM:

uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto

租用 GPU 时,应先记录具体 GPU 型号和计算能力,再对照兼容表;不要把“支持量化”理解为任意 GPU 都能运行任意 W8A8 模式。

生成或在线启用 FP8

按 vLLM 的 FP8 W8A8 流程,vLLM 与 llm-compressor 应使用不同的 Python 环境;量化环境通过 pip 安装 llmcompressor,推荐的 FP8_DYNAMIC 配方覆盖全部 Linear 层并忽略 lm_head,不需要 calibration data,保存后的本地目录可直接传给 LLM,而 BF16/FP16 模型也可在加载时使用 fp8_per_tensor 启用在线 FP8。

在量化环境中安装依赖:

pip install llmcompressor

官方配方核心如下:

recipe = QuantizationModifier(
    targets="Linear",
    scheme="FP8_DYNAMIC",
    ignore=["lm_head"],
)

这只是量化策略,不是完整脚本;执行时还需按官方当前示例衔接模型加载、Modifier 调用和保存步骤。保存后,在部署环境中把实际输出目录传给 LLM:

llm = LLM("./Meta-Llama-3-8B-Instruct-FP8-Dynamic")

如果直接从 BF16/FP16 模型在线量化,把 YOUR_VALUE 替换为模型名称或本地目录:

vllm serve YOUR_VALUE --quantization="fp8_per_tensor"

设置显存、上下文和批处理边界

在 命令行参数参考中,--gpu-memory-utilization 表示当前实例供模型执行器使用的 GPU 显存比例,取值范围为 0 到 1,未指定时使用 0.92。这个限制按实例生效,因此不能把两张卡上的两个实例视为共享同一个比例上限。

同页的 上下文与批处理参数规定,--max-model-len 覆盖 prompt 与 output 的总长度;未设置时从模型配置读取,设为 -1 或 auto 时选择当前 GPU 内存可容纳的最大长度。--max-num-seqs 限制单次迭代处理的 sequences,--max-num-batched-tokens 限制单次迭代处理的 tokens。你应按真实输入长度和并发量设置边界,不要直接照搬他人的参数值。

如果仍需排查显存,可按 vLLM 的内存指南先检查 max_model_len 和 max_num_seqs,并通过 CUDA_VISIBLE_DEVICES 控制设备。每次只增加一个参数,更容易判断是哪项设置改变了可运行范围。

用 vllm 检查服务

根据 服务监听与模型列表说明,服务默认监听 http://localhost:8000,可用 --host 和 --port 修改地址;单个服务进程当前只托管一个模型。

加载预生成的 FP8 目录:

vllm serve YOUR_VALUE

另开终端检查模型列表:

curl http://localhost:8000/v1/models

能够取得模型列表,只能证明 HTTP 服务和模型实例已就绪。不要把这个响应当作生成质量或任务精度已经合格的证据。

精度验证:固定 BOS 后做同条件对照

FP8 精度注意事项指出,量化模型可能对 bos token 的存在较敏感,而 lm_eval 默认不会添加它,因此评测时应传入:

add_bos_token=True

精度验证可按以下顺序设计:

  • 先固定一组未参与调整的代表性业务样本,覆盖核心任务和高频边界情况,并提前写好输入、输出解析和评分规则。
  • 在环境允许时,对原 BF16/FP16 模型与 FP8 模型使用相同 tokenizer、prompt 模板、生成设置和评分脚本;一次只改变量化方式。
  • 同时记录任务级指标和样本级差异,区分截断、格式变化、拒答及内容错误,避免只用一个平均分掩盖局部退化。
  • 性能另做一组固定输入与并发的记录,区分启动时间、请求延迟、吞吐和峰值显存;官方文档中的说明不能替代你在目标机器上取得的结果。
  • 如果结果下降,先确认 add_bos_token=True 是否生效,再检查 tokenizer、prompt、生成参数和评分脚本是否一致。

常见出错点

排查时按最短路径处理:

  • FP8 模型无法加载:重新核对 GPU 型号、量化环境和实际保存目录。
  • 服务能启动但很快遇到资源边界:先恢复基础启动参数,再逐项加入上下文、并发和显存设置。
  • 模型可用但精度下降:先检查 BOS 设置,再检查基线与 FP8 运行条件是否一致。
  • 只验证了 /v1/models:继续完成实际生成和业务样本对照,不要提前给出验收结论。

本文步骤按正文所链接的官方文档整理,未运行或测量;使用前应按当前版本复核。