文件最后提交记录最后更新时间
refactor: decouple the check accuracy feature from triton, mlir, dvm. Co-authored-by: yvjc<yujincheng7@huawei.com> # message auto-generated for no-merge-commit merge: !35311 merge decouple_accuracy_v271 into v2.7.1 refactor: decouple the check accuracy feature from triton, mlir, dvm. Created-by: yvjc Commit-by: yvjc Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/1839 - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 将triton,mlir,dvm后端中存在的精度对比逻辑共同部分抽出来, 存放在torch_npu.\_inductor.compare.py当中. # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 通过环境变量INDUCTOR_ASCEND_CHECK_ACCURACY=1, 开启精度比对功能, 对模型开启图模式, 分别选择这三种后端, 而后观察是否正常输出, 若正常输出, 则无问题. # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!3531115 天前
[feat]Supporting MFusion in the torch_npu code repository. Co-authored-by: huangbingjian<huangbingjian1@huawei.com> Co-authored-by: shaoshengqi<shaoshengqi@huawei.com> Co-authored-by: shuqian0<shuqian11@huawei.com> Co-authored-by: Margaret_wangrui<wangrui178@huawei.com> Co-authored-by: ginfung<yujianfeng5@huawei.com> # message auto-generated for no-merge-commit merge: !34762 merge mfusion_v2.7.1 into v2.7.1 [feat]Supporting MFusion in the torch_npu code repository. Created-by: Margaret_wangrui Commit-by: Margaret_wangrui;shuqian0;ginfung;huangbingjian;shaoshengqi Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) [MFusion][Feature]: MFusion图算融合组件 https://gitcode.com/mindspore/akg/issues/413 https://atomgit.com/Ascend/pytorch/issues/1716 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!3476220 天前
[feat]Supporting MFusion in the torch_npu code repository. Co-authored-by: huangbingjian<huangbingjian1@huawei.com> Co-authored-by: shaoshengqi<shaoshengqi@huawei.com> Co-authored-by: shuqian0<shuqian11@huawei.com> Co-authored-by: Margaret_wangrui<wangrui178@huawei.com> Co-authored-by: ginfung<yujianfeng5@huawei.com> # message auto-generated for no-merge-commit merge: !34762 merge mfusion_v2.7.1 into v2.7.1 [feat]Supporting MFusion in the torch_npu code repository. Created-by: Margaret_wangrui Commit-by: Margaret_wangrui;shuqian0;ginfung;huangbingjian;shaoshengqi Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) [MFusion][Feature]: MFusion图算融合组件 https://gitcode.com/mindspore/akg/issues/413 https://atomgit.com/Ascend/pytorch/issues/1716 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!3476220 天前
refactor: decouple the check accuracy feature from triton, mlir, dvm. Co-authored-by: yvjc<yujincheng7@huawei.com> # message auto-generated for no-merge-commit merge: !35311 merge decouple_accuracy_v271 into v2.7.1 refactor: decouple the check accuracy feature from triton, mlir, dvm. Created-by: yvjc Commit-by: yvjc Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/1839 - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) 将triton,mlir,dvm后端中存在的精度对比逻辑共同部分抽出来, 存放在torch_npu.\_inductor.compare.py当中. # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 通过环境变量INDUCTOR_ASCEND_CHECK_ACCURACY=1, 开启精度比对功能, 对模型开启图模式, 分别选择这三种后端, 而后观察是否正常输出, 若正常输出, 则无问题. # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!3531115 天前
fix(npu): DVM codegen view_load for memory-planner padding stride Co-authored-by: Margaret_wangrui<wangrui178@huawei.com> # message auto-generated for no-merge-commit merge: !37139 merge v2.7.1_empty_strided_new into v2.7.1 fix(npu): DVM codegen view_load for memory-planner padding stride Created-by: Margaret_wangrui Commit-by: Margaret_wangrui Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 https://gitcode.com/Ascend/pytorch/issues/2165 **说明**:修复 Inductor + DVM/MFusion 路径下 nvidia_deeprecommender 等模型 **float32 精度异常**。根因为 memory planner 为中间 buffer 分配 **对齐 padding stride**,而 DVM fused kernel 通过 k.load(shape) 按 **逻辑 contiguous stride** 读 GM,与真实 buffer layout 不一致。 **现象**:Inductor memory planner 为 bool 等 buffer 分配 **对齐 padding stride**(如 (198016, 1)),FX FakeTensor meta 仍表现为逻辑 contiguous(如 (197951, 1))。MFusion/DVM codegen 误判为 k.load,读取 GELU backward 等路径 mask buffer 时行列偏移错误,导致精度失败。纯 Inductor(不开 MFusion)无此问题,因不走 DVM k.load 路径。 **本 PR 范围**:在 **DVM codegen 消费端**,从 Inductor buffer layout 解析真实 stride,对 padding row stride 生成 **k.view_load(shape, stride, dtype)**,而非修改 wrapper 侧 empty_strided 分配 stride。 # 【修改方案】 ### 1. 新增 load_codegen.py(核心) 路径:torch_npu/_inductor/dvm/load_codegen.py | 函数 | 作用 | |------|------| | strides_match_contiguous() | 判断 stride 是否为逻辑 row-major contiguous(区分 padding stride) | | choose_load_codegen() | 逻辑 contiguous → k.load;padding row stride(末维为 1)→ k.view_load;不可 view → k.load + cont_flag=False | | patch_gm_placeholder_strides_from_codegen_args() | wrapper codegen 时通过 V.graph.try_get_buffer(name) 取 Inductor layout 真实 stride,写回 gm placeholder 的 meta["val"] | | _hint_int() | 兼容 UT / 非 compile 上下文(V.graphNullHandler 时兜底) | **选型规则(示例)**: | size | stride | 生成代码 | |------|--------|----------| | (256, 197951) | (197951, 1) | k.load([256, 197951], dtype) | | (256, 197951) | (198016, 1) | k.view_load([256, 197951], [198016, 1], dtype) | ### 2. 改造 graph_build.py - DvmCodegenInterpreter.placeholder() 直接读取 meta["val"].stride(),统一通过 choose_load_codegen() 替代原先仅依赖 val.is_contiguous() 的分支。 - 不再新增 input_strides 旁路参数;stride 信息由 codegen 前 patch 后的 FX meta 承载。 - is_fx_dynamic() 对缺失 meta["val"] 的节点安全跳过。 ### 3. 接入 MFusion / DVM graph fusion - mfusion/graph_fusion.py_emit_mfusion_dvm_codegen:对 fallback 实参 buffer 调用 patch_gm_placeholder_strides_from_codegen_args(sub_gm, args_list),再创建 DvmCodegenInterpreter。 - dvm/graph_fusion.py_dvm_generate_fallback_kernel:codegen 前对 meta.gm 同样 patch placeholder stride;_FusedMeta.codegen() 签名不变。 ### 4. 数据流(本 PR 触及部分) ``` Inductor Graph(memory planner → padding stride 写入 buffer layout) → Wrapper codegen(generate_fallback_kernel,buffer 名如 buf0) → patch_gm_placeholder_strides_from_codegen_args(gm, ["buf0", ...]) → placeholder meta["val"] stride 更新为 (198016, 1) → DvmCodegenInterpreter(gm).run() → placeholder 读 meta["val"].stride() → choose_load_codegen() → 生成 k.view_load([256, 197951], [198016, 1], bool) ← 本 PR → DVM runtime 按真实 stride 读 GM(无需 .contiguous() 拷贝) ``` 本 PR **不改** memory planner 分配语义,仅在 DVM **读端** 对齐 layout;stride 通过 FX meta 传递,与 Inductor 其它 pass 读 meta["val"] 的方式一致。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 - 无新增/变更对外 Python API、C++ 公开头文件或跨仓 RPC 接口。 - 行为变化限于 **DVM / MFusion Inductor codegen** 路径下 fused kernel 输入的 load 代码生成;非 DVM/MFusion 路径无影响。 # 【功能验证】 ### 1.. 模型精度(torchbench) ```bash cd benchmarks/torchbench python3 torchbench.py --accuracy --training --float32 \ --backend inductor --devices npu --npu-backend dvm --mfusion \ --only nvidia_deeprecommender --iterations 50 ``` **期望**: - 精度与 eager 一致(pass_accuracy); - 编译产物中 MFusion/DVM fused kernel 对 mask 类输入生成 **k.view_load(..., [198016, 1], ...)**(或等价 padding stride),而非仅 k.load。 **自验证**: > - torchbench:nvidia_deeprecommender float32 + mfusion + dvm accuracy 通过 ![image.png](https://raw.gitcode.com/user-images/assets/7404318/0747a421-c995-421a-b76b-12dc86f7fa84/image.png 'image.png') # 【CheckList】 - [x] 代码注释完备(load_codegen.py 模块与关键函数有 docstring) - [x] 边界处理(padding stride / 逻辑 contiguous / 不可 view / 缺失 buffer / NullHandler UT 兼容) - [x] PR 标题使用类型标签:fix(npu): DVM codegen view_load for memory-planner padding stride - [x] PR 持续集成流水线(CI)执行通过(合入前由 CI 最终确认) See merge request: Ascend/pytorch!371392 天前
fix(npu): DVM codegen view_load for memory-planner padding stride Co-authored-by: Margaret_wangrui<wangrui178@huawei.com> # message auto-generated for no-merge-commit merge: !37139 merge v2.7.1_empty_strided_new into v2.7.1 fix(npu): DVM codegen view_load for memory-planner padding stride Created-by: Margaret_wangrui Commit-by: Margaret_wangrui Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 https://gitcode.com/Ascend/pytorch/issues/2165 **说明**:修复 Inductor + DVM/MFusion 路径下 nvidia_deeprecommender 等模型 **float32 精度异常**。根因为 memory planner 为中间 buffer 分配 **对齐 padding stride**,而 DVM fused kernel 通过 k.load(shape) 按 **逻辑 contiguous stride** 读 GM,与真实 buffer layout 不一致。 **现象**:Inductor memory planner 为 bool 等 buffer 分配 **对齐 padding stride**(如 (198016, 1)),FX FakeTensor meta 仍表现为逻辑 contiguous(如 (197951, 1))。MFusion/DVM codegen 误判为 k.load,读取 GELU backward 等路径 mask buffer 时行列偏移错误,导致精度失败。纯 Inductor(不开 MFusion)无此问题,因不走 DVM k.load 路径。 **本 PR 范围**:在 **DVM codegen 消费端**,从 Inductor buffer layout 解析真实 stride,对 padding row stride 生成 **k.view_load(shape, stride, dtype)**,而非修改 wrapper 侧 empty_strided 分配 stride。 # 【修改方案】 ### 1. 新增 load_codegen.py(核心) 路径:torch_npu/_inductor/dvm/load_codegen.py | 函数 | 作用 | |------|------| | strides_match_contiguous() | 判断 stride 是否为逻辑 row-major contiguous(区分 padding stride) | | choose_load_codegen() | 逻辑 contiguous → k.load;padding row stride(末维为 1)→ k.view_load;不可 view → k.load + cont_flag=False | | patch_gm_placeholder_strides_from_codegen_args() | wrapper codegen 时通过 V.graph.try_get_buffer(name) 取 Inductor layout 真实 stride,写回 gm placeholder 的 meta["val"] | | _hint_int() | 兼容 UT / 非 compile 上下文(V.graphNullHandler 时兜底) | **选型规则(示例)**: | size | stride | 生成代码 | |------|--------|----------| | (256, 197951) | (197951, 1) | k.load([256, 197951], dtype) | | (256, 197951) | (198016, 1) | k.view_load([256, 197951], [198016, 1], dtype) | ### 2. 改造 graph_build.py - DvmCodegenInterpreter.placeholder() 直接读取 meta["val"].stride(),统一通过 choose_load_codegen() 替代原先仅依赖 val.is_contiguous() 的分支。 - 不再新增 input_strides 旁路参数;stride 信息由 codegen 前 patch 后的 FX meta 承载。 - is_fx_dynamic() 对缺失 meta["val"] 的节点安全跳过。 ### 3. 接入 MFusion / DVM graph fusion - mfusion/graph_fusion.py_emit_mfusion_dvm_codegen:对 fallback 实参 buffer 调用 patch_gm_placeholder_strides_from_codegen_args(sub_gm, args_list),再创建 DvmCodegenInterpreter。 - dvm/graph_fusion.py_dvm_generate_fallback_kernel:codegen 前对 meta.gm 同样 patch placeholder stride;_FusedMeta.codegen() 签名不变。 ### 4. 数据流(本 PR 触及部分) ``` Inductor Graph(memory planner → padding stride 写入 buffer layout) → Wrapper codegen(generate_fallback_kernel,buffer 名如 buf0) → patch_gm_placeholder_strides_from_codegen_args(gm, ["buf0", ...]) → placeholder meta["val"] stride 更新为 (198016, 1) → DvmCodegenInterpreter(gm).run() → placeholder 读 meta["val"].stride() → choose_load_codegen() → 生成 k.view_load([256, 197951], [198016, 1], bool) ← 本 PR → DVM runtime 按真实 stride 读 GM(无需 .contiguous() 拷贝) ``` 本 PR **不改** memory planner 分配语义,仅在 DVM **读端** 对齐 layout;stride 通过 FX meta 传递,与 Inductor 其它 pass 读 meta["val"] 的方式一致。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 - 无新增/变更对外 Python API、C++ 公开头文件或跨仓 RPC 接口。 - 行为变化限于 **DVM / MFusion Inductor codegen** 路径下 fused kernel 输入的 load 代码生成;非 DVM/MFusion 路径无影响。 # 【功能验证】 ### 1.. 模型精度(torchbench) ```bash cd benchmarks/torchbench python3 torchbench.py --accuracy --training --float32 \ --backend inductor --devices npu --npu-backend dvm --mfusion \ --only nvidia_deeprecommender --iterations 50 ``` **期望**: - 精度与 eager 一致(pass_accuracy); - 编译产物中 MFusion/DVM fused kernel 对 mask 类输入生成 **k.view_load(..., [198016, 1], ...)**(或等价 padding stride),而非仅 k.load。 **自验证**: > - torchbench:nvidia_deeprecommender float32 + mfusion + dvm accuracy 通过 ![image.png](https://raw.gitcode.com/user-images/assets/7404318/0747a421-c995-421a-b76b-12dc86f7fa84/image.png 'image.png') # 【CheckList】 - [x] 代码注释完备(load_codegen.py 模块与关键函数有 docstring) - [x] 边界处理(padding stride / 逻辑 contiguous / 不可 view / 缺失 buffer / NullHandler UT 兼容) - [x] PR 标题使用类型标签:fix(npu): DVM codegen view_load for memory-planner padding stride - [x] PR 持续集成流水线(CI)执行通过(合入前由 CI 最终确认) See merge request: Ascend/pytorch!371392 天前
fix(npu): DVM codegen view_load for memory-planner padding stride Co-authored-by: Margaret_wangrui<wangrui178@huawei.com> # message auto-generated for no-merge-commit merge: !37139 merge v2.7.1_empty_strided_new into v2.7.1 fix(npu): DVM codegen view_load for memory-planner padding stride Created-by: Margaret_wangrui Commit-by: Margaret_wangrui Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [x] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 https://gitcode.com/Ascend/pytorch/issues/2165 **说明**:修复 Inductor + DVM/MFusion 路径下 nvidia_deeprecommender 等模型 **float32 精度异常**。根因为 memory planner 为中间 buffer 分配 **对齐 padding stride**,而 DVM fused kernel 通过 k.load(shape) 按 **逻辑 contiguous stride** 读 GM,与真实 buffer layout 不一致。 **现象**:Inductor memory planner 为 bool 等 buffer 分配 **对齐 padding stride**(如 (198016, 1)),FX FakeTensor meta 仍表现为逻辑 contiguous(如 (197951, 1))。MFusion/DVM codegen 误判为 k.load,读取 GELU backward 等路径 mask buffer 时行列偏移错误,导致精度失败。纯 Inductor(不开 MFusion)无此问题,因不走 DVM k.load 路径。 **本 PR 范围**:在 **DVM codegen 消费端**,从 Inductor buffer layout 解析真实 stride,对 padding row stride 生成 **k.view_load(shape, stride, dtype)**,而非修改 wrapper 侧 empty_strided 分配 stride。 # 【修改方案】 ### 1. 新增 load_codegen.py(核心) 路径:torch_npu/_inductor/dvm/load_codegen.py | 函数 | 作用 | |------|------| | strides_match_contiguous() | 判断 stride 是否为逻辑 row-major contiguous(区分 padding stride) | | choose_load_codegen() | 逻辑 contiguous → k.load;padding row stride(末维为 1)→ k.view_load;不可 view → k.load + cont_flag=False | | patch_gm_placeholder_strides_from_codegen_args() | wrapper codegen 时通过 V.graph.try_get_buffer(name) 取 Inductor layout 真实 stride,写回 gm placeholder 的 meta["val"] | | _hint_int() | 兼容 UT / 非 compile 上下文(V.graphNullHandler 时兜底) | **选型规则(示例)**: | size | stride | 生成代码 | |------|--------|----------| | (256, 197951) | (197951, 1) | k.load([256, 197951], dtype) | | (256, 197951) | (198016, 1) | k.view_load([256, 197951], [198016, 1], dtype) | ### 2. 改造 graph_build.py - DvmCodegenInterpreter.placeholder() 直接读取 meta["val"].stride(),统一通过 choose_load_codegen() 替代原先仅依赖 val.is_contiguous() 的分支。 - 不再新增 input_strides 旁路参数;stride 信息由 codegen 前 patch 后的 FX meta 承载。 - is_fx_dynamic() 对缺失 meta["val"] 的节点安全跳过。 ### 3. 接入 MFusion / DVM graph fusion - mfusion/graph_fusion.py_emit_mfusion_dvm_codegen:对 fallback 实参 buffer 调用 patch_gm_placeholder_strides_from_codegen_args(sub_gm, args_list),再创建 DvmCodegenInterpreter。 - dvm/graph_fusion.py_dvm_generate_fallback_kernel:codegen 前对 meta.gm 同样 patch placeholder stride;_FusedMeta.codegen() 签名不变。 ### 4. 数据流(本 PR 触及部分) ``` Inductor Graph(memory planner → padding stride 写入 buffer layout) → Wrapper codegen(generate_fallback_kernel,buffer 名如 buf0) → patch_gm_placeholder_strides_from_codegen_args(gm, ["buf0", ...]) → placeholder meta["val"] stride 更新为 (198016, 1) → DvmCodegenInterpreter(gm).run() → placeholder 读 meta["val"].stride() → choose_load_codegen() → 生成 k.view_load([256, 197951], [198016, 1], bool) ← 本 PR → DVM runtime 按真实 stride 读 GM(无需 .contiguous() 拷贝) ``` 本 PR **不改** memory planner 分配语义,仅在 DVM **读端** 对齐 layout;stride 通过 FX meta 传递,与 Inductor 其它 pass 读 meta["val"] 的方式一致。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 - 无新增/变更对外 Python API、C++ 公开头文件或跨仓 RPC 接口。 - 行为变化限于 **DVM / MFusion Inductor codegen** 路径下 fused kernel 输入的 load 代码生成;非 DVM/MFusion 路径无影响。 # 【功能验证】 ### 1.. 模型精度(torchbench) ```bash cd benchmarks/torchbench python3 torchbench.py --accuracy --training --float32 \ --backend inductor --devices npu --npu-backend dvm --mfusion \ --only nvidia_deeprecommender --iterations 50 ``` **期望**: - 精度与 eager 一致(pass_accuracy); - 编译产物中 MFusion/DVM fused kernel 对 mask 类输入生成 **k.view_load(..., [198016, 1], ...)**(或等价 padding stride),而非仅 k.load。 **自验证**: > - torchbench:nvidia_deeprecommender float32 + mfusion + dvm accuracy 通过 ![image.png](https://raw.gitcode.com/user-images/assets/7404318/0747a421-c995-421a-b76b-12dc86f7fa84/image.png 'image.png') # 【CheckList】 - [x] 代码注释完备(load_codegen.py 模块与关键函数有 docstring) - [x] 边界处理(padding stride / 逻辑 contiguous / 不可 view / 缺失 buffer / NullHandler UT 兼容) - [x] PR 标题使用类型标签:fix(npu): DVM codegen view_load for memory-planner padding stride - [x] PR 持续集成流水线(CI)执行通过(合入前由 CI 最终确认) See merge request: Ascend/pytorch!371392 天前
[fix][v2.7.1] Add DVM op emitter dtype support rules Co-authored-by: huangchengnuo<huangchengnuo1@huawei.com> # message auto-generated for no-merge-commit merge: !36697 merge dvm-op-emitter-type-rule-v2.7.1 into v2.7.1 [fix][v2.7.1] Add DVM op emitter dtype support rules Created-by: SorryNaCN Commit-by: huangchengnuo Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 关联 issue/工单:https://gitcode.com/Ascend/pytorch/issues/1962 # Summary - Refactor DVM op registry entries to record supported input dtypes, output dtypes, and optional extra rules. - Keep default input/output dtype support to float32, float16, and bfloat16. - Add int32 input support for add/sub/mul and comparison operators. - Restrict logical operators to bool inputs and bool outputs. # Validation - git diff --check -- torch_npu/_inductor/dvm/op_emitter.py - python -m py_compile torch_npu/_inductor/dvm/op_emitter.py See merge request: Ascend/pytorch!366974 天前
[fix][v2.7.1] Add DVM op emitter dtype support rules Co-authored-by: huangchengnuo<huangchengnuo1@huawei.com> # message auto-generated for no-merge-commit merge: !36697 merge dvm-op-emitter-type-rule-v2.7.1 into v2.7.1 [fix][v2.7.1] Add DVM op emitter dtype support rules Created-by: SorryNaCN Commit-by: huangchengnuo Merged-by: ascend-robot Description: # 【合入来源】 - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 关联 issue/工单:https://gitcode.com/Ascend/pytorch/issues/1962 # Summary - Refactor DVM op registry entries to record supported input dtypes, output dtypes, and optional extra rules. - Keep default input/output dtype support to float32, float16, and bfloat16. - Add int32 input support for add/sub/mul and comparison operators. - Restrict logical operators to bool inputs and bool outputs. # Validation - git diff --check -- torch_npu/_inductor/dvm/op_emitter.py - python -m py_compile torch_npu/_inductor/dvm/op_emitter.py See merge request: Ascend/pytorch!366974 天前