文件最后提交记录最后更新时间
feat: AdaptRotationStage1 multi-card DP support Co-authored-by: rookie_hongchuan<hongchuan6@h-partners.com> # message auto-generated for no-merge-commit merge: !394 merge fix/adapt-rotation-multi-card into master feat: AdaptRotationStage1 multi-card DP support Created-by: rookie_hongchuan Commit-by: rookie_hongchuan Merged-by: ascend-robot Description: ## 概述 为 AdaptRotationStage1Processor 添加多卡 DP 支持,使 prior 阶段能在多卡环境下正确收集并合并各 rank 的激活值,各 rank 独立计算 Hadamard 旋转矩阵,保证多卡量化结果一致性。同时修复 DPLayerWiseRunner 多阶段量化场景下的 MASTER_PORT 环境污染问题。 ## 动机 AdaptRotation 是一个两阶段量化算法:prior 阶段(stage 1)通过前向钩子收集激活值并优化 Hadamard 旋转矩阵,process 阶段(stage 2)将旋转矩阵应用到各层权重。在多卡 DP 模式下,每个 rank 处理校准数据的不同分片,收集到的激活值需要通过分布式通信合并,否则各 rank 会基于不同的激活优化出不同的旋转矩阵,违背 DP 多卡并行的基本一致性原则。 ## 设计方案 ### 架构 ``` AdaptRotationStage1Processor(继承 AutoSessionProcessor) ├── support_distributed() → True ├── _init_distributed / _deinit_distributed │ └── DistHelper(request.module) # EP 模型模块同步 ├── preprocess() │ └── 注册前向钩子(与单卡一致) ├── forward → 各 rank 独立收集激活值到 act_dict ├── postprocess() │ └── 清理钩子 + _deinit_distributed └── post_run() ├── _gather_activations_across_ranks() │ └── all_gather_object → 合并各 rank 的激活值 └── HadamardOptimizer.optimize() # 各 rank 独立计算,结果一致 ``` ### MASTER_PORT 修复 DPLayerWiseRunner 在 run() 中读取 os.environ[MASTER_PORT] 确定分布式通信端口。多阶段量化时,stage 1 的 spawn 会设置该环境变量,stage 2 直接复用同一端口。新增认领制机制:自己设置的 MASTER_PORT 在 spawn 结束后清理,外部预设(如 torchrun 启动)则保留。 ### 修改文件 | 文件 | 变更 | |------|------| | msmodelslim/processor/adapt_rotation/adapt_rotation_stage1.py | 添加 distributed helpers(_init_distributed / _deinit_distributed / _gather_activations_across_ranks);support_distributed → True;preprocess/postprocess/post_run 集成分布式流程 | | msmodelslim/core/runner/dp_layer_wise_runner.py | MASTER_PORT 认领制:自己设置的 env 在 spawn 后清理,避免污染多阶段量化 | ## 测试结果 ### 环境 | 项目 | 内容 | |------|------| | 模型 | Qwen3-32B(5 层减层模型:layers 0~4 + 全局权重) | | 量化方式 | AdaptRotation(stage 1: steps=2, max_samples=64, layer_type=up_proj) | | 设备 | 2x Ascend 910B2 (64GB HBM) | | 分布式 | DP LayerWise(2 rank) | | 代码分支 | fix/adapt-rotation-multi-card | ### 场景一:单卡 PR 合入前后结果一致 ``` mstool cmp /tmp/verify-before-pr /tmp/verify-after-pr → 58/58 weight keys 完全匹配,max_diff=0 ✅ ``` ### 场景二:多卡 DP 量化 单卡与多卡因校准数据分片方式不同,各 rank 收集到的激活值采样顺序有差异,导致 Hadamard 优化结果有数值差异(权重 max_diff ~0.34)。这是预期行为——多卡 DP 模式下各 rank 处理不同数据分片,激活分布不完全一致。多卡产出的量化模型可正常保存和推理。 ### 运行日志 详见测试报告文档。 ## 测试报告 独立测试:https://www.feishu.cn/docx/Sm20dM9B3oXykGx7J7yc4IORnhd 集成测试:https://www.feishu.cn/docx/SORxdGHxKosTJpxUUupcASh4nMz ## 关联 issue RFC #158(DP多卡量化增强方案设计) See merge request: Ascend/msmodelslim!3948 天前
【feature】mse_layer_wise敏感层分析优化;摸高算法支持layer级回退 Co-authored-by: xyxin_006<xyxin_hit@163.com> # message auto-generated for no-merge-commit merge: !374 merge feature/analysis_based_mse into master 【feature】mse_layer_wise敏感层分析优化;摸高算法支持layer级回退 Created-by: xyxin_006 Commit-by: xyxin_006 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?) 1、mse_layer_wise 实现优化:原实现计算单个layer层的敏感度针对专家模型实现不准确,修改后直接统计单个Decoder量化前后的MSELoss 2、摸高算法支持layer级回退:原实现仅支持linear级回退,针对专家模型的自动调优流程有较大局限性,优化后可以实现整层回退,缩小搜索空间,加快自动调优迭代效率 3、敏感层分析命令行优化,可以根据分析粒度选择算法,不同粒度可选范围不同。 4、资料同步修改 ## 面向用户的变更 (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!37430 天前
[feature] 量化配置yaml校验 Co-authored-by: tanxiangyuu<tanxiangyu2@huawei.com> # message auto-generated for no-merge-commit merge: !380 merge dev into master [feature] 量化配置yaml校验 Created-by: tanxiangyuu Commit-by: tanxiangyuu Merged-by: ascend-robot Description: ## PR描述 (What this PR does / why we need it?) ### 背景 msmodelslim 的 YAML 量化配置解析链中,Metadata 模型缺少 extra='forbid' 设置,默认 extra='ignore' 导致字段名拼写错误(如 scroe→score、labll→label)、缩进错误(如 include/exclude 误入 metadata 层级)等低级失误被静默丢弃,用户无任何报错提示,量化流程以错误的默认参数继续执行。 此外,PyYAML 对重复键静默用后值覆盖前值,项目缺少相关检测。 ### 变更内容 1. Metadata extra='forbid' - msmodelslim/core/practice/interface.py:Metadata 添加字段验证器(validate_str_length、in_range),修复 verified_model_types 使用 dataclasses.field → pydantic.Field 的问题 - msmodelslim/utils/patch/pydantic.py:patch 后的 PatchedBaseModel 默认 extra='forbid',所有子类自动继承;需要允许额外字段的模型(如 BaseQuantConfig)已显式设置 extra='allow',不受影响 效果:Metadata 层级的拼写错误、缩进错误在配置加载阶段立即报错,不再静默丢弃。 2. YAML 重复键检测 - msmodelslim/utils/security/path.py:新增 _DuplicateKeyLoader(继承 yaml.SafeLoader),在 yaml_safe_load 中检测重复键,发现时抛出 SchemaValidateError 并提示行号 效果:config_id: a / config_id: b 重复键不再静默覆盖,立即报错。 3. Pydantic patch 优化 - msmodelslim/utils/patch/pydantic.py: - 错误信息包含完整路径(如 process.0.type 而非 value) - 一次性报出metadata或spec的所有校验错误,不截断 - __init__ 通过栈帧检测区分嵌套调用和直接调用,嵌套时不破坏 Pydantic 的错误收集 - model_config 默认 extra='forbid',所有新建模型自动拒绝未知字段 4. 校验工具函数 - msmodelslim/utils/validation/value.py:新增 allow_empty_list、allow_empty_dict、at_least_one_key、in_range 等通用校验函数 - msmodelslim/utils/validation/pydantic.py:新增对应的 Pydantic AfterValidator 包装 5. 代码清理 - 移除各 processor 文件中冗余的 model_config = ConfigDict(extra="forbid")(由 patch 默认提供) - 统一代码格式(缩进、引号、行尾空格) - 修复 greater_than_zero 支持 Decimal 类型 - 移除未使用的 is_boolean 校验函数 ### 面向用户的变更 | 场景 | 修复前 | 修复后 | |------|--------|--------| | Metadata 字段拼写错误(scroescore) | 静默丢弃,使用默认值 | 立即报错,提示完整路径 | | include/exclude 缩进到 metadata 下 | 静默丢弃,所有模块被量化 | 立即报错 | | YAML 重复键 | 静默覆盖 | 立即报错,提示行号 | | 任意 Pydantic 模型的未知字段 | 默认忽略 | 默认拒绝(extra='forbid') | | 多个校验错误同时存在 | 只报第一个 | 一次性全部报出 | ### 错误信息示例 #### 示例1 ![image.png](https://raw.gitcode.com/user-images/assets/8444818/d50dbb2a-bbcd-4cc6-95fb-c04d558c4d05/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8444818/5b848056-63ad-423a-bce4-16188d5a587b/image.png 'image.png') #### 示例2 ![image.png](https://raw.gitcode.com/user-images/assets/8444818/8beba509-b986-4468-b018-d3183ad5a85f/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8444818/e31bc2eb-9a21-46fc-b7b4-fd9835436410/image.png 'image.png') #### 示例3 ![image.png](https://raw.gitcode.com/user-images/assets/8444818/e51ea28e-c5ff-4df9-b199-b5ffa6f2d1c1/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8444818/1bd0f623-1a60-4082-85be-36f01627a050/image.png 'image.png') ### 结构修改 | 文件 | 修改说明 | |------|---------| | 文件 | 修改说明 | | :--- | :--- | | msmodelslim/utils/patch/pydantic.py | 新增 _format_validation_error_in_model_validate;默认 extra='forbid'model_validate 合并 _additional_validation_errors | | msmodelslim/utils/validation/validation_state.py | 新增:管理校验上下文(路径前缀)和额外错误存储 | | msmodelslim/processor/base.py | validate_auto_processor_config_list 不再 raise,非 dict 项错误写入 validation_state;设置 spec. 路径前缀 | | msmodelslim/utils/security/path.py | 新增 _DuplicateKeyLoaderyaml_safe_load 使用自定义 Loader;添加 encoding='utf-8' | | msmodelslim/core/practice/interface.py | Metadata 添加验证器;verified_model_types 改用 pydantic.Field | | msmodelslim/utils/validation/value.py | 新增 allow_empty_listallow_empty_dictat_least_one_keyin_range | | msmodelslim/utils/validation/pydantic.py | 新增 _to_value_error 包装,Pydantic 能收集多个自定义验证器的错误 | | msmodelslim/processor/*.py | 移除冗余 model_config;统一代码格式 | See merge request: Ascend/msmodelslim!3802 天前
【test】 补全 cli/app/flat_quant 三模块单测,达 80% 行覆盖门禁 Co-authored-by: rookie_hongchuan<hongchuan6@h-partners.com> # message auto-generated for no-merge-commit merge: !471 merge feature/ut-coverage into master 【test】 补全 cli/app/flat_quant 三模块单测,达 80% 行覆盖门禁 Created-by: rookie_hongchuan Commit-by: rookie_hongchuan Merged-by: ascend-robot Description: ## PR描述 (What this PR does / why we need it?) 补全 msmodelslim/cli + app + processor/flat_quant 三模块单测覆盖,达到行覆盖率 80% / 分支覆盖率 60% 门禁。 新增 21 个单测文件,覆盖正常/边界/异常三类情形,模块聚合行覆盖 85% / 分支覆盖 80%(全部达标)。 ## 面向用户的变更 (Does this PR introduce _any_ user-facing change?) 无。仅新增单测,不修改业务源码。 ## 功能验证 (How was this patch tested?) - [x] 功能自验:pytest test/cases/app/ test/cases/cli/ test/cases/processor/flat_quant/ test/smoke/ → 402 passed, 48 skipped, 3 xfailed - [x] 覆盖率:三模块行覆盖 81%-98%,均过 80% 门禁 ### 覆盖明细 | 模块 | 行覆盖 | 分支覆盖 | |------|--------|---------| | msmodelslim/cli/ | 98% | 95% | | msmodelslim/processor/flat_quant/ | 84% | 75% | | msmodelslim/app/ | 81% | 76% | ### 新增单测文件(21 个) - test/cases/cli/test_utils.py, test_cli_main.py, test_naive_main.py, test_analysis_main.py, test_tuning_main.py - test/cases/app/auto_tuning/test_application.py, test_evaluation_service_infra.py, test_model_info_interface.py, test_plan_manager_infra.py, test_practice_accuracy_infra.py, test_practice_history_infra.py, test_practice_manager_infra.py - test/cases/app/naive_quantization/test_application_helpers.py - test/cases/processor/flat_quant/flat_quant_utils/test_fqu_utils.py, test_trans_matrix.py, test_flat_quant_manager.py, test_fake_clip_quantizer.py, test_flat_fake_quant_linear.py, test_structure_pair.py, test_structure_pair_real.py - test/smoke/test_flat_quant.py See merge request: Ascend/msmodelslim!4711 天前
【msmodelslim】刷新文件头部声明和版权 Co-authored-by: caishengcheng<caishengcheng@huawei.com> # message auto-generated for no-merge-commit merge: !28 merge license into master 【msmodelslim】刷新文件头部声明和版权 Created-by: caishengcheng Commit-by: caishengcheng Merged-by: ascend-robot Description: 【msmodelslim】刷新文件头部声明和版权 See merge request: Ascend/msmodelslim!284 个月前
【msmodelslim】刷新文件头部声明和版权 Co-authored-by: caishengcheng<caishengcheng@huawei.com> # message auto-generated for no-merge-commit merge: !28 merge license into master 【msmodelslim】刷新文件头部声明和版权 Created-by: caishengcheng Commit-by: caishengcheng Merged-by: ascend-robot Description: 【msmodelslim】刷新文件头部声明和版权 See merge request: Ascend/msmodelslim!284 个月前
【feature】 支持FA3的混合量化配置及保存 Co-authored-by: wangsihao<wangsihao5@h-partners.com> # message auto-generated for no-merge-commit merge: !483 merge master into master 【feature】 支持FA3的混合量化配置及保存 Created-by: wangsihao Commit-by: wangsihao Merged-by: ascend-robot Description: 感谢您贡献的Pull Request! 在提交之前,请务必阅读 [CONTRIBUTING.md](https://gitcode.com/Ascend/msmodelslim/blob/master/CONTRIBUTING.md)。 ## PR描述 (What this PR does / why we need it?) 支持FA3量化中的不同策略和粒度的混合配置 如:fa_q 动态量化,fa_k/fa_v 静态量化 量化粒度支持FP8/INT8,其中INT8仅支持静态量化 ## 功能验证 (How was this patch tested?) - [_] 功能自验 - [_] 本地自验截图(涉及个人标识符等敏感信息请注意脱敏) - [_] 新增/变更内容是否已新增/适配UT测试用例看护 See merge request: Ascend/msmodelslim!4835 小时前
【UT】新增fa3动态量化、在线旋转ut Co-authored-by: libarry<870390541@qq.com> # message auto-generated for no-merge-commit merge: !57 merge fa3_rot_ut into master 【UT】新增fa3动态量化、在线旋转ut Created-by: libarry Commit-by: libarry Merged-by: ascend-robot Description: add fa3 and online quarot ut See merge request: Ascend/msmodelslim!574 个月前
【msmodelslim】刷新文件头部声明和版权 Co-authored-by: caishengcheng<caishengcheng@huawei.com> # message auto-generated for no-merge-commit merge: !28 merge license into master 【msmodelslim】刷新文件头部声明和版权 Created-by: caishengcheng Commit-by: caishengcheng Merged-by: ascend-robot Description: 【msmodelslim】刷新文件头部声明和版权 See merge request: Ascend/msmodelslim!284 个月前
【msmodelslim】刷新文件头部声明和版权 Co-authored-by: caishengcheng<caishengcheng@huawei.com> # message auto-generated for no-merge-commit merge: !28 merge license into master 【msmodelslim】刷新文件头部声明和版权 Created-by: caishengcheng Commit-by: caishengcheng Merged-by: ascend-robot Description: 【msmodelslim】刷新文件头部声明和版权 See merge request: Ascend/msmodelslim!284 个月前
【msmodelslim】刷新文件头部声明和版权 Co-authored-by: caishengcheng<caishengcheng@huawei.com> # message auto-generated for no-merge-commit merge: !28 merge license into master 【msmodelslim】刷新文件头部声明和版权 Created-by: caishengcheng Commit-by: caishengcheng Merged-by: ascend-robot Description: 【msmodelslim】刷新文件头部声明和版权 See merge request: Ascend/msmodelslim!284 个月前
【msmodelslim】刷新文件头部声明和版权 Co-authored-by: caishengcheng<caishengcheng@huawei.com> # message auto-generated for no-merge-commit merge: !28 merge license into master 【msmodelslim】刷新文件头部声明和版权 Created-by: caishengcheng Commit-by: caishengcheng Merged-by: ascend-robot Description: 【msmodelslim】刷新文件头部声明和版权 See merge request: Ascend/msmodelslim!284 个月前