已合并
feat: mla算子优化 — KV-split均衡分核调度和精度修复 + cpu_low.bin读取修复 #794
华工-林鑫创建于 7月1日
feat: mla算子优化 — KV-split均衡分核调度和精度修复 + cpu_low.bin读取修复 #794
已合并
华工-林鑫创建于 7月1日
华工-林鑫
7月1日

描述

本PR恢复此前被回退的mla算子优化(aff5c9c),并在此基础上叠加两项改进:

  1. KV-split均衡分核调度(common路径)

    • GetKVSplitParam:当decode任务数(batch × head-split)不足以填满所有核时,贪心地将KV切分配额分配给负载最重的任务(q==1场景),发布CUTASK_START_OFFSET前缀和表与TILING_PROCESSNUM,使kernel能致密地将process映射到(batch, head-split, kv-split)三元组,消除空转核。
    • mla_kernel.cpp:当TILING_PROCESSNUM != 0时走致密前缀和映射;否则回退到原始back-and-forth(kerFlag)调度,保持非切K场景的行为不变。
  2. cpu_low.bin读取修复

    • gen_data.py以fp16格式写入cpu_low.bin(与result.bin一致),但mla.cpp按fp32格式读取(qoSize*2字节,与golden.bin一致),导致ReadFile静默失败、cpulowHost未初始化,ComputeErrorMetrics报告错误的MARE/MERE/RMSE比值(NPU_MARE / ~1.0 而非 NPU_MARE / CPU_MARE)。
    • 修复为:先读fp16临时buffer,再逐元素转float用于比对。

关联的Issue

原因

  • upstream在f8eab68中回退了此前的mla算子优化(aff5c9c),本PR恢复该优化并修正其遗留问题。
  • cpu_low.bin读取bug导致精度验证结果与compare_test.py不一致,影响CI判定。

测试

  • 使用batch_acc.sh对4种场景(q=1+kv等长、q=1+kv随机、q随机+kv等长、q随机+kv随机)各跑50轮,头数覆盖16/32/64,全部PASS。
  • 使用run_dataset_acc.sh遍历19_result.csv数据集(含batch 1~16、q 1~4、kv 128~9216、heads 16/32/64/128),精度与Python compare_test.py结果一致。
  • 手工验证 1 "3" "511" 32 64 128 等边界shape,修复后MARE ratio从52.95降至与CPU baseline一致的比值。

文档更新

  • 更新了examples/19_mla/README.md中的示例参数(numBlocks: 16→64),确保默认示例有足够的KV cache容量。

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 华工-林鑫 的贡献)
CANN-robotCANN-robot成员
7月1日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月1日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/catlass sunhao_hw, longjihui (2/2) sunhao_hw (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

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

likedislike
华工-林鑫
华工-林鑫
7月1日 评论:

compile

likedislike
atomgit-bot
atomgit-bot
7月1日 评论:

⚠️ 本次变更过大(34 个文件、7858 行),已超出 AI 代码评审的处理范围,本次跳过。建议拆分为更小的 PR 以获得有效评审。

likedislike
atomgit-bot
atomgit-bot
7月1日 评论:

⚠️ 本次变更过大(34 个文件、7858 行),已超出 AI 代码评审的处理范围,本次跳过。建议拆分为更小的 PR 以获得有效评审。

likedislike
CANN-robotCANN-robot成员
7月1日 添加了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月1日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月1日 添加了label:ci-pipeline-passed
CANN-robot
CANN-robot成员
7月1日 评论:
流水线 PR-pipeline_catlass#1353 [ commitID:3771d4d2 ] 已完成
阶段 任务名 状态 详情
编译构建 Build_arm >>>
恶意代码检查 Antipoison >>>
编码安全与规范检查 CodeCheck >>>
开源片段检查 SCA >>>
开发者测试 UT_arm >>>
流水线 PR-pipeline_catlass >>>
likedislike
longjihui
longjihui成员
7月6日 评论:

/lgtm

likedislike
华工-林鑫华工-林鑫
7月7日 关联了issue:[Requirement|需求建议]: mla算子优化 — KV-split均衡分核调度和精度修复 + cpu_low.bin读取修复
sunhao_hw成员7月7日进行代码检视1
examples/19_mla/amla_kernel_tp1_spec.cpp
@@ -0,0 +1,1 @@
1+/**
2+ * Copyright (c) 2025 Huawei Technologies Co., Ltd.
sunhao_hw7月7日评论:

新增文件的copyright修改为2026,统一排查下

likedislike
Ssunhao_hw成员
7月7日 解决了最后一个问题
sunhao_hw成员
7月7日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
7月7日 添加了label:lgtmapproved
CANN-robotCANN-robot成员
7月7日 删除了label:ci-pipeline-passed
CANN-robot
CANN-robot成员
7月7日 评论:

The following label is not ready.

ci-pipeline-passed: The ci-pipeline-passed label is expired. Please compile again.

likedislike
sunhao_hw成员
7月7日 评论:

compile

likedislike
CANN-robotCANN-robot成员
7月7日 添加了label:ci-pipeline-running
此处折叠了5条事件消息 查看更多
CANN-robotCANN-robot成员
7月7日 添加了label:ci-pipeline-passed
CANN-robot
CANN-robot成员
7月7日 评论:
流水线 PR-pipeline_catlass#1476 (重试第1次) [ commitID:3771d4d2 ] 已完成
阶段 任务名 状态 详情
编译构建 Build_arm >>>
恶意代码检查 Antipoison >>>
编码安全与规范检查 CodeCheck >>>
开源片段检查 SCA >>>
开发者测试 UT_arm >>>
流水线 PR-pipeline_catlass >>>
likedislike
CANN-robotCANN-robot成员
7月7日 关闭了关联的issue
CANN-robotCANN-robot成员
7月7日 合入了pull request
CANN-robot
CANN-robot成员
7月7日 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike