QLean模型量化工具 (v0.1.0)

更新时间:
复制为 MD 格式

概述

本量化工具提供易用、高效的模型量化与反量化能力。用户只需通过指定不同的配置文件(Recipe),即可一键切换功能模式。当前支持的功能包括:

  • FP8 → BF16 反量化:将 FP8 格式的模型权重恢复为 BF16 精度,便于调试或后续处理。

  • W8A8-INT8 量化:对模型进行权重量化(W8)与激活量化(A8),输出标准 INT8 量化模型。

  • 混合量化:根据模型结构对 W8A8 模型部分层保留高精度,在精度与性能间取得更优平衡。

支持一键量化的模型

原始

反量化(FP8->BF16)

量化(->W8A8 int8)

DeepSeek

DeepSeek-V3.1

FP8

Y

Y

DeepSeek-V3.1-Terminus

FP8

Y

Y

DeepSeek-V3.2-Exp

FP8

Y

Y

DeepSeek-R1

FP8

Y

Y

DeepSeek-R1-0528

FP8

Y

Y

Qwen3-MOE

Qwen3-235B-A22B

BF16

NA

Y(混合量化)

Qwen3-235B-A22B-Instruct-2507

BF16

NA

Y(混合量化)

Qwen3-Coder-480B-A35B-Instruct

BF16

NA

Y(混合量化)

Qwen3-Next

Qwen3-Next-80B-A3B-Instruct

BF16

NA

Y

Qwen3-VL

Qwen3-VL-235B-A22B-Instruct

BF16

NA

Y

Qwen3-VL-30B-A3B-Instruct

BF16

NA

Y

Qwen3-VL-32B/8B/4B/2B-Instruct

BF16

NA

Y

工具使用

已发布whl包,可在PIPList中查看并通过pip install方式使用。

安装

# 安装依赖
pip install triton_kernel==1.0.0+ppu2.0.0.oe

# 安装qlean
pip install qlean==0.1.0+ppu2.0.0.oe

参数介绍

  • --model_name:模型名称。必须,要求格式与HuggingFace上的model_stub一致,例如“deepseek-ai/DeepSeek-V3.2-Exp”。

  • --model_path:原始模型路径。必须,要求输入本地路径,例如HuggingFace模型本地缓存路径。

  • --save_path:反量化/量化后得到的模型路径。必须。

  • --mix_path:混合量化模型路径。非必须。

  • --recipe:量化配置文件路径。非必须,要求是yaml文件路径。

    • 对于“支持一键量化的模型”表中的模型,用户可省略 recipe 参数,系统将自动加载。

    • 对于其他模型,用户需手动编写并提供 recipe 参数(关于 recipe 的编写方法,见“Recipe编写”部分)。

功能

用户通过输入不同的recipe切换功能,下面对于不同功能给出操作样例:

  1. W8A8-INT8 量化

    原始模型可为FP8BF16格式,系统会根据原始模型的精度类型自动选择适配策略:若模型为FP8格式,自动切换至更精确的量化模式;若模型为BF16格式,使用通用量化模式。

    # /path/to/.../ 请根据实际进行修改
    
    # 原始模型为FP8
    qlean --model_name deepseek-ai/DeepSeek-R1-0528 --model_path /path/to/DeepSeek-R1-0528/ --save_path /path/to/DeepSeek-R1-0528-INT8/
    
    # 原始模型为BF16
    qlean --model_name Qwen/Qwen3-VL-30B-A3B-Instruct --model_path /path/to/Qwen3-VL-30B-A3B-Instruct/ --save_path /path/to/Qwen3-VL-30B-A3B-Instruct-INT8/
  2. FP8 → BF16 反量化

    # /path/to/.../ 请根据实际进行修改
    qlean --model_name deepseek-ai/DeepSeek-V3.2 --model_path /path/to/DeepSeek-V3.2/ --save_path /path/to/DeepSeek-V3.2-BF16/ --recipe /path/to/dequant.yaml
    # dequant.yaml 内容
    ---
    dequant_stage:
      dequant_modifiers:
        dequantModifier: {}
    ...
  3. 混合量化

    在 W8A8-INT8 量化后,部分模型在特定用例上出现精度下降问题,原因可能为模型某些 layer 对精度敏感,可用混合量化功能将 W8A8 量化模型中的指定layer替换回 BF16 版本。此时,save_path 对应 W8A8 模型,mix_path 保存混合量化模型。

    # /path/to/.../ 请根据实际进行修改
    qlean --model_name Qwen/Qwen3-235B-A22B-Instruct-2507 --model_path /path/to/Qwen3-235B-A22B-Instruct-2507/ --save_path /path/to/Qwen3-235B-A22B-Instruct-2507-INT8/ --mix_path /path/to/Qwen3-235B-A22B-Instruct-2507-MIX/

Recipe编写

若需对“支持一键量化的模型”表外的模型进行W8A8-INT8 量化,用户可参考以下 recipe 编写 YAML 文件,仅需改动ignore部分。

