| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
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 个月前 | |
update qwen3 docs Co-authored-by: HandsoemLemon<zhangafei@huawei.com> # message auto-generated for no-merge-commit merge: !44981 merge master into master update qwen3 docs Created-by: HandsoemLemon Commit-by: HandsoemLemon Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ https://gitcode.com/Ascend/pytorch/issues/4122 > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 修复benchmark-llm中qwen3拉起文档中缺少空格问题 # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [ ] 代码注释完备,正确记录错误日志 - [ ] 代码实现进行了返回值、空指针等校验 - [ ] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [ ] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!44981 | 1 个月前 | |
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 | 4 天前 | |
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 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 个月前 | ||
| 1 个月前 | ||
| 4 天前 | ||
| 2 个月前 |