文件最后提交记录最后更新时间
【docs】【bugfix】修复example资料问题 Co-authored-by: libarry<870390541@qq.com> # message auto-generated for no-merge-commit merge: !295 merge docs_bugfix_3 into master 【docs】【bugfix】修复example资料问题 Created-by: libarry Commit-by: libarry Merged-by: ascend-robot Description: 感谢您贡献的Pull Request! 在提交之前,请务必阅读 [CONTRIBUTING.md](https://gitcode.com/Ascend/msmodelslim/blob/master/CONTRIBUTING.md)。 Thanks for sending a pull request! BEFORE SUBMITTING, PLEASE READ [CONTRIBUTING.md](https://gitcode.com/Ascend/msmodelslim/blob/master/CONTRIBUTING.md). ## PR描述 (What this PR does / why we need it?) - 请明确说明您提交PR的变更内容。本部分旨在概述所做的变更,以及此PR是如何解决该问题的。请尽可能地提供有助于评审人员更高效、更快速完成检视审查的实用说明。 - 请说明为何需要这些更改,例如具体的使用场景或bug描述。 - 关联issue号(如果有)。 - Please clarify what changes you are proposing. The purpose of this section is to outline the changes and how this PR fixes the issue. If possible, please consider writing useful notes for better and faster reviews in your PR. - Please clarify why the changes are needed. For instance, the use case and bug description. - Related issue number (if any) ## 面向用户的变更 (Does this PR introduce _any_ user-facing change)? - 请注意,这里指的是**任何**面向用户的变更,包括但不限于API、用户界面或其他使用方式上的变更。 - Note that it means *any* user-facing change including all aspects such as API, interface or other behavior changes. ## 功能验证 (How was this patch tested?) 请确认CI已通过增量及存量的单元测试用例。 如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤(最好提供完整的可复现的操作路径及关键截图),以便Committer能够快速复现验证,也便于后续的维护。 如果未添加测试,请说明未添加的原因,以及为何难添加测试。 - [_] 功能自验 - [_] 本地自验截图(涉及个人标识符等敏感信息请注意脱敏) - [_] 新增/变更内容是否已新增/适配UT测试用例看护 CI passed with new added/existing test. If it was tested in a way different from regular unit tests, please clarify how you tested step by step, ideally copy and paste-able, so that other reviewers can test and check, and descendants can verify in the future. If tests were not added, please describe why they were not added and/or why it was difficult to add. - [_] Self-verification of the feature. - [_] Screenshot of local self-verification (please anonymize any sensitive information such as personal identifiers) - [_] Have new or modified unit test (UT) cases been added or adapted to cover the newly added or changed content? See merge request: Ascend/msmodelslim!2952 个月前
【feature】支持qwen3-vl w8a8sc量化 Co-authored-by: pu-zhe<puzhe1@h-partners.com> # message auto-generated for no-merge-commit merge: !29 merge qwen3_vl_w8a8s into master 【feature】支持qwen3-vl w8a8sc量化 Created-by: pu-zhe Commit-by: pu-zhe Merged-by: ascend-robot Description: ### 1. 修改描述 - **修改原因:** 支持qwen3-vl w8a8sc量化 - **修改内容:** 1.增加适配量化脚本 2.添加qwen3-vl量化说明资料 - [ ] **涉及代码双合**(贴上另一个PR链接): ---- ### 2. 功能验证 - [x] **功能自验** - [x] **本地自验用例截图**(请确保不体现个人信息) - [x] **冒烟是否通过** ---- ### 3. 代码检视 - **要求:** - 合入代码大于 200 行,需三人以上会议检视。 - 检视密度≥2个/100行。 - 检视缺陷密度达不到要求的需给出说明。 - 大于 1000 行代码原则上不允许合入,需进行备案。 - [x] **是否经过代码检视** - [ ] **是否具备UT测试用例看护** ---- ### 4. 安全自检 **典型安全编码问题** - [ ] **若涉及对外接口,是否已校验外部数据** - [x] **MR 标题和描述是否按格式填写** - [ ] **是否进行空指针校验** - [ ] **是否进行返回值校验** - [ ] **是否正确考虑文件权限配置** - [x] **是否充分考虑接口的异常场景** - [x] **是否正确记录错误日志** - [ ] **若涉及正则表达式,是否对正则表达式做 ReDos 校验** - [ ] **若涉及运算,是否存在整数溢出、除零等风险** ---- ### 5. 变更知会 - **资料修改:** - **变更通知(消息知会 + 邮件知会):** ---- ### 6. 冒烟修改 - **PR 来源:** - [ ] 问题单 - [x] 需求特性 - [ ] 安全排查 - [ ] 其他 - [ ] **是否存在冒烟可以拦截却未拦截的情况** - [ ] **是否需要添加冒烟:** ---- See merge request: Ascend/msmodelslim!294 个月前
README.md

