已关闭
[Feature]:Knn算子优化 #223
xiangyuming创建于  5月18日关闭于  9月9日
xiangyuming
xiangyuming成员
5月18日 创建

提交提案之前,请先检索仓库内是否已有相同的提案,如已有请在同一提案中进行讨论。

💻 需求背景、当前现状、期望实现的功能内容、具体的设计方案、以及测试方案

任务描述

  1. 优化仓上Knn算子,性能提升20%
  2. 适配产品:800T A2、800T A3

验收标准

一、任务交付件
(1) AscendC代码
(2) 测试用例UT
二、验收标准:
1)精度/性能要求
精度:符合精度标准(https://gitcode.com/Ascend/msit/blob/master/msit/docs/llm/工具-精度预检使用说明.md#33-精度标准)
性能:对比原算子提升20%
2)实践文档:
算子优化文档
3)任务完成标准
本次任务完成标准为:
精度/性能(根据实际要求)达标,PR完成合入,实践文档提交到仓库issue。

对接人

@yuansunshun

替代方案

补充说明

欢迎加入社区,感谢您对社区的贡献 🎉!

likedislike
xiangyumingxiangyuming成员
5月18日 添加了label:feature
xiangyumingxiangyuming成员
5月18日 修改标题为 “[Feature]:Knn算子优化”,原标题为“[Feature]: 算子优化”
xiangyuming
xiangyuming成员
5月18日 评论:

/label add triaged

likedislike
ascend-robotascend-robot成员
5月18日 添加了label:triaged
xiangyumingxiangyuming成员
5月18日 修改了issue 的描述
xiangyumingxiangyuming成员
5月18日 修改了issue 的描述
Ronald1995
6月11日 评论:

/label add good-first-issue

likedislike
ascend-robotascend-robot成员
6月11日 添加了label:good-first-issue
samulenzz
6月17日 评论:

认领这个任务

likedislike
Ronald1995
6月25日 评论:

认领这个任务

@samulenzz

欢迎认领任务,请参考https://gitcode.com/Ascend/DrivingSDK/issues/215 社区任务池明确该任务的:

  • 完成的截止日期
  • 开发进展反馈
  • 微信答疑群
  • 任务交付注意事项

等信息。如果您同时认领了多项任务,但无法都能进行投入,可以在部分任务中回复退出.

麻烦您加入到对应微信群,群备注名修改为"社区任务+您的gitcode账号", 后续有相关消息和问题都可以在微信群咨询答疑。 等您加入到微信群后,我这边会在社区任务池里面登记任务责任人。

likedislike
gcw_MTeIQk9o
6月29日 评论:

认领这个任务

likedislike
samulenzz
6月29日 评论:

认领这个任务

@samulenzz

欢迎认领任务,请参考https://gitcode.com/Ascend/DrivingSDK/issues/215 社区任务池明确该任务的:

  • 完成的截止日期
  • 开发进展反馈
  • 微信答疑群
  • 任务交付注意事项

等信息。如果您同时认领了多项任务,但无法都能进行投入,可以在部分任务中回复退出.

麻烦您加入到对应微信群,群备注名修改为"社区任务+您的gitcode账号", 后续有相关消息和问题都可以在微信群咨询答疑。 等您加入到微信群后,我这边会在社区任务池里面登记任务责任人。

@Ronald1995

已添加微信群

likedislike
samulenzz
6月30日 评论:

认领这个任务

@samulenzz

欢迎认领任务,请参考https://gitcode.com/Ascend/DrivingSDK/issues/215 社区任务池明确该任务的:

  • 完成的截止日期
  • 开发进展反馈
  • 微信答疑群
  • 任务交付注意事项

等信息。如果您同时认领了多项任务,但无法都能进行投入,可以在部分任务中回复退出.

麻烦您加入到对应微信群,群备注名修改为"社区任务+您的gitcode账号", 后续有相关消息和问题都可以在微信群咨询答疑。 等您加入到微信群后,我这边会在社区任务池里面登记任务责任人。

@Ronald1995

本周进度:

  • 仓库熟悉
  • 华为云环境部署
likedislike
ascend-robotascend-robot成员
7月3日 关联了看板:MindStudio ISSUE管理
samulenzz
7月5日 评论:

认领这个任务

@samulenzz

欢迎认领任务,请参考https://gitcode.com/Ascend/DrivingSDK/issues/215 社区任务池明确该任务的:

  • 完成的截止日期
  • 开发进展反馈
  • 微信答疑群
  • 任务交付注意事项

