已关闭
add Qwen3 32B V1 W8A8 quant and docs #4814
panyj1993创建于 2025年12月11日关闭于 4月7日
add Qwen3 32B V1 W8A8 quant and docs #4814
已关闭
共 2 个文件变更+94-41
| @@ -1,7 +1,6 @@ | |||
| 1 | # 一键量化快速入门 | 1 | # 一键量化快速入门 |
| 2 | 2 | ||
| 3 | -一键量化功能面向零基础用户,集成热门开源模型量化功能,具备“开箱即用”的特性。本功能支持全局调用量化命令,用户指定必要参数后,即可对目标原始权重执行指定的量化操作。 | 3 | +一键量化功能面向零基础用户,集成热门开源模型量化功能,具备“开箱即用”的特性。本功能支持全局调用量化命令,用户指定必要参数后,即可对目标原始权重执行指定的量化操作。下面将以 Qwen3-32B W8A8量化 为例进行介绍。 |
| 4 | -下面将以 Qwen2.5-7B-Instruct 为例进行介绍。 | ||
| 5 | 4 | ||
| 6 | ## 前置条件 | 5 | ## 前置条件 |
| 7 | 6 | ||
| @@ -11,37 +10,76 @@ | |||
| 11 | 10 | ||
| 12 | ### 2.下载大模型原始浮点权重 | 11 | ### 2.下载大模型原始浮点权重 |
| 13 | 12 | ||
| 14 | -以 Qwen2.5-7B-Instruct 为例,可前往[Qwen2.5-7B-Instruct](https://huggingface.co/Qwen/Qwen2.5-7B-Instruct)获取原始模型权重。 | 13 | +以 Qwen3-32B 为例,可前往[Qwen3-32B](https://huggingface.co/Qwen/Qwen3-32B/tree/main)获取原始模型权重。 |
| 15 | 14 | ||
| 16 | -### 3.安装其他依赖(与模型相关) | 15 | +## 使用msModelSlim工具进行Qwen3-32B W8A8量化 |
| 17 | 16 | ||
| 18 | -```shell | 17 | +Qwen3-32B W8A8量化一键量化功能通过命令行方式启动,正确安装 msModelSlim 工具后,可以通过如下命令运行: |
| 19 | -pip install transformers==4.43.1 | ||
| 20 | -``` | ||
| 21 | - | ||
| 22 | -## 工具使用说明 | ||
| 23 | - | ||
| 24 | -一键量化功能通过命令行方式启动,正确安装 msModelSlim 工具后,可以通过如下命令运行: | ||
| 25 | 18 | ||
| 26 | ```bash | 19 | ```bash |
| 27 | msmodelslim quant [ARGS] | 20 | msmodelslim quant [ARGS] |
| 28 | ``` | 21 | ``` |
| 29 | 22 | ||
| 30 | -例如,使用一键量化功能量化 Qwen2.5-7B-Instruct 模型,量化方式采用 w8a8 ,则量化命令如下,其中\${MODEL_PATH}为Qwen2.5-7B-Instruct原始浮点权重路径,\${SAVE_PATH}为用户自定义的量化权重保存路径。详细接口说明请参考[一键量化接口说明](../功能指南/一键量化/使用说明.md#接口说明)。请注意`trust_remote_code`为`True`时可能执行浮点模型权重中代码文件,请确保浮点模型来源安全可靠。 | 23 | +例如,使用一键量化功能量化 Qwen3-32B 模型,量化方式采用 w8a8 ,则量化命令如下,其中\${MODEL_PATH}为Qwen3-32B原始浮点权重路径,\${SAVE_PATH}为用户自定义的量化权重保存路径。请注意`trust_remote_code`为`True`时可能执行浮点模型权重中代码文件,请确保浮点模型来源安全可靠。 |
| 31 | 24 | ||
| 32 | ```bash | 25 | ```bash |
| 33 | -msmodelslim quant --model_path ${MODEL_PATH} --save_path ${SAVE_PATH} --device npu --model_type Qwen2.5-7B-Instruct --quant_type w8a8 --trust_remote_code True | 26 | +msmodelslim quant --model_path {MODEL_PATH} --save_path {SAVE_PATH} --device npu --model_type Qwen3-32B --quant_type w8a8 --trust_remote_code True |
| 34 | ``` | 27 | ``` |
| 35 | 28 | ||
| 36 | 用户输入命令后,系统将根据指定需求,在最佳实践库中匹配到最佳配置从而实施量化。 | 29 | 用户输入命令后,系统将根据指定需求,在最佳实践库中匹配到最佳配置从而实施量化。 |
| 37 | 30 | ||
| 31 | +**一键量化配置介绍:** | ||
| 32 | + | ||
| 33 | +```yaml | ||
| 34 | +apiversion: modelslim_v1 # 使用V1量化框架 | ||
| 35 | +metadata: | ||
| 36 | + config_id: qwen3-32b-dense-w8a8 | ||
| 37 | + ... | ||
| 38 | + label: # 使用W8A8量化 | ||
| 39 | + w_bit: 8 | ||
| 40 | + a_bit: 8 | ||
| 41 | + is_sparse: False | ||
| 42 | + kv_cache: False | ||
| 43 | +spec: # 量化服务配置 | ||
| 44 | + process: | ||
| 45 | + - type: "iter_smooth" # 使用iter_smooth离群值抑制算法 | ||
| 46 | + ... | ||
| 47 | + - type: "linear_quant" # 线性层量化配置 | ||
| 48 | + qconfig: | ||
| 49 | + act: # 激活值量化使用int8 per_tensor非对称量化,采用minmax算法 | ||
| 50 | + scope: "per_tensor" | ||
| 51 | + dtype: "int8" | ||
| 52 | + symmetric: False | ||
| 53 | + method: "minmax" | ||
| 54 | + weight: # 权重值量化使用int8 per_channel对称量化,采用minmax算法 | ||
| 55 | + scope: "per_channel" | ||
| 56 | + dtype: "int8" | ||
| 57 | + symmetric: True | ||
| 58 | + method: "minmax" | ||
| 59 | + include: ["*"] #包含所有层量化,但排除"down_proj"的9个层。 | ||
| 60 | + exclude: | ||
| 61 | + - 'model.layers.1.mlp.down_proj' | ||
| 62 | + - 'model.layers.2.mlp.down_proj' | ||
| 63 | + - 'model.layers.6.mlp.down_proj' | ||
| 64 | + - 'model.layers.7.mlp.down_proj' | ||
| 65 | + - 'model.layers.11.mlp.down_proj' | ||
| 66 | + - 'model.layers.43.mlp.down_proj' | ||
| 67 | + - 'model.layers.44.mlp.down_proj' | ||
| 68 | + - 'model.layers.45.mlp.down_proj' | ||
| 69 | + - 'model.layers.62.mlp.down_proj' | ||
| 70 | + save: | ||
| 71 | + - type: "ascendv1_saver" | ||
| 72 | + part_file_size: 4 # 分片文件大小(GB) | ||
| 73 | + dataset: "qwen3_cot.json" # 配置校准数据集 | ||
| 74 | +``` | ||
| 75 | + | ||
| 38 | **量化结果输出展示:** | 76 | **量化结果输出展示:** |
| 39 | 77 | ||
| 40 | ```yaml | 78 | ```yaml |
| 41 | ├── config.json # 原始模型配置文件 | 79 | ├── config.json # 原始模型配置文件 |
| 42 | ├── generation_config.json # 原始生成配置文件 | 80 | ├── generation_config.json # 原始生成配置文件 |
| 43 | ├── quant_model_description.json # 量化权重描述文件 | 81 | ├── quant_model_description.json # 量化权重描述文件 |
| 44 | -├── quant_model_weight_w8a8.safetensors # 量化权重文件 | 82 | +├── quant_model_weights-0000x-of-0000x.safetensors # 量化权重文件 |
| 45 | ├── tokenizer_config.json # 原始分词器配置文件 | 83 | ├── tokenizer_config.json # 原始分词器配置文件 |
| 46 | ├── tokenizer.json # 原始分词器词汇表 | 84 | ├── tokenizer.json # 原始分词器词汇表 |
| 47 | └── vocab.json # 原始词汇映射文件 | 85 | └── vocab.json # 原始词汇映射文件 |
| @@ -52,10 +90,8 @@ msmodelslim quant --model_path ${MODEL_PATH} --save_path ${SAVE_PATH} --device n | |||
| 52 | > - `quant_model_weight_w8a8.safetensors` - 实际的量化模型权重(W8A8表示权重8位量化、激活8位量化)。 | 90 | > - `quant_model_weight_w8a8.safetensors` - 实际的量化模型权重(W8A8表示权重8位量化、激活8位量化)。 |
| 53 | > - 其他文件为模型推理所需的配置和词汇表文件,来自原始浮点目录。 | 91 | > - 其他文件为模型推理所需的配置和词汇表文件,来自原始浮点目录。 |
| 54 | 92 | ||
| 55 | -## 一键量化支持矩阵 | 93 | +## 量化模型部署与测评 |
| 56 | - | 94 | +使用msModelSlim工具完成量化的模型,可使用vLLM-Ascend和MindIE推理框架进行部署,以vLLM-Ascend Qwen3-32B W8A8量化部署为例,可参考[deployment](https://docs.vllm.ai/projects/ascend/en/latest/tutorials/Qwen3-Dense.html#deployment)进行模型部署,完成部署后参考[accuracy-evaluation](https://docs.vllm.ai/projects/ascend/en/latest/tutorials/Qwen3-Dense.html#accuracy-evaluation)和[performance](https://docs.vllm.ai/projects/ascend/en/latest/tutorials/Qwen3-Dense.html#performance)进行精度和性能的测评。 |
| 57 | -可通过[大模型支持矩阵](../支持矩阵/大模型支持矩阵.md)查看不同模型的一键量化支持情况,其中标记了`一键量化`的模型则已支持一键量化。 | ||
| 58 | 95 | ||
| 59 | ## 相关资料 | 96 | ## 相关资料 |
| 60 | -- 对于过大的模型,可以参考[一键量化的逐层量化特性说明](../功能指南/一键量化/features/layer_wise_quantization.md)使用逐层量化,能够明显降低显存使用。 | 97 | +- 一键量化接口说明详细接口说明请参考[一键量化接口说明](../功能指南/一键量化/使用说明.md#接口说明)。 |
| 61 | -- 对于一键量化支持的多种算法,可以参考[一键量化V1架构支持的算法](../算法说明/)。 | ||
| @@ -1,4 +1,4 @@ | |||
| 1 | -apiversion: modelslim_v0 | 1 | +apiversion: modelslim_v1 |
| 2 | metadata: | 2 | metadata: |
| 3 | config_id: qwen3-32b-dense-w8a8 | 3 | config_id: qwen3-32b-dense-w8a8 |
| 4 | score: 90 | 4 | score: 90 |
| @@ -10,24 +10,41 @@ metadata: | |||
| 10 | is_sparse: False | 10 | is_sparse: False |
| 11 | kv_cache: False | 11 | kv_cache: False |
| 12 | spec: | 12 | spec: |
| 13 | - anti_cfg: | 13 | + process: |
| 14 | - anti_method: m4 | 14 | + - type: "iter_smooth" |
| 15 | - calib_cfg: | 15 | + alpha: 0.5 |
| 16 | - w_bit: 8 | 16 | + scale_min: 1e-5 |
| 17 | - a_bit: 8 | 17 | + enable_subgraph_type: |
| 18 | - mm_tensor: False | 18 | + - 'norm-linear' |
| 19 | - pdmix: True | 19 | + - 'linear-linear' |
| 20 | - disable_names: | 20 | + - 'ov' |
| 21 | - - 'lm_head' | 21 | + - 'up-down' |
| 22 | - - 'model.layers.1.mlp.down_proj' | 22 | + include: |
| 23 | - - 'model.layers.2.mlp.down_proj' | 23 | + - "*" |
| 24 | - - 'model.layers.6.mlp.down_proj' | 24 | + - type: "linear_quant" |
| 25 | - - 'model.layers.7.mlp.down_proj' | 25 | + qconfig: |
| 26 | - - 'model.layers.11.mlp.down_proj' | 26 | + act: |
| 27 | - - 'model.layers.43.mlp.down_proj' | 27 | + scope: "per_tensor" |
| 28 | - - 'model.layers.44.mlp.down_proj' | 28 | + dtype: "int8" |
| 29 | - - 'model.layers.45.mlp.down_proj' | 29 | + symmetric: False |
| 30 | - - 'model.layers.62.mlp.down_proj' | 30 | + method: "minmax" |
| 31 | - calib_dataset: mix_calib.jsonl | 31 | + weight: |
| 32 | - calib_save_params: | 32 | + scope: "per_channel" |
| 33 | - part_file_size: 4 | 33 | + dtype: "int8" |
| 34 | + symmetric: True | ||
| 35 | + method: "minmax" | ||
| 36 | + include: ["*"] | ||
| 37 | + exclude: | ||
| 38 | + - 'model.layers.1.mlp.down_proj' | ||
| 39 | + - 'model.layers.2.mlp.down_proj' | ||
| 40 | + - 'model.layers.6.mlp.down_proj' | ||
| 41 | + - 'model.layers.7.mlp.down_proj' | ||
| 42 | + - 'model.layers.11.mlp.down_proj' | ||
| 43 | + - 'model.layers.43.mlp.down_proj' | ||
| 44 | + - 'model.layers.44.mlp.down_proj' | ||
| 45 | + - 'model.layers.45.mlp.down_proj' | ||
| 46 | + - 'model.layers.62.mlp.down_proj' | ||
| 47 | + save: | ||
| 48 | + - type: "ascendv1_saver" | ||
| 49 | + part_file_size: 4 | ||
| 50 | + dataset: "qwen3_cot.json" | ||