W16A16SC稀疏量化
简介
此量化方式为浮点稀疏量化,对已有权重作如下两步操作:
- 稀疏:模型稀疏工具通过算法判断模型权重中每个元素对精度结果的重要性,并将模型权重中对最终精度影响小的权重值置零。
- 压缩:权重压缩工具将模型权重通过压缩算法进一步编码压缩,最大程度地降低权重体积,生成压缩后权重和索引文件。
- 压缩算法和硬件强相关,仅Atlas 300I Duo 推理卡支持浮点稀疏压缩量化。
- 仅支持Qwen3-32B。
稀疏后权重目录结构:├─ config.json ├─ quant_model_weights.safetensors ├─ quant_model_description.json ├─ tokenizer_config.json ├─ tokenizer.json └─ tokenizer.model
- 稀疏后产物包含:权重文件quant_model_weights.safetensors和权重描述文件quant_model_description.json。
- 目录中的其余文件为推理时所需的配置文件,不同模型略有差异。
以下展示了稀疏后权重描述文件quant_model_description.json中的部分内容:1 2 3 4 5 6 7 8 9 10
{ "model_quant_type": "W16A16S", "model.embed_tokens.weight": "FLOAT", "model.layers.0.self_attn.q_proj.weight": "W16A16S", "model.layers.0.self_attn.k_proj.weight": "W16A16S", "model.layers.0.self_attn.v_proj.weight": "W16A16S", "model.layers.0.self_attn.o_proj.weight": "W16A16S", "model.layers.0.self_attn.q_norm.weight": "FLOAT", "model.layers.0.self_attn.k_norm.weight": "FLOAT" }
压缩后权重目录结构:
├─ config.json ├─ part0-of-4 │ ├─ quant_model_weight_w16a16sc.safetensors │ └─ quant_model_description.json ├─ part1-of-4 │ ├─ quant_model_weight_w16a16sc.safetensors │ └─ quant_model_description.json ├─ part2-of-4 │ ├─ quant_model_weight_w16a16sc.safetensors │ └─ quant_model_description.json ├─ part3-of-4 │ ├─ quant_model_weight_w16a16sc.safetensors │ └─ quant_model_description.json ├─ tokenizer_config.json └─ tokenizer.json
压缩前会先加载权重,并进行多卡切分,压缩算法须在切分后的权重上执行。
以下展示了压缩后权重描述文件part0-of-4/quant_model_description.json中的部分内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
{ "model_quant_type": "W16A16SC", "model.embed_tokens.weight": "FLOAT", "transformer.h.0.attn.c_attn.weight": "W16A16SC", "transformer.h.0.attn.c_attn.index": "W16A16SC", "transformer.h.0.attn.c_attn.info": "W16A16SC", "transformer.h.0.attn.c_proj.weight": "W16A16SC", "transformer.h.0.attn.c_proj.index": "W16A16SC", "transformer.h.0.attn.c_proj.info": "W16A16SC", "transformer.h.0.attn.q_norm.weight": "FLOAT", "transformer.h.0.attn.k_norm.weight": "FLOAT", "transformer.h.0.attn.c_attn.weight.outdim": 2560, "transformer.h.0.attn.c_proj.weight.outdim": 5120, }
压缩后的MatMul权重相比稀疏新增了index和outdim,index用于复原权重,outdim用于还原输出维度。
图1 量化权重推理时流程
Tensor信息 |
weight |
quant_bias |
index |
|---|---|---|---|
dtype |
int8 |
float32 |
int8 |
shape |
[x] x的取值范围由压缩率决定 |
[n] |
[y] 存储非零元素的索引 |
生成权重
以Qwen3-32B为例:
- 使用以下指令生成W16A16S浮点稀疏权重。
msmodelslim quant --model_path ${浮点权重路径} --save_path ${W16A16SC量化权重保存路径} --device npu --model_type Qwen3-32B --quant_type w16a16s--trust_remote_code True- 以上指令包含生成Qwen3-32B W16A16S浮点稀疏权重的最优参数配置。
- 使用以下指令设置msModelSlim工具所在的Python路径环境变量,{Python Lib Path}为安装msmodelslim时编译步骤中所在的Python路径。
export LD_LIBRARY_PATH={Python Lib Path}/lib:$LD_LIBRARY_PATH - 使用以下指令对浮点稀疏权重进行压缩,生成W16A16SC量化权重。
torchrun --nproc_per_node {TP数} -m examples.convert.model_slim.sparse_compressor --model_path {W16A16S量化权重路径} --save_directory {W16A16SC量化权重路径}TP数为张量并行个数,需和权重运行时的张量并行个数保持一致。
执行推理
以Qwen3-32B为例,您可以使用以下指令执行对话测试,推理内容为"What's deep learning?"。
cd ${ATB_SPEED_HOME_PATH}
torchrun --nproc_per_node {TP数} -m examples.run_pa --model_path {W16A16SC量化权重路径}
父主题: 量化