等信息。如果您同时认领了多项任务,但无法都能进行投入,可以在部分任务中回复退出.

麻烦您加入到对应微信群,群备注名修改为"社区任务+您的gitcode账号", 后续有相关消息和问题都可以在微信群咨询答疑。 等您加入到微信群后,我这边会在社区任务池里面登记任务责任人。

@Ronald1995

设计方案产出:
已识别瓶颈(按收益排序):

  1. [搬运/内存] source 重复读:每个 query 重复搬全部 source。→ 主攻方向。
  2. [流水] 无 double buffer:SetFlag/WaitFlag<V_MTE2>+MTE2_V 使搬运与计算完全串行,无法重叠。
  3. [搬运] 每个 tile 用 3 次独立 DataCopyPad 分别搬 x/y/z 行,单次搬运量小、指令多。
  4. [流水] 每个 task 的小同步开销:target 只搬 8 元素且每次带 V_MTE2 同步。

2. 优化设计(本次要做的事)

2.1 主优化:Source Tile 复用(target 分组)

把同 batch 的 G 个 target 点组成一组。对每个 source tile:只从 GM 搬一次,然后在 UB 内依次对组内 G 个 target 算距离并各自维护 top-k。GM source 读量降为约 1/G。

flowchart LR
  subgraph before [原实现: 每个target都重搬source]
    t1[target1] --> s1[读全部source]
    t2[target2] --> s2[读全部source]
    t3[target3] --> s3[读全部source]
  end
  subgraph after [优化: 一组target共享一次source搬运]
    tile[读一个source tile 一次] --> g1[对target1算距离]
    tile --> g2[对target2算距离]
    tile --> g3[对target3算距离]
  end
  • op_host 依据平台 UB 大小(GetCoreNumAiv / UB size,不硬编码)动态选 G(如 4→2→1 回退) 和 tile 大小,写入 tiling。
  • op_kernel 新增 grouped path;组内每个 target 需独立的 top-k merge 缓冲,避免互相覆盖。
  • 保留单点 path 作为回退(小 N / 大 k / UB 放不下时)。

2.2 流水优化:source tile 搬运 double buffer

用双缓冲(ping-pong / TQue depth=2)让下一 tile 的 MTE2 搬运与当前 tile 的 Vector 计算重叠,隐藏搬运延迟。前提循环次数≥2。

2.3 搬运合并

source 每 batch 是 [3, N] 连续,x/y/z 三行可用一次 DataCopyPad(blockCount=3、blockLen=tile、srcStride=N-tile)替代 3 次调用,减少指令、提高带宽(目标单次≥16KB)。

2.4 精度保持(关键约束)

  • idx 逐元素一致 是硬指标;必须保留原有 Muls(-1) 取负 + Sort32/MrgSort 的排序与 tie-break 语义,isFromKnn 时的 Mins(1e10) 逻辑不变。
  • 依据 工具-精度预检使用说明.md:float32 误差级别 1e-7/达标率 99.99%;int32 误差 1e-4/99.99%。KNN 的 UT 用 assertRtolEqual 对 idx 逐元素比对,比该标准更严。
likedislike
jayhuajayhua成员
7月8日 添加了label:resolved
jayhuajayhua成员
7月8日 关联了里程碑:MindSpeed 26.2.0
samulenzz
7月11日 评论:
samulenzz
7月12日 评论:

已提交PR

likedislike
xiao-shaoning
7月13日 评论:
likedislike
ascend-robot
ascend-robot成员
7月20日 评论:

您好,当前Issue标记为resolved且有一段时间未进一步更新,因此我们将其标记为'stale'(闲置)状态。若您认为这是误操作,可通过添加任意评论来去除'stale'标签。标记为stale的Issue在4天内无更新活动将自动关闭。

likedislike
ascend-robotascend-robot成员
7月20日 添加了label:stale
samulenzz
7月20日 评论:

本周,已提交pr,开发文档补充中

likedislike
samulenzz
7月26日 评论:

本周进度,待仓库维护者验证

likedislike
samulenzz
7月30日 评论:
jayhuajayhua成员
9月9日 issue状态由 TODO 改变为 DONE
jayhuajayhua成员
9月9日 关闭了 issue
jayhuajayhua成员
9月9日 关联了pull request:⚡️ perf(knn): optimize 800T A2/A3 path
jayhuajayhua成员
9月9日 删除了关联的pull request:⚡️ perf(knn): optimize 800T A2/A3 path
jayhuajayhua成员
9月9日 关联了pull request:⚡️ perf(knn): optimize 800T A2/A3 path