跳转至

量化指南

模型量化是一种通过降低权重和激活的数值精度来减小模型尺寸并降低计算开销的技术,从而节省内存并提升推理速度。

vLLM Ascend 支持多种量化方法。本指南介绍如何使用不同的量化工具,并在 vLLM Ascend 上运行量化模型。

注意

您可以选择自行转换模型,或使用我们上传的量化模型。 参见 https://www.modelscope.cn/models/vllm-ascend/Kimi-K2-Instruct-W8A8。 在量化模型之前,请确保有足够的可用内存。

量化工具

vLLM Ascend 支持由两个主要量化工具量化的模型:ModelSlim 和 LLM-Compressor。

ModelSlim 是一款面向 Ascend 的压缩工具,专注于加速,采用压缩技术,并针对 Ascend 硬件构建。它包含量化和压缩等一系列推理优化技术,旨在加速大语言稠密模型、MoE 模型、多模态理解模型、多模态生成模型等。

安装

若要使用 ModelSlim 进行模型量化,请从其 Git 仓库 安装:

# Install 26.0.0 version, this is currently the latest stable branch
git clone https://gitcode.com/Ascend/msmodelslim.git -b 26.0.0

cd msmodelslim

bash install.sh

模型量化

以下示例展示了如何为 Qwen3-MoE 模型 生成 W8A8 量化权重。

量化脚本:

cd example/Qwen3-MOE

# Support multi-card quantization
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:False

# Set model and save paths
export MODEL_PATH="/path/to/your/model"
export SAVE_PATH="/path/to/your/quantized_model"

# Run quantization script
python3 quant_qwen_moe_w8a8.py --model_path $MODEL_PATH \
--save_path $SAVE_PATH \
--anti_dataset ../common/qwen3-moe_anti_prompt_50.json \
--calib_dataset ../common/qwen3-moe_calib_prompt_50.json \
--trust_remote_code True

量化完成后,输出目录中将包含量化模型文件。

更多示例请参考官方示例。

2. LLM-Compressor

LLM-Compressor 是一个用于加速 vLLM 推理的统一压缩模型库。

安装

pip install llmcompressor

模型量化

LLM-Compressor 提供了多种量化方案示例。

稠密量化

一个为稠密模型生成 W8A8 动态量化权重的示例:

# Navigate to LLM-Compressor examples directory
cd examples/quantization/llm-compressor

# Run quantization script
python3 w8a8_int8_dynamic.py
MoE 量化

一个为 MoE 模型生成 W8A8 动态量化权重的示例:

# Navigate to LLM-Compressor examples directory
cd examples/quantization/llm-compressor

# Run quantization script
python3 w8a8_int8_dynamic_moe.py

更多内容请参考官方示例。

LLM-Compressor 当前支持的量化类型可在 vllm_ascend/quantization/compressed_tensors_config.py 文件中查看。

3. 原生 FP8 检查点(无需量化步骤)

许多模型现在直接以 FP8 格式发布,例如 Qwen/Qwen3.8-27B-FP8 和 zai-org/GLM-5.3-Flash。它们的 config.json 中包含 "quant_method": "fp8" 以及 weight_block_size,这意味着每个量化权重都以 float8_e4m3fn 存储,并且每个权重块附带一个 float32 缩放系数。vLLM Ascend 会检测并按发布状态提供这些检查点,因此无需离线重新量化:

vllm serve /path/to/Qwen3.8-27B-FP8 --trust-remote-code
vllm serve /path/to/GLM-5.3-Flash --tensor-parallel-size 8 --trust-remote-code

权重的执行方式取决于硬件:

  • 950PR&950DT 产品:块缩放在加载时重新分组为 MXFP8,因此权重保持每个元素一个字节,并使用原生 FP8 矩阵乘法。
  • 其他 Ascend 代际:块缩放在加载时解析为模型数据类型,并由 BF16 矩阵乘法提供服务。数值上与检查点等效,但请预留大约两倍的权重内存。

检查点中未量化的层(例如多模态模型中的 visual.merger.*)会列在 ignored_layers 或 modules_to_not_convert 中,并以未量化方式提供服务。

目前仅支持按块量化的形式。没有 weight_block_size 的原生 FP8 检查点(按张量或按通道缩放)尚无 Ascend 执行路径;请改用 ModelSlim 或 LLM-Compressor 重新量化。

运行量化模型

一旦您拥有由 ModelSlim 生成的量化模型,就可以通过指定 --quantization ascend 参数来启用量化功能,并使用 vLLM Ascend 进行推理;而对于由 LLM-Compressor 量化的模型,则无需添加此参数。

离线推理

import torch

from vllm import LLM, SamplingParams

prompts = [
    "Hello, my name is",
    "The future of AI is",
]
# Set sampling parameters
sampling_params = SamplingParams(temperature=0.6, top_p=0.95, top_k=40)

llm = LLM(model="/path/to/your/quantized_model",
          max_model_len=4096,
          trust_remote_code=True,
          # Set appropriate TP and DP values
          tensor_parallel_size=2,
          data_parallel_size=1,
          # Set an unused port
          port=8000,
          # Set serving model name
          served_model_name="quantized_model",
          # Specify `quantization="ascend"` to enable quantization for models quantized by ModelSlim
          quantization="ascend")

outputs = llm.generate(prompts, sampling_params)
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

在线推理

# Corresponding to offline inference
python -m vllm.entrypoints.api_server \
    --model /path/to/your/quantized_model \
    --max-model-len 4096 \
    --port 8000 \
    --tensor-parallel-size 2 \
    --data-parallel-size 1 \
    --served-model-name quantized_model \
    --trust-remote-code 

参考资料

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 vl/vllm-ascend