文件最后提交记录最后更新时间
【feature】【UT】增加adapt rotation UT Co-authored-by: xyxin_006<xyxin_hit@163.com> # message auto-generated for no-merge-commit merge: !186 merge feature/adapt_rotation_new into master 【feature】【UT】增加adapt rotation UT Created-by: xyxin_006 Commit-by: xyxin_006 Merged-by: ascend-robot Description: 增加adapt rotation UT See merge request: Ascend/msmodelslim!1862 个月前
fix(qwen3_moe): add get_hidden_dim for RotationTune (#125) Co-authored-by: rookie_hongchuan<hongchuan6@h-partners.com> # message auto-generated for no-merge-commit merge: !258 merge fix/issue-125-qwen3-moe-get-hidden-dim into master fix(qwen3_moe): add get_hidden_dim for RotationTune (#125) Created-by: rookie_hongchuan Commit-by: rookie_hongchuan Merged-by: ascend-robot Description: ## PR描述 (What this PR does / why we need it?) - 关联 issue:#125 - 问题现象:RotationTune / AdaptRotation stage1 在构建旋转矩阵时需要获取 hidden_dim,但此前该接口未被明确声明,导致 Qwen3MoeModelAdapter 在量化时触发 AttributeError: ... has no attribute 'get_hidden_dim'。 - 修改内容: - 新增 AdaptRotationInterface(继承 QuaRotInterface,补充 get_hidden_dim() 声明),使得所有对 adapter 的接口调用更明确。 - AdaptRotationStage1Processor 改为校验 adapter 是否实现 AdaptRotationInterface,并通过该接口调用 get_hidden_dim()。 - 更新 Qwen3ModelAdapter / Qwen3MoeModelAdapter 显式实现 AdaptRotationInterface。 - 更新 interface_hub / 单测 mock 与用例,保证接口契约与覆盖一致。 ## 面向用户的变更 (Does this PR introduce _any_ user-facing change)? - 否。 ## 功能验证 (How was this patch tested?) - [x] 功能自验 - [x] 本地自验截图(涉及个人标识符等敏感信息请注意脱敏) ![image.png](https://raw.gitcode.com/user-images/assets/8444818/4401d72c-67b2-4190-8289-0da49f5cbb37/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8444818/566ed237-a6d8-4be7-a1bf-349140150c7d/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/8444818/8d4719ee-3379-4e33-9ff4-534184cab0e7/image.png 'image.png') - [x] 新增/变更内容是否已新增/适配UT测试用例看护 - 本地 UT: - MSMODELSLIM_LOG_LEVEL=info python -m unittest -q test.cases.processor.adapt_rotation.test_adapt_rotation_stage1 test.cases.model.qwen3_moe.test_model_adapter_qwen3_moe See merge request: Ascend/msmodelslim!2582 个月前
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 天前
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】【UT】增加adapt rotation UT Co-authored-by: xyxin_006<xyxin_hit@163.com> # message auto-generated for no-merge-commit merge: !186 merge feature/adapt_rotation_new into master 【feature】【UT】增加adapt rotation UT Created-by: xyxin_006 Commit-by: xyxin_006 Merged-by: ascend-robot Description: 增加adapt rotation UT See merge request: Ascend/msmodelslim!1862 个月前
【feature】【UT】增加adapt rotation UT Co-authored-by: xyxin_006<xyxin_hit@163.com> # message auto-generated for no-merge-commit merge: !186 merge feature/adapt_rotation_new into master 【feature】【UT】增加adapt rotation UT Created-by: xyxin_006 Commit-by: xyxin_006 Merged-by: ascend-robot Description: 增加adapt rotation UT See merge request: Ascend/msmodelslim!1862 个月前