Qwen3-VL 量化案例

模型介绍

Qwen3-VL 是Qwen推出的视觉-语言模型,这一代在各个方面都进行了全面升级:更优秀的文本理解和生成、更深入的视觉感知和推理、扩展的上下文长度、增强的空间和视频动态理解能力,以及更强的代理交互能力。

环境配置

  • 基础环境配置请参考安装指南,注意:由于高版本transformers的特殊性,PyTorch及torch_npu需要配置安装为≥2.2版本。

  • 针对 Qwen3-VL,transformers 版本需要 4.57.1:

    pip install transformers==4.57.1
    

Qwen3-VL模型当前已验证的量化方法

模型 原始浮点权重 量化方式 推理框架支持情况 量化命令
Qwen3-VL-4B-Instruct Qwen3-VL-4B-Instruct W8A8量化 MindIE 预计3.0.RC1版本支持
vLLM Ascend v0.13.0及之后版本支持
W8A8量化
Qwen3-VL-8B-Instruct Qwen3-VL-8B-Instruct W8A8SC量化 MindIE 预计3.0.RC1版本支持
vLLM Ascend 当前不支持
W8A8SC量化
Qwen3-VL-32B-Instruct Qwen3-VL-32B-Instruct W8A8量化 MindIE 预计3.0.RC1版本支持
vLLM Ascend v0.13.0及之后版本支持
W8A8量化

说明: 点击量化命令列中的链接可跳转到对应的具体量化命令。

使用案例

  • 如果需要使用NPU多卡量化,请先配置多卡环境变量(Atlas 300I Duo 系列产品不支持多卡量化):

    export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
    export PYTORCH_NPU_ALLOC_CONF=expandable_segments:False
    
  • 若加载自定义模型,调用from_pretrained函数时要指定trust_remote_code=True,让修改后的自定义代码文件能够正确地被加载(请确保加载的自定义代码文件的安全性)。

1. Qwen3-VL系列

1.1 Qwen3-VL-8B-Instruct W8A8SC量化 异常值抑制算法使用m2

该示例在NPU上生成Qwen3-VL-8B-Instruct模型的量化权重。使用m2算法进行异常值抑制。

请将{浮点权重路径}和{W8A8S量化权重路径}替换为用户实际路径。{校准集图片路径}默认为"../calibImages",以当前"../calibImages"目录中2张图片作为校准集。部署量化权重时,如在使用场景精度出现明显掉点,用户可根据实际场景替换为其他图片(建议30张)。

Atlas 300I DUO 使用以下方法稀疏量化

  • 稀疏量化

    python quant_qwen3vl.py \
      --model_path {浮点权重路径} \
      --save_directory {W8A8S量化权重路径} \
      --calib_images {校准集图片路径} \
      --w_bit 4 \
      --a_bit 8 \
      --device_type npu \
      --anti_method m2 \
      --is_lowbit True \
      --fraction 0.01 \
      --use_sigma True \
      --torch_dtype fp16 \
      --trust_remote_code True
    
  • 权重压缩

    注意:权重压缩需要先安装MindIE,具体可参见《MindIE安装指南》

    # TP数为tensor parallel并行个数
    export IGNORE_INFER_ERROR=1
    torchrun --nproc_per_node {TP数} -m examples.convert.model_slim.sparse_compressor --model_path {W8A8S量化权重路径} --save_directory {W8A8SC量化权重路径}
    
