| migrate-benchmarks-to-master Co-authored-by: LG<luguang6@huawei.com> # message auto-generated for no-merge-commit merge: !40570 merge migrate-benchmarks-v2.7.1-to-master into master migrate-benchmarks-to-master Created-by: Lu_G Commit-by: LG Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ https://gitcode.com/Ascend/pytorch/issues/2999 > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!40570 | 2 个月前 |
| fix(torchbench): support latest torchbench metadata Co-authored-by: liuyutong_bury<liuyutong25@huawei.com> # message auto-generated for no-merge-commit merge: !45981 merge codex/update-torchbench-benchmark-pin into master fix(torchbench): support latest torchbench metadata Created-by: liuyutong_bury Commit-by: liuyutong_bury Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> https://gitcode.com/Ascend/pytorch/issues/4671 > - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 1. 更新 benchmarks/torchbench/README.md 中 pytorch/benchmark 的推荐依赖版本,将默认 checkout commit 从 9910b31cc17d175a781412fd9ca6f18a4ee04610 更新为 fb14629994956c16d27c7a9940c5f081afbf68dc,并保留旧 commit 作为临时回退方式。 2. 在 benchmarks/torchbench/torchbench.py 中增加新版 pytorch/benchmark 元数据兼容逻辑。旧版本仍从 benchmark.userbenchmark.dynamo.dynamobench.torchbench 导入常量;新版不再导出这些常量时,改为从 torchbench.yaml 读取等价配置。 3. 该修改仅适配 pytorch/benchmark 配置结构变化,不改变 TorchBench runner 执行流程、命令行参数和 NPU backend 选择逻辑。 # 【资料变更】 涉及资料变更。 更新 TorchBench 使用文档中的 pytorch/benchmark 推荐 commit,并补充旧 commit 的回退命令,便于在新版 benchmark 出现兼容问题时快速恢复到历史验证版本。 # 【接口变更】 不涉及客户面可见接口变更。 本次修改不新增、不删除命令行参数,不改变 --backend、--npu-backend、--training、--inference 等已有使用方式。 # 【功能验证】 已完成以下验证: bash python -m py_compile benchmarks/torchbench/torchbench.py 基于新版 pytorch/benchmark commit fb14629994956c16d27c7a9940c5f081afbf68dc 执行: bash python torchbench.py --help 执行 NPU smoke 验证: bash python torchbench.py --devices npu --backend inductor \ --npu-backend triton_experimental --disable-aclgraph \ --accuracy --training --only alexnet --iterations 1 --timeout 900 验证结果: text npu train alexnet pass_accuracy exit code: 0 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!45981 | 18 天前 |
| fix(benchmark): vision_maskrcnn + fambench_xlmr NPU 适配(npu_support register_patch 注入) Co-authored-by: huyuchao<huyuchao2@huawei.com> # message auto-generated for no-merge-commit merge: !46021 merge vision-maskrcnn-npu-adapt into master fix(benchmark): vision_maskrcnn + fambench_xlmr NPU 适配(npu_support register_patch 注入) Created-by: huyuchao Commit-by: huyuchao Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 - [x] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 本 PR 合并两个模型的 NPU runner 侧适配(原 #45955 xlmr 改动并入本 PR 提交),均与库上其余模型 register_patch 惯例同构、机制零新增: ## 1. vision_maskrcnn(close #4687) torchvision 本栈 wheel 无 torchvision::nms / torchvision::roi_align 的 CPU kernel,NPU 张量 fallback 到 CPU dispatcher 后推理失败。npu_support.py 新增 @register_patch("vision_maskrcnn"): - torchvision.ops.boxes.nms:boxes.is_npu 时路由 torch.ops.npu.npu_nms_with_mask(boxes[N,4]+scores 拼 [N,5];uint8 keep mask 转 bool、索引转 long 以通过 dynamo fake 校验); - 真子模块 torchvision.ops.roi_align(import_module 取真模块,包属性被同名函数遮蔽)及 torchvision.ops.poolers.roi_align:input.is_npu 时路由 torch.ops.npu.npu_roi_align; - CPU 路径保持原 torchvision 实现;模块级幂等旗标;torchvision ImportError 兜底跳过。 ## 2. fambench_xlmr(close #4686,原 #45955 并入) - torchbench.py:CANARY_MODELS 白名单加入 fambench_xlmr(canary_models 目录下模型默认不加载)。**全量套件仍走 SKIP**——default 后端该模型编译器侧编译失败,不纳入全量,仅 --only 手动选跑; - npu_support.py 新增 @register_patch("fambench_xlmr"):Model.__init__ 包装内 scoped torch.load → weights_only=False(torch>=2.6 默认拒绝 fairseq checkpoint,含 argparse.Namespace 等非张量对象;官方权重可信;try/finally 恢复不污染); - 深拷贝递归按**上游 DEEPCOPY 契约**整改(模型侧零 monkeypatch):模型源码自带 DEEPCOPY = False 声明(fairseq HubInterface 动态 __getattr__ 代理致 deepcopy 无限递归,源码注释即 RecursionError)——common.py deepcopy_model 镜像上游 util/env_check.py 语义(DEEPCOPY=False 不拷贝)、torchbench.py load_model 旗标传递镜像 util/backends/cudagraph.py 挂载模式。影响面:DEEPCOPY=False 的 8 模型中全量套件仅 drq 在运行列表,行为回到上游 env_check 语义;hf/timm runner 不传旗标默认 True 不变。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 环境:master 36a38cc..b3fbaac + torch 2.13.0+cpu + triton-ascend 3.2.2 + CANN 9.1.0-beta.1(Atlas 910B2) 命令:torchbench.py --devices npu --inference --disable-aclgraph --only <model> --npu-backend triton_experimental | 模型 | perf(TE 后端) | accuracy(TE 后端) | |---|---|---| | vision_maskrcnn | **0.467x**(26 图编译成功;合并 xlmr 后复测 0.467x 一致) | **pass_accuracy**(patched nms/roi_align 路径 fp64/eager/compiled 三路自洽) | | fambench_xlmr | **1.145x**(6 图编译成功;合并后复测一致) | **pass_accuracy**(fp64 golden + eager 两跑一致 + compiled 对比全过) | 已知限制(本 PR 不涉及):default 后端对 fambench_xlmr 仍编译器侧编译失败(safe_softmax 融合 kernel UB overflow,属前端/编译器问题);本 PR 只做 runner 侧可用性适配,目标后端为 triton_experimental。xlmr 运行依赖 fairseq 0.12.2(py3.11 兼容需前置处理)与 ~1GB 官方权重下载,属基准仓环境约定。 无 UT 新增(benchmark 基建改动,以 torchbench runner 端到端验证) # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签(fix) - [x] PR持续集成流水线(CI)执行通过,代码检查无异常(本地端到端验证通过;CI 流水线以本次推送触发结果为准) issue/工单: https://gitcode.com/Ascend/pytorch/issues/4687 issue/工单: https://gitcode.com/Ascend/pytorch/issues/4686 See merge request: Ascend/pytorch!46021 | 12 天前 |
| migrate-benchmarks-to-master Co-authored-by: LG<luguang6@huawei.com> # message auto-generated for no-merge-commit merge: !40570 merge migrate-benchmarks-v2.7.1-to-master into master migrate-benchmarks-to-master Created-by: Lu_G Commit-by: LG Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ https://gitcode.com/Ascend/pytorch/issues/2999 > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!40570 | 2 个月前 |
| fix(triton_experimental): preserve layout in boundary downcast; add AllenaiLongformerBase Co-authored-by: AACAES<liuyan7892@163.com> # message auto-generated for no-merge-commit merge: !46062 merge longformer-model-and-downcast-layout-fix into master fix(triton_experimental): preserve layout in boundary downcast; add AllenaiLongformerBase Created-by: AACAES Commit-by: AACAES Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 https://gitcode.com/Ascend/pytorch/issues/4701 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) ## 1. 问题现象 torchbench AllenaiLongformerBase --accuracy --train --float32 训练 accuracy check 失败(33.22)。排查定位出**两个相互独立的根因**,本 PR 一并修复: - **根因 A(int64/fp64 边界降档布局塌缩)**:最小复现为重叠 as_strided int64 视图经 compile 的 clone 路径,2359296 个元素中 2260992 个错误(96%)。详见关联 issue。 - **根因 B(dropout packed mask 位序错乱)**:eager/compile loss diff 随训练步数线性放大(1e-7 → 5.8e-4);forward logits 干净,但经 dropout_backward 的 Q/K 投影梯度 rel ~145% 错误,V/output 梯度正常。 ## 2. 问题根因 ### A. 边界降档布局塌缩 NPU 不支持 int64/float64,triton_experimental 在 kernel 参数边界做降档:签名 *i64→*i32,launcher 运行时 Tensor.to() 转换数据。__Tensor.to() 对非 non-overlapping-and-dense 布局(重叠 as_strided 视图、gapped slice、broadcast)会静默塌缩为 contiguous__,而 Triton kernel 的 load/store 公式按编译期记录的 stride 生成——缓冲布局变了、寻址公式没变,读/写错位置。 三个受影响位置(同根因): 1. 输入侧 _memoized_downcast:src.to(dst_dtype) 塌缩布局(Longformer 触发点); 2. 输出侧 empty_like:对非 dense 张量同样塌缩为 contiguous; 3. 回写 orig.copy_(tmp.to(src_dt)):功能正确但多一次整块 src_dtype 中间物化。 ### B. dropout packed mask 位序错乱 torch_npu dropout decomposition 把 aten.native_dropout 替换为 npu._npu_dropout(返回按输入 C 序内存遍历序 bit-packed 的 uint8 mask),而 backward 的 npu.npu_dropout_backward 按 __grad 的物理遍历序__ 解包。当 backward grad 是 FX 图显式 permute 视图(Longformer _unskew 反传固有,inductor 以 stride-only reinterpret 保留)时,两种遍历序不同 → mask 位错乱 → 梯度错误并随训练混沌放大超容差。 ## 3. 修改原理 ### A. 降档缓冲保持布局(npu_triton_heuristics.py) 核心思路:__降档缓冲必须保持参数的原始 stride,成为编译期寻址公式的合法替身__。 新增三个 helper: - _is_non_overlapping_and_dense(t):c10 compute_non_overlapping_and_dense 的 Python 孪生实现; - _reachable_span(t):从 data_ptr 起可达存储跨度,cast 与回写共用同一计算,不会漂移; - _to_dtype_preserving_layout(src, dst_dtype): - dense 张量(绝大多数 kernel 参数):走原快路径 src.to(dst_dtype),行为与旧代码逐字节一致; - 零元素张量:.to() 短路(span-1 视图对空存储非法); - 非 dense:把可达 span 视作 dense 1-D 张量做 .to()(对存储单元逐格 cast),再 as_strided 回原 shape/stride。别名单元在源中本就同值,逐格 cast 精确且无顺序问题; - gapped 视图 span 超过 4×numel 时 log.debug 提示内存放大(上游 contiguify 可消除)。 配套(_wrap_launcher_with_downcast 内): - 输出侧 empty_like → empty_strided(a.shape, a.stride());in/out 参数(需保留输入内容)改走 _to_dtype_preserving_layout; - 回写 orig.copy_(tmp):copy_ 原生带 dtype cast,省掉整块 src_dtype 中间物化(2048² 实测 3.2× 提速);仅当 torch._debug_has_internal_overlap(orig) == 1(expand 族——copy_ 拒绝的唯一种类,与 ATen 内部 guard 同条件判定)时退化 flat span 逐格回写;TooHard(重叠 as_strided/gapped)走逻辑 copy_,OOM/设备错误正常传播、不会被误捕进 flat 分支。 ### B. dropout grad 物化对齐遍历序(decomposition.py) native_dropout_backward 的 packed 分支给 grad 加 .contiguous()(一行;已 contiguous 时 no-op),对齐打包/解包的内存遍历序。 ### C. 模型上库(benchmarks/) torchbench 增加 AllenaiLongformerBase:huggingface_models_list.txt 增加条目;huggingface.py 的 EXTRA_MODELS 增加映射(AutoConfig.from_pretrained 惰性 lambda + AutoModelForMaskedLM,避免 import 期访问网络),_download_model 支持 from_config() 工厂实例化,_get_model_cls_and_config 支持 callable config。该模型名非 transformers 类名,无此映射则 AttributeError: module transformers has no attribute AlleniLongformerBase。 ## 4. 影响范围 - 修复 A 仅影响 triton_experimental 后端 boundary downcast 路径(i64/fp64 kernel 参数);修复 B 仅影响 native_dropout_backward packed 分支;均不修改上游 torch 源码,改动全部在 torch_npu 侧 - __dense 快路径(绝大多数参数)行为与旧代码逐字节一致__;非 dense 参数从"布局塌缩读写错数据"变为"布局保持读写正确" - 已知 trade-off:gapped 参数的降档临时缓冲按存储 span 分配(可大于 numel,log.debug 提示);重叠视图反而更省(span < numel,别名格只 cast 一次) - 模型侧为纯增量(新模型条目 + EXTRA_MODELS 泛化机制),不影响既有模型 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 新增两个看护测试文件,共 9 个用例,全部通过: **test/_inductor/test_triton_experimental_downcast_layout.py(5 个用例)** | 用例 | 看护 | | --- | --- | | test_helper_layout_semantics | _is_non_overlapping_and_dense 判定(contiguous/permute/expand/gapped/overlap/size-1 维)、各布局 cast 后 stride 保持 + 值正确、memo 命中路径(Longformer 235 万元素形状)、零元素短路 | | test_compiled_overlap_int64_clone | __Longformer 触发场景__(编译路径,修复前 96% 元素错误) | | test_compiled_gapped_int64_clone | gapped slice 编译路径 | | test_compiled_mutated_int64_writeback | in/out 参数降档 + 回写 round-trip | | test_compiled_overlap_mutated_writeback | 真重叠视图(行距 512 < 行长 1024,相邻行共享 512 元素)mutated 参数回写 | **test/_inductor/test_triton_experimental_dropout_mask_layout.py(4 个用例)** | 用例 | 看护 | | --- | --- | | test_compiled_dropout_mask_matches_eager | 编译路径 dropout mask 与 eager 一致 | | test_contiguous_grad_control | contiguous grad 对照组 | | test_longformer_unskew_shape | Longformer _unskew 反传形状场景 | | test_permuted_grad_matches_eager | permute 视图 grad 与 eager 一致 | **端到端验证**: - Longformer 12 层全模型单步梯度:Q/K 投影 rel ~2% → ~1e-6(max_abs 总和 5.7e-3 → 4.3e-7) - torchbench AllenaiLongformerBase --accuracy --train --float32 --iterations 5 --accu-summary:pass_accuracy(logits max 3.6e-6、grads failed 0/274、loss bit-exact) **性能自验:** ① dense:零开销。1.01×——符合设计,快路径与旧代码逐字节一致,绝大多数 kernel 参数(dense)不受影响。 ② overlap:新路径快 3.8 倍。两个因素叠加:cast 的格子数更少(span 0.75 亿 < numel 1 亿,别名格只 cast 一次)+ 访存模式从“按逻辑位置 strided 读写”变成“线性扫描”。旧路径 357 GB/s vs 新路径 1026 GB/s——旧路径的非 dense TensorIterator 逻辑拷贝在这个形状下带宽利用率只有 1/3。 ③ gapped:cast 3 倍的格子反而快 4 倍。这是最有说服力的一组:新路径要处理 3 亿格(含洞),是旧路径 1 亿逻辑元素的 3 倍工作量,却仍快 4.1×。原因是访问模式的代差——[::3] 的逻辑读是“每 24 字节取 8 字节”的散读,带宽利用率仅 69 GB/s;线性扫描把 HBM 带宽打到 838 GB/s。线性但冗余 的访问完胜 稀疏但精准 的访问。  **显存自验:** ①旧路径的显存代价比理论高——它有隐性中转 overlap 旧行为实测 1145 MiB = 763(numel×8B 的 int64 contiguous 中转)+ 382(numel×4B 输出)。也就是说 torch_npu 的 .to() 对非 dense 输入并非“一步 cast”,而是先物化一份 contiguous int64 中转,再cast。这个分解同时统一解释了上一轮的性能数据: - 旧 overlap 3.13ms ≈ 多搬一遍中转的全量数据;新路径 0.82ms 无中转; - 旧 gapped 16.27ms = 中转阶段的 [::3] gather(正是 stride 扫描里那种散读)占绝对大头。 ② gapped 的“3× 放大”当前被隐性中转恰好抵消 理论上新路径 gapped temp 应是旧路径的 3 倍(span 3亿格 vs numel 1亿元素),但实测峰值持平(1144 vs 1145)——因为旧路径的隐性中转本来就要付 763+382。注意这是当前 NPU 实现的“侥幸持平”:若将来torch_npu 优化掉 .to() 的隐性中转,gapped 的 3× temp 放大就会真正显形——PR 里那条 debug 日志(span > 4×numel 提示contiguify upstream)作为长期指引依然正确。 ③峰值 vs 驻留要分开算 - 峰值(上表):修复后无任何场景恶化,dense/overlap 显著改善; - 驻留:dedup_downcast 开启时,每个非 dense 参数的 temp 会随 memo 驻留,生命周期跟随原张量(weakref)——机制与修复前一致,只是单份体积从 numel×4B 变为span×4B(overlap 减半、gapped 放大至 s×); - 真正的显存大头始终是原 int64 参数本身(模型的存储),temp 是它的 1/2(span×4B vs 原始 span×8B)。  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!46062 | 8 天前 |
| fix(triton_experimental): preserve layout in boundary downcast; add AllenaiLongformerBase Co-authored-by: AACAES<liuyan7892@163.com> # message auto-generated for no-merge-commit merge: !46062 merge longformer-model-and-downcast-layout-fix into master fix(triton_experimental): preserve layout in boundary downcast; add AllenaiLongformerBase Created-by: AACAES Commit-by: AACAES Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 https://gitcode.com/Ascend/pytorch/issues/4701 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) ## 1. 问题现象 torchbench AllenaiLongformerBase --accuracy --train --float32 训练 accuracy check 失败(33.22)。排查定位出**两个相互独立的根因**,本 PR 一并修复: - **根因 A(int64/fp64 边界降档布局塌缩)**:最小复现为重叠 as_strided int64 视图经 compile 的 clone 路径,2359296 个元素中 2260992 个错误(96%)。详见关联 issue。 - **根因 B(dropout packed mask 位序错乱)**:eager/compile loss diff 随训练步数线性放大(1e-7 → 5.8e-4);forward logits 干净,但经 dropout_backward 的 Q/K 投影梯度 rel ~145% 错误,V/output 梯度正常。 ## 2. 问题根因 ### A. 边界降档布局塌缩 NPU 不支持 int64/float64,triton_experimental 在 kernel 参数边界做降档:签名 *i64→*i32,launcher 运行时 Tensor.to() 转换数据。__Tensor.to() 对非 non-overlapping-and-dense 布局(重叠 as_strided 视图、gapped slice、broadcast)会静默塌缩为 contiguous__,而 Triton kernel 的 load/store 公式按编译期记录的 stride 生成——缓冲布局变了、寻址公式没变,读/写错位置。 三个受影响位置(同根因): 1. 输入侧 _memoized_downcast:src.to(dst_dtype) 塌缩布局(Longformer 触发点); 2. 输出侧 empty_like:对非 dense 张量同样塌缩为 contiguous; 3. 回写 orig.copy_(tmp.to(src_dt)):功能正确但多一次整块 src_dtype 中间物化。 ### B. dropout packed mask 位序错乱 torch_npu dropout decomposition 把 aten.native_dropout 替换为 npu._npu_dropout(返回按输入 C 序内存遍历序 bit-packed 的 uint8 mask),而 backward 的 npu.npu_dropout_backward 按 __grad 的物理遍历序__ 解包。当 backward grad 是 FX 图显式 permute 视图(Longformer _unskew 反传固有,inductor 以 stride-only reinterpret 保留)时,两种遍历序不同 → mask 位错乱 → 梯度错误并随训练混沌放大超容差。 ## 3. 修改原理 ### A. 降档缓冲保持布局(npu_triton_heuristics.py) 核心思路:__降档缓冲必须保持参数的原始 stride,成为编译期寻址公式的合法替身__。 新增三个 helper: - _is_non_overlapping_and_dense(t):c10 compute_non_overlapping_and_dense 的 Python 孪生实现; - _reachable_span(t):从 data_ptr 起可达存储跨度,cast 与回写共用同一计算,不会漂移; - _to_dtype_preserving_layout(src, dst_dtype): - dense 张量(绝大多数 kernel 参数):走原快路径 src.to(dst_dtype),行为与旧代码逐字节一致; - 零元素张量:.to() 短路(span-1 视图对空存储非法); - 非 dense:把可达 span 视作 dense 1-D 张量做 .to()(对存储单元逐格 cast),再 as_strided 回原 shape/stride。别名单元在源中本就同值,逐格 cast 精确且无顺序问题; - gapped 视图 span 超过 4×numel 时 log.debug 提示内存放大(上游 contiguify 可消除)。 配套(_wrap_launcher_with_downcast 内): - 输出侧 empty_like → empty_strided(a.shape, a.stride());in/out 参数(需保留输入内容)改走 _to_dtype_preserving_layout; - 回写 orig.copy_(tmp):copy_ 原生带 dtype cast,省掉整块 src_dtype 中间物化(2048² 实测 3.2× 提速);仅当 torch._debug_has_internal_overlap(orig) == 1(expand 族——copy_ 拒绝的唯一种类,与 ATen 内部 guard 同条件判定)时退化 flat span 逐格回写;TooHard(重叠 as_strided/gapped)走逻辑 copy_,OOM/设备错误正常传播、不会被误捕进 flat 分支。 ### B. dropout grad 物化对齐遍历序(decomposition.py) native_dropout_backward 的 packed 分支给 grad 加 .contiguous()(一行;已 contiguous 时 no-op),对齐打包/解包的内存遍历序。 ### C. 模型上库(benchmarks/) torchbench 增加 AllenaiLongformerBase:huggingface_models_list.txt 增加条目;huggingface.py 的 EXTRA_MODELS 增加映射(AutoConfig.from_pretrained 惰性 lambda + AutoModelForMaskedLM,避免 import 期访问网络),_download_model 支持 from_config() 工厂实例化,_get_model_cls_and_config 支持 callable config。该模型名非 transformers 类名,无此映射则 AttributeError: module transformers has no attribute AlleniLongformerBase。 ## 4. 影响范围 - 修复 A 仅影响 triton_experimental 后端 boundary downcast 路径(i64/fp64 kernel 参数);修复 B 仅影响 native_dropout_backward packed 分支;均不修改上游 torch 源码,改动全部在 torch_npu 侧 - __dense 快路径(绝大多数参数)行为与旧代码逐字节一致__;非 dense 参数从"布局塌缩读写错数据"变为"布局保持读写正确" - 已知 trade-off:gapped 参数的降档临时缓冲按存储 span 分配(可大于 numel,log.debug 提示);重叠视图反而更省(span < numel,别名格只 cast 一次) - 模型侧为纯增量(新模型条目 + EXTRA_MODELS 泛化机制),不影响既有模型 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 新增两个看护测试文件,共 9 个用例,全部通过: **test/_inductor/test_triton_experimental_downcast_layout.py(5 个用例)** | 用例 | 看护 | | --- | --- | | test_helper_layout_semantics | _is_non_overlapping_and_dense 判定(contiguous/permute/expand/gapped/overlap/size-1 维)、各布局 cast 后 stride 保持 + 值正确、memo 命中路径(Longformer 235 万元素形状)、零元素短路 | | test_compiled_overlap_int64_clone | __Longformer 触发场景__(编译路径,修复前 96% 元素错误) | | test_compiled_gapped_int64_clone | gapped slice 编译路径 | | test_compiled_mutated_int64_writeback | in/out 参数降档 + 回写 round-trip | | test_compiled_overlap_mutated_writeback | 真重叠视图(行距 512 < 行长 1024,相邻行共享 512 元素)mutated 参数回写 | **test/_inductor/test_triton_experimental_dropout_mask_layout.py(4 个用例)** | 用例 | 看护 | | --- | --- | | test_compiled_dropout_mask_matches_eager | 编译路径 dropout mask 与 eager 一致 | | test_contiguous_grad_control | contiguous grad 对照组 | | test_longformer_unskew_shape | Longformer _unskew 反传形状场景 | | test_permuted_grad_matches_eager | permute 视图 grad 与 eager 一致 | **端到端验证**: - Longformer 12 层全模型单步梯度:Q/K 投影 rel ~2% → ~1e-6(max_abs 总和 5.7e-3 → 4.3e-7) - torchbench AllenaiLongformerBase --accuracy --train --float32 --iterations 5 --accu-summary:pass_accuracy(logits max 3.6e-6、grads failed 0/274、loss bit-exact) **性能自验:** ① dense:零开销。1.01×——符合设计,快路径与旧代码逐字节一致,绝大多数 kernel 参数(dense)不受影响。 ② overlap:新路径快 3.8 倍。两个因素叠加:cast 的格子数更少(span 0.75 亿 < numel 1 亿,别名格只 cast 一次)+ 访存模式从“按逻辑位置 strided 读写”变成“线性扫描”。旧路径 357 GB/s vs 新路径 1026 GB/s——旧路径的非 dense TensorIterator 逻辑拷贝在这个形状下带宽利用率只有 1/3。 ③ gapped:cast 3 倍的格子反而快 4 倍。这是最有说服力的一组:新路径要处理 3 亿格(含洞),是旧路径 1 亿逻辑元素的 3 倍工作量,却仍快 4.1×。原因是访问模式的代差——[::3] 的逻辑读是“每 24 字节取 8 字节”的散读,带宽利用率仅 69 GB/s;线性扫描把 HBM 带宽打到 838 GB/s。线性但冗余 的访问完胜 稀疏但精准 的访问。  **显存自验:** ①旧路径的显存代价比理论高——它有隐性中转 overlap 旧行为实测 1145 MiB = 763(numel×8B 的 int64 contiguous 中转)+ 382(numel×4B 输出)。也就是说 torch_npu 的 .to() 对非 dense 输入并非“一步 cast”,而是先物化一份 contiguous int64 中转,再cast。这个分解同时统一解释了上一轮的性能数据: - 旧 overlap 3.13ms ≈ 多搬一遍中转的全量数据;新路径 0.82ms 无中转; - 旧 gapped 16.27ms = 中转阶段的 [::3] gather(正是 stride 扫描里那种散读)占绝对大头。 ② gapped 的“3× 放大”当前被隐性中转恰好抵消 理论上新路径 gapped temp 应是旧路径的 3 倍(span 3亿格 vs numel 1亿元素),但实测峰值持平(1144 vs 1145)——因为旧路径的隐性中转本来就要付 763+382。注意这是当前 NPU 实现的“侥幸持平”:若将来torch_npu 优化掉 .to() 的隐性中转,gapped 的 3× temp 放大就会真正显形——PR 里那条 debug 日志(span > 4×numel 提示contiguify upstream)作为长期指引依然正确。 ③峰值 vs 驻留要分开算 - 峰值(上表):修复后无任何场景恶化,dense/overlap 显著改善; - 驻留:dedup_downcast 开启时,每个非 dense 参数的 temp 会随 memo 驻留,生命周期跟随原张量(weakref)——机制与修复前一致,只是单份体积从 numel×4B 变为span×4B(overlap 减半、gapped 放大至 s×); - 真正的显存大头始终是原 int64 参数本身(模型的存储),temp 是它的 1/2(span×4B vs 原始 span×8B)。  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!46062 | 8 天前 |
| migrate-benchmarks-to-master Co-authored-by: LG<luguang6@huawei.com> # message auto-generated for no-merge-commit merge: !40570 merge migrate-benchmarks-v2.7.1-to-master into master migrate-benchmarks-to-master Created-by: Lu_G Commit-by: LG Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ https://gitcode.com/Ascend/pytorch/issues/2999 > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!40570 | 2 个月前 |
| fix(benchmark): vision_maskrcnn + fambench_xlmr NPU 适配(npu_support register_patch 注入) Co-authored-by: huyuchao<huyuchao2@huawei.com> # message auto-generated for no-merge-commit merge: !46021 merge vision-maskrcnn-npu-adapt into master fix(benchmark): vision_maskrcnn + fambench_xlmr NPU 适配(npu_support register_patch 注入) Created-by: huyuchao Commit-by: huyuchao Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 - [x] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 本 PR 合并两个模型的 NPU runner 侧适配(原 #45955 xlmr 改动并入本 PR 提交),均与库上其余模型 register_patch 惯例同构、机制零新增: ## 1. vision_maskrcnn(close #4687) torchvision 本栈 wheel 无 torchvision::nms / torchvision::roi_align 的 CPU kernel,NPU 张量 fallback 到 CPU dispatcher 后推理失败。npu_support.py 新增 @register_patch("vision_maskrcnn"): - torchvision.ops.boxes.nms:boxes.is_npu 时路由 torch.ops.npu.npu_nms_with_mask(boxes[N,4]+scores 拼 [N,5];uint8 keep mask 转 bool、索引转 long 以通过 dynamo fake 校验); - 真子模块 torchvision.ops.roi_align(import_module 取真模块,包属性被同名函数遮蔽)及 torchvision.ops.poolers.roi_align:input.is_npu 时路由 torch.ops.npu.npu_roi_align; - CPU 路径保持原 torchvision 实现;模块级幂等旗标;torchvision ImportError 兜底跳过。 ## 2. fambench_xlmr(close #4686,原 #45955 并入) - torchbench.py:CANARY_MODELS 白名单加入 fambench_xlmr(canary_models 目录下模型默认不加载)。**全量套件仍走 SKIP**——default 后端该模型编译器侧编译失败,不纳入全量,仅 --only 手动选跑; - npu_support.py 新增 @register_patch("fambench_xlmr"):Model.__init__ 包装内 scoped torch.load → weights_only=False(torch>=2.6 默认拒绝 fairseq checkpoint,含 argparse.Namespace 等非张量对象;官方权重可信;try/finally 恢复不污染); - 深拷贝递归按**上游 DEEPCOPY 契约**整改(模型侧零 monkeypatch):模型源码自带 DEEPCOPY = False 声明(fairseq HubInterface 动态 __getattr__ 代理致 deepcopy 无限递归,源码注释即 RecursionError)——common.py deepcopy_model 镜像上游 util/env_check.py 语义(DEEPCOPY=False 不拷贝)、torchbench.py load_model 旗标传递镜像 util/backends/cudagraph.py 挂载模式。影响面:DEEPCOPY=False 的 8 模型中全量套件仅 drq 在运行列表,行为回到上游 env_check 语义;hf/timm runner 不传旗标默认 True 不变。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 环境:master 36a38cc..b3fbaac + torch 2.13.0+cpu + triton-ascend 3.2.2 + CANN 9.1.0-beta.1(Atlas 910B2) 命令:torchbench.py --devices npu --inference --disable-aclgraph --only <model> --npu-backend triton_experimental | 模型 | perf(TE 后端) | accuracy(TE 后端) | |---|---|---| | vision_maskrcnn | **0.467x**(26 图编译成功;合并 xlmr 后复测 0.467x 一致) | **pass_accuracy**(patched nms/roi_align 路径 fp64/eager/compiled 三路自洽) | | fambench_xlmr | **1.145x**(6 图编译成功;合并后复测一致) | **pass_accuracy**(fp64 golden + eager 两跑一致 + compiled 对比全过) | 已知限制(本 PR 不涉及):default 后端对 fambench_xlmr 仍编译器侧编译失败(safe_softmax 融合 kernel UB overflow,属前端/编译器问题);本 PR 只做 runner 侧可用性适配,目标后端为 triton_experimental。xlmr 运行依赖 fairseq 0.12.2(py3.11 兼容需前置处理)与 ~1GB 官方权重下载,属基准仓环境约定。 无 UT 新增(benchmark 基建改动,以 torchbench runner 端到端验证) # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签(fix) - [x] PR持续集成流水线(CI)执行通过,代码检查无异常(本地端到端验证通过;CI 流水线以本次推送触发结果为准) issue/工单: https://gitcode.com/Ascend/pytorch/issues/4687 issue/工单: https://gitcode.com/Ascend/pytorch/issues/4686 See merge request: Ascend/pytorch!46021 | 12 天前 |
| migrate-benchmarks-to-master Co-authored-by: LG<luguang6@huawei.com> # message auto-generated for no-merge-commit merge: !40570 merge migrate-benchmarks-v2.7.1-to-master into master migrate-benchmarks-to-master Created-by: Lu_G Commit-by: LG Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ https://gitcode.com/Ascend/pytorch/issues/2999 > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!40570 | 2 个月前 |
| add torchbench models, deps and fix copy_ lowering with slice Co-authored-by: wangzili<wangzili14@huawei.com> # message auto-generated for no-merge-commit merge: !43689 merge add/torchbench-models-list-master into master add torchbench models, deps and fix copy_ lowering with slice Created-by: wangzili121 Commit-by: wangzili Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 新增多张torchbench网络及相应依赖 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 已验证功能正常精度通过 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43689 | 1 个月前 |
| benchmarks set timm models tol master Co-authored-by: LG<luguang6@huawei.com> # message auto-generated for no-merge-commit merge: !44250 merge benchmarks_set_timm_models_tol_master into master benchmarks set timm models tol master Created-by: Lu_G Commit-by: LG Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ https://gitcode.com/Ascend/pytorch/issues/3884 > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 调整deit_base_distilled_patch16_224网络的阈值,当前网络的平均绝对误差在阈值范围内,仅最大绝对误差稍微超出阈值,所以调整一下网络阈值。 # 【资料变更】 > 不涉及 # 【接口变更】 > 不涉及 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44250 | 1 个月前 |
| benchmarks_add_timm_models_master Co-authored-by: LG<luguang6@huawei.com> # message auto-generated for no-merge-commit merge: !43694 merge benchmarks_add_timm_models_master into master benchmarks_add_timm_models_master Created-by: Lu_G Commit-by: LG Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ https://gitcode.com/Ascend/pytorch/issues/3649 > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [x] 需求 - [ ] 问题单 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 > 为benchmark新增timm_models,增加执行脚本和模型列表 # 【资料变更】 > 不涉及 # 【接口变更】 > 不涉及 # 【功能验证】 > 自验通过 | 序号 | model_name | GPU_accuracy | NPU_accuracy | eager_E2E | dvm_E2E | E2E_speed_up_rate | eager_OP | dvm_OP | OP_speed_up_rate | |------|------------|--------------|--------------|-----------|---------|-------------------|----------|--------|------------------| | 1 | adv_inception_v3 | pass_accuracy | pass_accuracy | 113.26 | 56.3 | 2.011722913 | 80.118958 | 51.9483505 | 1.542281078 | | 2 | beit_base_patch16_224 | pass_accuracy | pass_accuracy | 47.28 | 40.57 | 1.165393148 | 39.238539 | 38.138099 | 1.028854086 | | 3 | convnextv2_nano.fcmae_ft_in22k_in1k | pass_accuracy | pass_accuracy | 36.47 | 30.37 | 1.200856108 | 29.810894 | 28.3587415 | 1.051206521 | | 4 | deit_base_distilled_patch16_224 | pass_accuracy | pass_accuracy | 35.82 | 28.33 | 1.264384045 | 27.8200285 | 26.4651315 | 1.051195551 | | 5 | deit_tiny_patch16_224.fb_in1k | pass_accuracy | pass_accuracy | 32.71 | 12.29 | 2.661513426 | 10.8949805 | 10.1707415 | 1.071208083 | | 6 | ghostnet_100 | pass_accuracy | pass_accuracy | 76.88 | 29.02 | 2.649207443 | 60.3077805 | 25.2047705 | 2.392712939 | | 7 | mobilenetv2_100 | pass_accuracy | pass_accuracy | 54.62 | 21.74 | 2.512419503 | 37.306266 | 19.112664 | 1.951913454 | | 8 | mobilenetv3_large_100 | pass_accuracy | pass_accuracy | 62.18 | 20.54 | 3.027263875 | 45.8041975 | 17.432945 | 2.627450353 | | 9 | mobilevit_s | pass_accuracy | pass_accuracy | 57.7 | 31.26 | 1.845809341 | 37.2017535 | 28.687522 | 1.296792156 | | 10 | nfnet_l0 | pass_accuracy | pass_accuracy | 47.19 | 25.63 | 1.841201717 | 27.93597 | 23.121866 | 1.208205687 | | 11 | repvgg_a2 | pass_accuracy | pass_accuracy | 56.79 | 23.59 | 2.407376007 | 38.1713855 | 20.2933585 | 1.880979213 | | 12 | tf_efficientnet_b0 | pass_accuracy | pass_accuracy | 76.08 | 27.53 | 2.763530694 | 57.4321735 | 24.610735 | 2.333622848 | | 13 | visformer_small | pass_accuracy | pass_accuracy | 50.1 | 25.2 | 1.988095238 | 36.0102225 | 22.8330475 | 1.577109779 | | 14 | vit_base_patch16_siglip_256 | pass_accuracy | pass_accuracy | 35.12 | 28.7 | 1.22369338 | 26.3208135 | 26.6200675 | 0.988758331 | # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43694 | 1 个月前 |
| fix(benchmark): vision_maskrcnn + fambench_xlmr NPU 适配(npu_support register_patch 注入) Co-authored-by: huyuchao<huyuchao2@huawei.com> # message auto-generated for no-merge-commit merge: !46021 merge vision-maskrcnn-npu-adapt into master fix(benchmark): vision_maskrcnn + fambench_xlmr NPU 适配(npu_support register_patch 注入) Created-by: huyuchao Commit-by: huyuchao Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 - [x] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 本 PR 合并两个模型的 NPU runner 侧适配(原 #45955 xlmr 改动并入本 PR 提交),均与库上其余模型 register_patch 惯例同构、机制零新增: ## 1. vision_maskrcnn(close #4687) torchvision 本栈 wheel 无 torchvision::nms / torchvision::roi_align 的 CPU kernel,NPU 张量 fallback 到 CPU dispatcher 后推理失败。npu_support.py 新增 @register_patch("vision_maskrcnn"): - torchvision.ops.boxes.nms:boxes.is_npu 时路由 torch.ops.npu.npu_nms_with_mask(boxes[N,4]+scores 拼 [N,5];uint8 keep mask 转 bool、索引转 long 以通过 dynamo fake 校验); - 真子模块 torchvision.ops.roi_align(import_module 取真模块,包属性被同名函数遮蔽)及 torchvision.ops.poolers.roi_align:input.is_npu 时路由 torch.ops.npu.npu_roi_align; - CPU 路径保持原 torchvision 实现;模块级幂等旗标;torchvision ImportError 兜底跳过。 ## 2. fambench_xlmr(close #4686,原 #45955 并入) - torchbench.py:CANARY_MODELS 白名单加入 fambench_xlmr(canary_models 目录下模型默认不加载)。**全量套件仍走 SKIP**——default 后端该模型编译器侧编译失败,不纳入全量,仅 --only 手动选跑; - npu_support.py 新增 @register_patch("fambench_xlmr"):Model.__init__ 包装内 scoped torch.load → weights_only=False(torch>=2.6 默认拒绝 fairseq checkpoint,含 argparse.Namespace 等非张量对象;官方权重可信;try/finally 恢复不污染); - 深拷贝递归按**上游 DEEPCOPY 契约**整改(模型侧零 monkeypatch):模型源码自带 DEEPCOPY = False 声明(fairseq HubInterface 动态 __getattr__ 代理致 deepcopy 无限递归,源码注释即 RecursionError)——common.py deepcopy_model 镜像上游 util/env_check.py 语义(DEEPCOPY=False 不拷贝)、torchbench.py load_model 旗标传递镜像 util/backends/cudagraph.py 挂载模式。影响面:DEEPCOPY=False 的 8 模型中全量套件仅 drq 在运行列表,行为回到上游 env_check 语义;hf/timm runner 不传旗标默认 True 不变。 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 环境:master 36a38cc..b3fbaac + torch 2.13.0+cpu + triton-ascend 3.2.2 + CANN 9.1.0-beta.1(Atlas 910B2) 命令:torchbench.py --devices npu --inference --disable-aclgraph --only <model> --npu-backend triton_experimental | 模型 | perf(TE 后端) | accuracy(TE 后端) | |---|---|---| | vision_maskrcnn | **0.467x**(26 图编译成功;合并 xlmr 后复测 0.467x 一致) | **pass_accuracy**(patched nms/roi_align 路径 fp64/eager/compiled 三路自洽) | | fambench_xlmr | **1.145x**(6 图编译成功;合并后复测一致) | **pass_accuracy**(fp64 golden + eager 两跑一致 + compiled 对比全过) | 已知限制(本 PR 不涉及):default 后端对 fambench_xlmr 仍编译器侧编译失败(safe_softmax 融合 kernel UB overflow,属前端/编译器问题);本 PR 只做 runner 侧可用性适配,目标后端为 triton_experimental。xlmr 运行依赖 fairseq 0.12.2(py3.11 兼容需前置处理)与 ~1GB 官方权重下载,属基准仓环境约定。 无 UT 新增(benchmark 基建改动,以 torchbench runner 端到端验证) # 【CheckList】 - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签(fix) - [x] PR持续集成流水线(CI)执行通过,代码检查无异常(本地端到端验证通过;CI 流水线以本次推送触发结果为准) issue/工单: https://gitcode.com/Ascend/pytorch/issues/4687 issue/工单: https://gitcode.com/Ascend/pytorch/issues/4686 See merge request: Ascend/pytorch!46021 | 12 天前 |
| add torchbench models, deps and fix copy_ lowering with slice Co-authored-by: wangzili<wangzili14@huawei.com> # message auto-generated for no-merge-commit merge: !43689 merge add/torchbench-models-list-master into master add torchbench models, deps and fix copy_ lowering with slice Created-by: wangzili121 Commit-by: wangzili Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 新增多张torchbench网络及相应依赖 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】 已验证功能正常精度通过 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!43689 | 1 个月前 |