已关闭
[triton_experimental] 全量归约标量输出融合 kernel 编译失败:Cannot broadcast, rank mismatch #4375
huyuchao创建于 14 天前关闭于 9 天前
14 天前 添加了label:triage-review
TorchNPU-Bot
14 天前 评论:
14 天前 评论:
issue待分派,添加triage-review标签


14 天前 添加了label:bot-triaged;删除了label:triage-review
TorchNPU-Bot
14 天前 评论:
14 天前 评论:
检测到当前 issue 已关联 PR,自动添加标签:bot-triaged


9 天前 关闭了 issue
9 天前 添加了label:resolved
问题描述
torch.compile使用npu_backend=triton_experimental时,输出为单个标量的全量归约融合 kernel(典型:CausalLM 的log_softmax + nll_loss(ignore_index)路径,如triton_unk_fused_clone_nll_loss_forward_slice_view_*)编译失败:HuggingFace runner 的 ElectraForCausalLM / RobertaForCausalLM / XGLMForCausalLM 三模型均因同一 kernel 模板触发。
复现环境
Ascend NPU(aarch64)+ PyTorch 2.13.0 + torch_npu 2.13.0(triton_experimental 后端)
根因分析
.broadcast_to(<value.shape>),其中value.shape取自发射时刻 CSE 记录的形状——此刻归约值与索引秩一致,代码正确;[None, None, :]秩 3),但 store 行中手动追加的 broadcast_to 参数与基座tl.full仍停留在提升前的秩;tl.store两侧秩相等,直接编译失败。修复
PR #44955:在
_rewrite_reduction_store_shape内补全陈旧秩分支——当 broadcast_to 参数个数小于 real_ndim 时重建参数(r 槽强制置 1、旧非 1 参数按序映射、tl.fullshape 补齐到 real_ndim)。写入地址、数值与冗余写次数均不变,语义严格等价。