已关闭
[Bug-Report|缺陷反馈]: OptimizedTransducer Host tiling 对空 batch 除零并生成零 block_dim #5070
KaranocaVe创建于 8月24日关闭于 9月14日
8月24日 添加了label:bug-report
8月24日 关联了pull request:[Fix] 修复 OptimizedTransducer 空 batch 的 Host Tiling 除零
8月24日 将 KaranocaVe 设为负责人
KaranocaVe
9月14日 评论:
9月14日 评论:
已由 PR #9106 修复。


9月14日 关闭了 issue
KaranocaVe
9月14日 评论:
9月14日 评论:
该问题已由 PR !9106 修复,最新 CI run #8979 已完成且无失败任务,当前 PR 已通过合并门禁。


9月21日 修改了issue 的描述
9月21日 修改了issue 的描述
22 天前 添加了label:resolved
问题描述
在
cann/ops-nn的固定 commitbcf8c094ca51b5659c7c21ac5abecec5fa9ef2be中,OptimizedTransducer的 Host Tiling 按 logits 第 0 维进行分核,但没有处理空 batch。当
logits的形状为[0,2,3,4]时,第 76 行先把平台 core 数改为 0,随后第 77、78行分别执行
% coreNum和/ coreNum。这条路径在 UBSan 下确定报告除零;普通 AArch64 构建则静默返回成功并设置
block_dim=0,因此调用方可能继续使用无效的 Tiling 配置。环境信息
cann/ops-nn/bcf8c094ca51b5659c7c21ac5abecec5fa9ef2be重现步骤
OpTilingContextBuilder构造OptimizedTransducer上下文:logits: FLOAT、ND、[0,2,3,4]targets、logit_lengths、target_lengths: INT32、ND、[0,2]loss: FLOAT、ND、[0]grad: FLOAT、ND、[0,2,3,4]blank=0、clamp=-1.0、fused_log_softmax=true、requires_grad=trueOptimizedTransducerCompileInfo,调用 Host Tiling 回调。batch=1的相同输入作为合法对照,再用batch=0运行普通构建和 UBSan 构建。预期结果
实现至少不应对
coreNum=0执行取模或除法。若算子支持空 batch,应返回明确且可执行的no-op Tiling;若不支持,应返回明确参数错误。不能让调用方在
GRAPH_SUCCESS下得到block_dim=0的无效配置。实际结果
batch=1对照:ret=0,block_dim=1,进程退出码 0。batch=2对照:ret=0,block_dim=2,进程退出码 0。batch=0普通构建:ret=0、block_dim=0、workspace=16777216,进程退出码 0。batch=0UBSan 构建:在experimental/optim/optimized_transducer/op_host/optimized_transducer_tiling.cpp:77:38报告
runtime error: division by zero,进程退出码 1。平台没有抛出 SIGFPE,而是产生上述成功但无效的 Tiling 结果。
日志/最小复现
使用 Host Tiling 对照分别传入
batch=1和batch=0,并在 UBSan 下重复运行batch=0用例。关键普通构建输出:
关键 UBSan 输出:
影响与规避方式
空 batch 会使 Host Tiling 进入未定义整数算术;在当前 AArch64 普通构建中虽然没有立即
崩溃,但返回的
block_dim=0不是正常的分核结果,后续图编译或执行阶段可能无法接受。临时规避是调用前拒绝 batch 为 0 的输入。实现侧应在分核前明确处理空 batch,并使
InferShape、Host Tiling 和 kernel 对空 batch 的契约一致。
建议的回归测试
batch=1、batch=2的合法对照,并检查返回成功、block_dim>0和 tiling 数据字段。batch=0的 Host Tiling 用例,断言返回明确失败或按设计返回有效 no-op 结果,但不得触发 UBSan 除零,也不得生成无效
block_dim=0。batch=0在普通、UBSan 和目标支持版本的 Host 测试中重复运行,确认没有未定义算术。关联 PR