量化指南#

模型量化是一种通过降低模型中权重和激活值的数据精度,从而减少模型大小和计算需求的技术,这样可以节省内存并提高推理速度。

自 0.9.0rc2 版本起,vLLM Ascend 实验性地支持量化特性。用户可以通过指定 --quantization ascend 启用量化功能。目前,只有 Qwen、DeepSeek 系列模型经过充分测试。未来我们将支持更多量化算法和模型。

安装 ModelSlim#

要对模型进行量化,用户应安装 ModelSlim,这是昇腾的压缩与加速工具。它是一种基于亲和性的压缩工具,专为加速设计,以压缩为核心技术,并基于昇腾平台构建。

安装 ModelSlim:

# The branch(br_release_MindStudio_8.1.RC2_TR5_20260624) has been verified
git clone -b br_release_MindStudio_8.1.RC2_TR5_20260624 https://gitee.com/ascend/msit

cd msit/msmodelslim

bash install.sh
pip install accelerate

量化模型#

备注

你可以选择自行转换模型,或使用我们上传的量化模型,详见 https://www.modelscope.cn/models/vllm-ascend/Kimi-K2-Instruct-W8A8。该转换过程需要较大的 CPU 内存,请确保 RAM 大小超过 2 TB。

适应变化#

  1. 昇腾不支持 flash_attn 库。要运行模型,你需要按照 指南 注释掉权重文件夹中 modeling_deepseek.py 的部分代码。

  2. 当前版本的 transformers 不支持加载 FP8 量化格式的权重,你需要按照 指南 删除权重文件夹中 config.json 中的量化相关字段。

生成 W8A8 权重#

cd example/DeepSeek

export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:False
export MODEL_PATH="/root/.cache/Kimi-K2-Instruct"
export SAVE_PATH="/root/.cache/Kimi-K2-Instruct-W8A8"

python3 quant_deepseek_w8a8.py --model_path $MODEL_PATH --save_path $SAVE_PATH --batch_size 4

以下是完整转换后的模型文件(不含 safetensors):

.
|-- config.json
|-- configuration.json
|-- configuration_deepseek.py
|-- generation_config.json
|-- modeling_deepseek.py
|-- quant_model_description.json
|-- quant_model_weight_w8a8_dynamic.safetensors.index.json
|-- tiktoken.model
|-- tokenization_kimi.py
`-- tokenizer_config.json

运行模型#

现在,你可以使用 vLLM Ascend 运行量化模型。下面提供在线和离线推理示例:

离线推理#

import torch

from vllm import LLM, SamplingParams

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

llm = LLM(model="{quantized_model_save_path}",
          max_model_len=2048,
          trust_remote_code=True,
          # Enable quantization by specifying `quantization="ascend"`
          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}")

在线推理#

通过指定 --quantization ascend 来启用量化,更多详情请参见 DeepSeek-V3-W8A8 教程

常见问题解答#

1. How to solve the KeyError "xxx.layers.0.self_attn.q_proj.weight"?#

首先,请确保你指定了 ascend 量化方法。其次,检查你的模型是否由 br_release_MindStudio_8.1.RC2_TR5_20260624 ModelSlim 版本转换。最后,如果仍然无法使用,请提交 issue,可能有一些新模型需要适配。

2. How to solve the error "Could not locate the configuration_deepseek.py"?#

请使用 br_release_MindStudio_8.1.RC2_TR5_20260624 ModelSlim 转换 DeepSeek 系列模型,该版本已修复缺少 configuration_deepseek.py 的错误。

3. What should be considered when converting DeepSeek series models with ModelSlim?#

当权重的 MLA 部分使用 W8A8_DYNAMIC 量化且启用了 torchair 图模式时,请修改 CANN 包中的配置文件以防止推理结果错误。

操作步骤如下:

  1. 在 CANN 包目录中搜索,例如:find /usr/local/Ascend/ -name fusion_config.json

  2. "AddRmsNormDynamicQuantFusionPass":"off","MultiAddRmsNormDynamicQuantFusionPass":"off", 添加到你找到的 fusion_config.json 文件中,位置如下:

{
    "Switch":{
        "GraphFusion":{
            "AddRmsNormDynamicQuantFusionPass":"off",
            "MultiAddRmsNormDynamicQuantFusionPass":"off",