已合并
feat: mla算子优化 — KV-split均衡分核调度和精度修复 + cpu_low.bin读取修复 #794
华工-林鑫创建于 7月1日
feat: mla算子优化 — KV-split均衡分核调度和精度修复 + cpu_low.bin读取修复 #794
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 华工-林鑫 的贡献)7月1日 添加了label:cann-cla/yes
CANN-robot
7月1日 评论:
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
/approveor/lgtm- Commenting
/approveimplies 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. 👍


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


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


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


7月1日 添加了label:ci-pipeline-running
CANN-robot
7月1日 评论:
7月1日 评论:
文档检查门禁结果:


7月1日 删除了label:ci-pipeline-running
7月1日 添加了label:ci-pipeline-passed
CANN-robot
7月1日 评论:
7月1日 评论:
longjihui
7月6日 评论:
7月6日 评论:
/lgtm


7月7日 关联了issue:[Requirement|需求建议]: mla算子优化 — KV-split均衡分核调度和精度修复 + cpu_low.bin读取修复
7月7日 添加了label:lgtmapproved
7月7日 删除了label:ci-pipeline-passed
CANN-robot
7月7日 评论:
7月7日 评论:
The following label is not ready.
ci-pipeline-passed: The ci-pipeline-passed label is expired. Please compile again.


7月7日 添加了label:ci-pipeline-running
此处折叠了5条事件消息 查看更多
7月7日 添加了label:ci-pipeline-passed
CANN-robot
7月7日 评论:
7月7日 评论:
7月7日 关闭了关联的issue
7月7日 合入了pull request
CANN-robot
7月7日 评论:
7月7日 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


描述
本PR恢复此前被回退的mla算子优化(aff5c9c),并在此基础上叠加两项改进:
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场景的行为不变。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)。关联的Issue
无
原因
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),精度与Pythoncompare_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容量。类型标签