已合并
修复topkv2算子的oom问题 #3960
修复topkv2算子的oom问题 #3960
已合并
cy_hw创建于 7月9日
cy_hw
cy_hw成员
7月9日

描述

修复topkv2算子在处理超大尾轴时的oom问题。
【问题原因】kernel 实际是两段独立使用,独立对齐32字节,在tiling侧实际申请时是sortOutValueGM_和outValueDbWK_先乘以2,然后在结果的基础上对齐32字节,导致实际使用的空间要比申请的大32字节,导致sortOutValueGM_这块GM在写入时会超过预配的空间;
【修复方案】在tiling侧预配GM空间时先对齐32字节,然后再乘以2,和kernel保持一致;

关联的Issue

https://gitcode.com/cann/ops-math/issues/2203

测试

ST,冒烟测试通过

文档更新

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 cy_hw 的贡献)
cy_hwcy_hw成员
7月9日 创建了 pull request,commit f10ebe05
atomgit-bot
atomgit-bot
7月9日 评论:

变更摘要

此 PR 修复了 topkv2 算子在 Arch35 架构上的 OOM(内存溢出)问题。核心改动位于 ComputeWorkSpace 函数中 outValueDbWKSize 工作空间大小的计算逻辑:将 topkV2DataInfo::CONST_2 的乘法从 CeilAlign 对齐操作之前移至对齐操作之后,确保先对基础数据大小进行对齐,再乘以常量 2,从而得到正确的工作空间尺寸,避免因计算偏差导致的内存分配异常。

主要改动

  • 调整 outValueDbWKSize 计算顺序: 将 * topkV2DataInfo::CONST_2CeilAlign 之前的乘积表达式中移除,改为在 CeilAlign 对齐完成后再执行 outValueDbWKSize *= topkV2DataInfo::CONST_2,确保对齐粒度不受常量倍乘干扰,得到预期的工作空间大小。
  • 工作空间对齐与倍乘解耦: 原有的 sortTileInfo.sortAxisNum * sortTileInfo.unsortedDimParallel * sortTileInfo.dtypeSize * topkV2DataInfo::CONST_2 先乘 2 再对齐,改为先对齐基础大小再乘 2,使内存分配计算更符合设计意图。
likedislike
atomgit-bot
atomgit-bot
7月9日 评论:

代码审查

✅ 未发现问题

likedislike
CANN-robotCANN-robot成员
7月9日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月9日 评论:

CLA Signature Pass

caoyan_huawei, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了64条消息 查看更多
RuiWang_成员
7月10日 评论:

/lgtm

likedislike
songkai111成员
7月10日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
7月10日 添加了label:lgtmapproved
CANN-robotCANN-robot成员
7月10日 关闭了关联的issue
CANN-robotCANN-robot成员
7月10日 合入了pull request