量化参数说明
参数名 含义 默认值 使用方法
model_path 浮点权重路径 无默认值 必选参数;
输入原始浮点权重目录路径。
calib_images 校准集图片路径 ../calibImages 可选参数;
输入校准数据集的目录路径。本示例中图片来源于公开数据集COCO。 为保证量化精度需要根据示例扩充到30张图片。用户可根据实际场景替换为其他图片。
save_directory 量化权重路径 无默认值 必选参数;
输出量化权重路径。
part_file_size 量化权重文件大小,单位是GB 默认为None时不限制单个权重文件大小,此时只生成一个量化权重文件。 可选参数;
生成量化权重文件大小,请用户自定义单个量化权重文件的大小上限。
w_bit 权重量化bit 8 可选参数;
在Qwen3-VL量化场景下支持配置为4或8。
a_bit 激活值量化bit 8 可选参数;
在Qwen3-VL量化场景下支持配置为8。
device_type 量化运行设备类型 'cpu' 可选参数;
可选值:['cpu', 'npu']。
trust_remote_code 是否信任自定义代码 False 可选参数;
指定trust_remote_code=True让修改后的自定义代码文件能够正确地被加载(请确保所加载的自定义代码文件来源可靠,避免潜在的安全风险)。
anti_method 异常值抑制算法 'm2' 可选参数;
可选值:['m2']。'm2'对应多模态理解模型场景下优化后的Outlier Suppression Plus异常值抑制算法。
act_method 激活值量化方法 2 可选参数;
(1) 1代表Label-Free场景的min-max量化方式。
(2) 2代表Label-Free场景的histogram量化方式。
(3) 3代表Label-Free场景的自动混合量化方式。
open_outlier 是否开启权重异常值划分 True 可以配置为True或者False。
设置为True时开启权重异常值划分,反之则关闭。
is_dynamic 是否使用动态量化,即W8A8中的激活量化参数动态生成 False 可以配置为True或者False。
设置为True时使用动态量化,反之则不使用。
is_lowbit 是否使用稀疏量化的lowbit算法 False 可以配置为True或者False。
设置为True时,表示使用稀疏量化的lowbit算法,反之则不使用。
w4a8_dynamic per-group量化场景下需要设置为True。
co_sparse 是否开启稀疏量化功能 False True: 使用稀疏量化功能;
False: 不使用稀疏量化功能。
fraction 模型权重稀疏量化过程中被保护的异常值占比 0.01 取值范围[0.01,0.1]。
use_sigma 是否启动sigma功能 False True: 开启sigma功能;
False: 不开启sigma功能。
sigma_factor sigma功能中sigma的系数 3.0 数据类型为float,默认值为3.0,取值范围为[1.0, 3.0]。
说明:仅当use_sigma为True时生效。
torch_dtype 设置加载权重的数据类型 bf16 可选值:['bf16', 'fp16']。默认值为bf16。
  • 更多参数配置要求,请参考量化过程中配置的参数 QuantConfig 以及量化参数配置类 Calibrator
1.2 Qwen3-VL-4B-Instruct W8A8量化

该模型的量化已经集成至一键量化。使用 model_type=Qwen3-VL-4B-Instructquant_type=w8a8 即可。若需使用自定义配置(如指定保存选项),可通过 config_path 指定 qwen3_vl_4b_w8a8.yaml

msmodelslim quant \
    --model_path /path/to/qwen3_vl_4b_float_weights \
    --save_path /path/to/qwen3_vl_4b_quantized_weights \
    --device npu \
    --model_type Qwen3-VL-4B-Instruct \
    --quant_type w8a8 \
    --trust_remote_code True

使用自定义配置文件时:

msmodelslim quant \
    --model_path /path/to/qwen3_vl_4b_float_weights \
    --save_path /path/to/qwen3_vl_4b_quantized_weights \
    --device npu \
    --model_type Qwen3-VL-4B-Instruct \
    --config_path lab_practice/qwen3_vl/qwen3_vl_4b_w8a8.yaml \
    --trust_remote_code True

说明:

  • Qwen3-VL-4B-Instruct 默认精度为bfloat16,若修改模型权重路径下config.json中的torch_dtypefloat16进行量化,可能会导致模型精度异常。
  • 若硬件只支持float16精度推理(例如Atlas 300I/300T系列),建议采用默认精度bfloat16量化后将模型权重路径下config.json中的torch_dtype修改为float16进行推理。
1.3 Qwen3-VL-32B-Instruct W8A8量化

该模型的量化已经集成至一键量化

msmodelslim quant \
    --model_path /path/to/qwen3_vl_float_weights \
    --save_path /path/to/qwen3_vl_quantized_weights \
    --device npu \
    --model_type Qwen3-VL-32B-Instruct \
    --quant_type w8a8 \
    --trust_remote_code True