---
quant_stage:
  quant_modifiers:
    generalDay0Modifier:
      ignore: ["module_to_ignore"] # 请根据实际进行修改
      scheme: W8A8
...

在编写量化配置中的ignore列表时,应加入所有对于量化敏感的模块。通常不应量化的模块包括:re:.*lm_headre:.*embed_tokensre:.*mlp.gate$。注意,不同架构的模型需要 ignore 的模块不同,应当按需添加。

若需对“支持一键量化的模型”表外的模型进行 混合量化,用户需在上述 recipe 基础上额外增加 mixedPrecisionModifier 部分。layers 给出需要替换为 BF16 的layer id,num_layers 给出模型的总层数。

---
quant_stage:
  quant_modifiers:
    generalDay0Modifier:
      ignore: ["re:.*lm_head", "re:.*embed_tokens", "re:.*mlp.gate$"] # 请根据实际进行修改
      scheme: W8A8
    mixedPrecisionModifier:
      layers: ['88', '89', '92-93']  # 请根据实际进行修改
      num_layers: 94                 # 请根据实际进行修改
...

编写完 YAML 文件后使用 --recipe 参数传入该文件地址。

# /name/of/.../和/path/to/.../ 请根据实际进行修改
qlean --model_name /name/of/model/ --model_path /path/to/original_model/ --save_path /path/to/result_model/ --recipe /path/to/your/recipe/

使用样例:DeepSeek-V3.2 进行 W8A8-INT8 量化

step1 编写 deepseek-v3.2-recipe.yaml。

---
quant_stage:
  quant_modifiers:
    generalDay0Modifier:
      ignore: ["re:.*lm_head", "re:.*embed_tokens", "re:.*mlp.gate$"]
      scheme: W8A8
...

step2 输入模型名称、原始模型路径和量化模型路径,进行W8A8-INT8 量化。

qlean --model_name deepseek-ai/DeepSeek-V3.2 --model_path /path/to/DeepSeek-V3.2/ --save_path /path/to/DeepSeek-V3.2-INT8/ --recipe /path/to/deepseek-v3.2-recipe.yaml 

测试数据

测试结果表明,经 QLean 工具转化的模型在推理精度和性能方面均正常,符合预期。具体数据如下所示:

Sglang推理精度

测试镜像信息:pytorch2.8.0-ubuntu24.04-cuda12.9-sglang0.5.5-py312

Model

DataSet

真武810E上原始权重精度

QLean量化工具转化后权重精度

Compare Ratio

data_type

Eval

data_type

Eval

deepseek-ai/DeepSeek-V3.2

ifeval

W8A8-INT8

88.5

W8A8-INT8

88.1

99.55%

gsm8k

W8A8-INT8

95.3

W8A8-INT8

96.3

101.05%

ceval

W8A8-INT8

92.1

W8A8-INT8

91.0

98.81%

deepseek-ai/DeepSeek-R1-0528

ifeval

BF16

80.2

BF16

81.8

102.00%

gsm8k

BF16

96.1

BF16

96.7

100.62%

ceval

BF16

89.6

BF16

90.1

100.56%

deepseek-ai/DeepSeek-R1-0528

ifeval

W8A8-INT8

81.7

W8A8-INT8

81.5

99.76%

gsm8k

W8A8-INT8

96.3

W8A8-INT8

96.4

100.10%

ceval

W8A8-INT8

89.8

W8A8-INT8

90.2

100.45%

Qwen/Qwen3-235B-A22B-Instruct-2507

ifeval

BF16

87.2

W8A8-INT8 混合量化

88.1

101.03%

gsm8k

BF16

96.6

W8A8-INT8 混合量化

96.4

99.79%

ceval

BF16

91.8

W8A8-INT8 混合量化

91.0

99.13%

注:由于真武810E不支持FP8,所以对于原始权重为FP8的情况,使用当前测试的W8A8权重作为对比。

vLLM推理精度

测试镜像信息:pytorch2.9.0-ubuntu24.04-cuda12.9-vllm0.12.0-py312

Model

DataSet

真武810E上原始权重精度

QLean量化工具转化后权重精度

Compare Ratio

data_type

Eval

data_type

Eval

deepseek-ai/DeepSeek-V3.2

ifeval

W8A8-INT8

86.5

W8A8-INT8

88.5

102.3%

gsm8k

W8A8-INT8

95.6

W8A8-INT8

96.0

100.4%

ceval

W8A8-INT8

91.4

W8A8-INT8

91.3

99.9%

deepseek-ai/DeepSeek-R1-0528

ifeval

BF16

79.1

BF16

80.5

101.8%

gsm8k

BF16

96.2

BF16

96.7

100.5%

ceval

BF16

89.6

BF16

91.3

101.9%

deepseek-ai/DeepSeek-R1-0528

ifeval

W8A8-INT8

79.8

W8A8-INT8

79.6

99.7%

gsm8k

W8A8-INT8

96.2

W8A8-INT8

96.7

100.5%

ceval

W8A8-INT8

90.1

W8A8-INT8

90.0

99.9%

Qwen/Qwen3-235B-A22B-Instruct-2507

ifeval

BF16

88.5

W8A8-INT8 混合量化

87.2

98.5%

gsm8k

BF16

96.8

W8A8-INT8 混合量化

96.5

99.7%

ceval

BF16

90.6

W8A8-INT8 混合量化

91.2

100.7%

mmlu_pro

BF16

79.5

W8A8-INT8 混合量化

79.2

99.6%

Qwen/Qwen3-Next-80B-A3B-Instruct

ifeval

BF16

87.2

W8A8-INT8

87.4

100.2%

gsm8k

BF16

96.5

W8A8-INT8

96.2

99.7%

ceval

BF16

90.6

W8A8-INT8

90.2

99.6%

mmlu_pro

BF16

81.2

W8A8-INT8

81.3

100.1%

Qwen/Qwen3-VL-30B-A3B-Instruct

mvbench

BF16

66.1

W8A8-INT8

65.8

99.5%

ifeval

BF16

84.8

W8A8-INT8

85.2

100.5%

gsm8k

BF16

96.0

W8A8-INT8

96.0

100.0%

ceval

BF16

84.9

W8A8-INT8

84.4

99.4%

注:由于真武810E不支持FP8,所以对于原始权重为FP8的情况,使用当前测试的W8A8权重作为对比。

Sglang性能

测试镜像信息:pytorch2.8.0-ubuntu24.04-cuda12.9-sglang0.5.5-py312

Model

input_len

output_len

原始权重性能数据

QLean所转权重的性能数据

Compare Ratio

datatype

TP

并发数

操作数

Total Throughput /s/card

Output Throughput /s/card

ttft (ms)

tpot (ms)

datatype

TP

并发数

操作数

Total Throughput /s/card

Output Throughput /s/card

ttft (ms)

tpot (ms)

deepseek-ai/DeepSeek-V3.2

800-1000

300-500

W8A8-INT8

8

32

320

56.286

17.762

1479.319

100.041

W8A8-INT8

8

30

300

55.364

17.444

1364.088

100.625

98.4%

deepseek-ai/DeepSeek-R1-0528

2800-5200

1050-1950

BF16

16

13

130

76.078

20.745

668.408

36.507

BF16

16

13

130

76.063

20.741

670.283

36.53

100.0%

2800-5200

1050-1950

W8A8-INT8

8

13

130

132.563

36.148

639.606

42.055

W8A8-INT8

8

13

130

132.123

36.028

638.907

42.18

99.7%

Qwen/Qwen3-235B-A22B-Instruct-2507

2800-5200

1050-1950

BF16

8

106

1060

489.726

133.54

2780.778

92.187

W8A8-INT8 混合量化

4

95

950

832.724

227.071

2337.891

97.278

170.0%

Qwen/Qwen3-VL-30B-A3B-Instruct

2800-5200

1050-1950

BF16

2

72

720

2615.439

713.185

431.293

47.78

W8A8-INT8

2

98

980

3371.56

919.365

430.125

50.481

128.9%

注:由于真武810E不支持FP8,所以对于原始权重为FP8的情况,使用当前测试的W8A8权重作为对比。

vLLM性能

测试镜像信息:pytorch2.9.0-ubuntu24.04-cuda12.9-vllm0.12.0-py312

Model

input_len

output_len

原始权重性能数据

QLean所转权重的性能数据

Compare Ratio

datatype

TP

并发数

操作数

Total Throughput /s/card

Output Throughput /s/card

ttft (ms)

tpot (ms)

datatype

TP

并发数

操作数

Total Throughput /s/card

Output Throughput /s/card

ttft (ms)

tpot (ms)

deepseek-ai/DeepSeek-V3.2

800-1000

300-500

W8A8-INT8

8

39

390

72.259

22.777

804.091

100.271

W8A8-INT8

8

40

400

72.506

22.845

947.792

98.14

100.3%

deepseek-ai/DeepSeek-R1-0528

2800-5200

1050-1950

BF16

16

28

280

107.755

29.382

2371.914

55.35

BF16

16

26

260

105.566

28.786

589.644

53.167

98.0%

W8A8-INT8

8

28

280

194.585

53.059

2652.877

61.402

W8A8-INT8

8

26

260

191.23

52.145

686.914

58.728

98.3%

Qwen/Qwen3-235B-A22B-Instruct-2507

2800-5200

1050-1950

BF16

8

120

1200

507.971

138.515

2690.231

100.796

W8A8-INT8 混合量化

4

104

1040

899.99

245.412

956.795

98.988

177.2%

Qwen/Qwen3-VL-30B-A3B-Instruct

2800-5200

1050-1950

BF16

2

82

820

2822.723

769.657

321.365

50.33

W8A8-INT8

2

104

1040

3628.596

988.915

287.425

49.591

128.5%

注:由于真武810E不支持FP8,所以对于原始权重为FP8的情况,使用当前测试的W8A8权重作为对比。

已知问题

  • Qwen3-Next系列模型架构较新,经过W8A8-INT8量化后,在vllm上的性能待优化,在高版本sglang上暂不支持。

  • DeepSeek-V3.2反量化模型,框架暂未支持。