Compare commits
No commits in common. "master" and "master" have entirely different histories.
329
FAQ.md
329
FAQ.md
|
|
@ -1,329 +0,0 @@
|
|||
# 常见问题 FAQ
|
||||
|
||||
> 最后整理:2026-07-13
|
||||
|
||||
本文档汇总沐曦“揭榜挂帅”两项赛题的常见问题。使用 `Ctrl+F`(Windows/Linux)或 `⌘F`(macOS)搜索关键词。
|
||||
|
||||
环境版本、评测配置、时间安排可能调整。请以仓库 README、XPU-OJ 公告、比赛群通知和容器中的实际版本为准。发现内容过期或未覆盖的问题,请[提交 Issue](https://gitlink.org.cn/metax-maca/op_optimization/issues)。
|
||||
|
||||
## 快速导航
|
||||
|
||||
- [重要入口与咨询方式](#entry):XPU-OJ 开放情况、问题反馈渠道和赛事联系人。
|
||||
- [XPU-OJ、提交与排行榜](#xpuoj):账号申请、提交环境、测试样例、评测硬件和排名指标。
|
||||
- [赛题一:TileLang 与 Fused MoE](#track-one):提交限制、算子实现、Baseline、性能优化和决赛加分规则。
|
||||
- [赛题二:AI Agent 与推理算子库](#track-two):任务范围、Agent 参与证明、Baseline、测试参数和上游代码引用。
|
||||
- [评测规则与通用技术问题](#evaluation):技术资料发布、正确性与稳定性要求,以及 FAQ 内容纠错。
|
||||
- [环境、镜像与算力资源](#environment):比赛镜像、MACA 与 PyTorch 版本、开发工具、算力券和资源申请。
|
||||
- [报名、组队与资格审核](#registration):参赛资格、跨校组队、指导教师、材料盖章和审核流程。
|
||||
|
||||
<a id="entry"></a>
|
||||
|
||||
## 重要入口与咨询方式
|
||||
|
||||
<a id="q-xpuoj-open"></a>
|
||||
|
||||
### ❓ 问题 1:XPU-OJ 平台是否已经上线?
|
||||
|
||||
**回答:** XPU-OJ 已开放。账号申领流程和使用指南见[赛事 XPU-OJ 账号申领说明](赛事XPUOJ账号申领说明.md)。
|
||||
|
||||
<a id="q-contact"></a>
|
||||
|
||||
### ❓ 问题 2:两个赛题的联系人不同,遇到问题应该联系谁?
|
||||
|
||||
**回答:** 请先通过 [GitLink Issue](https://gitlink.org.cn/metax-maca/op_optimization/issues) 提问,维护者会把可复用的答案更新到本文档。比赛群用于接收赛事通知和临时信息。需要单独沟通时,请按对应比赛方案联系章老师或杨老师。
|
||||
|
||||
## XPU-OJ、提交与排行榜
|
||||
|
||||
<a id="q-moe-score-decrease"></a>
|
||||
|
||||
### ❓ 问题 1:XPUOJ测评 MoE 耗时减少了但是分数反而降低了
|
||||
|
||||
**回答:**
|
||||
|
||||
针对近期部分同学反馈的“XPU.OJ”第三方评测系统中基线(baseline)不稳定的问题,我们高度重视,并已第一时间组织排查与测试。在此,我们对因此给大家带来的困扰深表歉意,也衷心感谢各位同学提出的宝贵意见。
|
||||
目前,相关问题已修复完毕。为确保评测的公平性与准确性,我们将对现有榜单进行清空处理。历史提交记录仍可查看,但后续排名将统一以基线修复后重新提交的算子成绩为准。
|
||||
|
||||
比赛期间,我们将持续关注系统运行状态,也欢迎大家继续向我们反馈建议。
|
||||
祝大家比赛顺利,取得理想成绩!
|
||||
|
||||
<a id="q-xpuoj-environment"></a>
|
||||
|
||||
### ❓ 问题 2:XPU-OJ 与模力方舟的运行环境一致吗?
|
||||
|
||||
**回答:** 排行榜评测环境与模力方舟开发环境保持一致。版本调整时以 XPU-OJ 公告为准。
|
||||
|
||||
<a id="q-xpuoj-account"></a>
|
||||
|
||||
### ❓ 问题 3:如何申请 XPU-OJ 账号?
|
||||
|
||||
**回答:** 请按照[赛事 XPU-OJ 账号申领说明](赛事XPUOJ账号申领说明.md)提交申请。账号发放进度以赛事通知和回复邮件为准。
|
||||
|
||||
<a id="q-official-ranking"></a>
|
||||
|
||||
### ❓ 问题 4:赛题一 MoE 初赛排名以哪个入口为准?
|
||||
|
||||
**回答:** 正式排名和初筛结果以 XPU-OJ 的评测结果为准。Sample benchmark 用于本地功能验证、调试和性能对比,不作为正式榜单依据。
|
||||
|
||||
<a id="q-test-cases"></a>
|
||||
|
||||
### ❓ 问题 5:MACA C++、Triton 和 TileLang 是否分别设榜?
|
||||
|
||||
**回答:** 不按语言分别设榜。每个任务支持 MACA C++、Triton 和 TileLang,团队可以使用一种或多种语言提交。排行榜采用通过正确性和稳定性测试后的最高成绩。
|
||||
|
||||
<a id="q-ranking-metric"></a>
|
||||
|
||||
### ❓ 问题 6:排行榜使用 latency、speedup 还是综合 score?
|
||||
|
||||
**回答:** 当前 XPU-OJ 以 speedup 作为核心排名指标。赛事方调整计算方式时,以 XPU-OJ 公告为准。
|
||||
|
||||
<a id="track-one"></a>
|
||||
|
||||
## 赛题一:TileLang 与 Fused MoE
|
||||
|
||||
<a id="q-track-one-submission"></a>
|
||||
|
||||
### ❓ 问题 1:赛题一的提交要求有哪些调整?
|
||||
|
||||
**回答:** 正式提交禁止使用 `MACA Maca running` 方式,也不能使用 PyTorch 实现算子。参赛者需使用 TileLang 实现并提交。
|
||||
|
||||
<a id="q-ops-reference"></a>
|
||||
|
||||
### ❓ 问题 2:OPS 目录中的 TileLang、CUDA、CUTLASS 和 MACA 代码有什么用途?
|
||||
|
||||
**回答:** 这些代码用于解释算子的实现原理和设计思路,可作为 TileLang 实现的参考。
|
||||
|
||||
<a id="q-baseline-modification"></a>
|
||||
|
||||
### ❓ 问题 3:官方 Baseline 可以修改到什么范围?
|
||||
|
||||
**回答:** 参赛者可以重新设计和优化算子实现,但需保持与统一 Workload 测试框架的接口兼容。
|
||||
|
||||
<a id="q-gemm-optimization"></a>
|
||||
|
||||
### ❓ 问题 4:GEMM 计算中可以引入其他优化策略吗?
|
||||
|
||||
**回答:** 可以,前提是实现符合赛题规则和评测要求。
|
||||
|
||||
<a id="q-benchmark-modification"></a>
|
||||
|
||||
### ❓ 问题 5:可以优化 `fusedmoe_benchmark` 吗?
|
||||
|
||||
**回答:** 本地修改 benchmark 不会提高正式成绩,XPU-OJ 使用赛事方的评测框架。参赛者应把优化工作放在规定的算子实现和允许修改的接口上。
|
||||
|
||||
<a id="q-forward-modification"></a>
|
||||
|
||||
### ❓ 问题 6:可以修改 `fusedmoe_benchmark.py` 中的 MoE forward 吗?
|
||||
|
||||
**回答:** 正式成绩以 XPU-OJ 的独立评测为准。本地修改 forward 不能替代对提交算子的优化,也不会改变赛事方的评测代码。
|
||||
|
||||
<a id="q-async-copy"></a>
|
||||
|
||||
### ❓ 问题 7:赛题一允许使用异步拷贝吗?
|
||||
|
||||
**回答:** 不允许。当前比赛规则禁用异步拷贝。
|
||||
|
||||
<a id="q-baseline-performance"></a>
|
||||
|
||||
### ❓ 问题 8:Fused MoE 初赛成绩如何影响决赛?
|
||||
|
||||
**回答:** 当前规则只给初赛前 10 名决赛加分,第 11 名及之后不获得额外初赛加分。
|
||||
|
||||
<a id="track-two"></a>
|
||||
|
||||
## 赛题二:AI Agent 与推理算子库
|
||||
|
||||
<a id="q-track-two-update"></a>
|
||||
|
||||
### ❓ 问题 1:赛题二的内容有什么调整?
|
||||
|
||||
**回答:** “Agent 推理算子库优化 - FlashAttention KV Cache Decode”新增 `mctlass/cute` 要求。参赛者需基于 `mctlass/cute` 实现或优化对应任务。
|
||||
|
||||
<a id="q-track-two-selection"></a>
|
||||
|
||||
### ❓ 问题 2:赛题二可以选择几个任务?
|
||||
|
||||
**回答:** 参赛团队可以从 FlashInfer、FlashAttention、MCTLASS/Fused MoE 等方向选择一项或多项。提交多个任务时,每个任务按赛事规则取有效最高成绩。支持语言包括 Triton、MXMACA C++ 和 TileLang。
|
||||
|
||||
<a id="q-agent-proof"></a>
|
||||
|
||||
### ❓ 问题 3:如何证明 AI Agent 参与了优化过程?
|
||||
|
||||
**回答:** 参赛团队应保留 Agent 配置、Skill 文件、关键提示词、操作日志、代码变更记录、测试结果和复现实验步骤,等待赛事方发布核验细则。
|
||||
|
||||
<a id="q-agent-baseline"></a>
|
||||
|
||||
### ❓ 问题 4:Agent 赛题的性能 baseline 使用哪个版本?
|
||||
|
||||
**回答:** 当前评测使用赛事方提供的 baseline,标准环境为 `PyTorch-Agent / 2.8.0 / Python 3.12 / MACA 3.7.1.5`。赛事方变更 baseline 或评测方式时会发布通知。
|
||||
|
||||
<a id="q-mla-dimensions"></a>
|
||||
|
||||
### ❓ 问题 5:MLA 的 `QK dim = 576, VO dim = 512` 与 `race_tests` 参数冲突吗?
|
||||
|
||||
**回答:** 不冲突。`race_tests` 中的 `dim=512, pe_dim=64` 对应 `QK dim = 576, V dim = 512`。
|
||||
|
||||
<a id="q-nsa-ranking"></a>
|
||||
|
||||
### ❓ 问题 6:NSA 的 109 个测试 case 如何计算榜单成绩?
|
||||
|
||||
**回答:** XPU-OJ 通过统一接口统计测试总运行时间,再根据 baseline 计算整体 speedup。
|
||||
|
||||
<a id="q-upstream-code"></a>
|
||||
|
||||
### ❓ 问题 7:可以引用或修改 FlashInfer、FlashAttention 等上游代码吗?
|
||||
|
||||
**回答:** 可以。参赛团队需遵守上游项目许可证,保留版权和许可证声明,并在提交材料中说明引用范围、迁移工作和自主优化内容。
|
||||
|
||||
<a id="evaluation"></a>
|
||||
|
||||
## 环境、镜像与算力资源
|
||||
|
||||
<a id="q-environment-image"></a>
|
||||
|
||||
### ❓ 问题 1:比赛使用哪个在线算力环境?
|
||||
|
||||
**回答:** 比赛使用模力方舟沐曦算力专区。仓库 README 当前标注的统一镜像为:
|
||||
|
||||
```text
|
||||
PyTorch-Agent / 2.8.0 / Python 3.12 / MACA 3.7.1.5
|
||||
```
|
||||
|
||||
创建实例和连接环境的步骤见[模力方舟快速使用 SOP](模力方舟快速使用SOP.md)。
|
||||
|
||||
<a id="q-download-maca"></a>
|
||||
|
||||
### ❓ 问题 2:如何获取 MACA 镜像或安装包?
|
||||
|
||||
**回答:** 参赛者可以在[模力方舟沐曦算力专区](https://ai.gitee.com/compute/metax)选择 `PyTorch-Agent` 镜像。需要单独获取软件包时,请前往[沐曦开发者社区软件中心](https://developer.metax-tech.com/softnova/docker?chip_name=%E6%9B%A6%E4%BA%91C500%E7%B3%BB%E5%88%97&package_kind=AI&dimension=docker),并选择与比赛标准环境一致的 MACA `3.7.1.5` 版本。
|
||||
|
||||
<a id="q-download-pytorch"></a>
|
||||
|
||||
### ❓ 问题 3:比赛使用的 PyTorch 镜像可以下载吗?
|
||||
|
||||
**回答:** 可以。请在[沐曦开发者社区](https://developer.metax-tech.com/)或其 [PyTorch 镜像列表](https://developer.metax-tech.com/softnova/docker?chip_name=%E6%9B%A6%E4%BA%91C500%E7%B3%BB%E5%88%97&package_kind=AI&dimension=docker&deliver_type=%E5%88%86%E5%B1%82%E5%8C%85&ai_frame=pytorch)中查询。下载前请核对比赛镜像的 Python、PyTorch 和 MACA 版本。
|
||||
|
||||
<a id="q-version-mismatch"></a>
|
||||
|
||||
### ❓ 问题 4:页面标注的 MACA 版本与容器内版本不一致怎么办?
|
||||
|
||||
**回答:** 比赛标准版本为 MACA `3.7.1.5`。
|
||||
|
||||
<a id="q-pytorch-source"></a>
|
||||
|
||||
### ❓ 问题 5:Linux 版本的 mcprofiler 是否可用?
|
||||
|
||||
**回答:** mcprofiler 的 Linux 版本已经打包进模力方舟上的 pytorch-agent 比赛镜像。
|
||||
|
||||
<a id="q-compute-coupons"></a>
|
||||
|
||||
### ❓ 问题 6:算力券按团队还是按个人领取?
|
||||
|
||||
**回答:** 新人礼和启悟社区算力券按学生个人发放,符合条件的团队成员均可领取。团队主申请人的额度用完后,其他成员可以继续申请资源。
|
||||
|
||||
- [沐曦开发者社区新人礼](https://developer.metax-tech.com/activities/6)
|
||||
- [启悟社区学生算力券](https://developer.metax-tech.com/activities/11)
|
||||
- [赛事算力券活动](https://developer.metax-tech.com/activities/17)
|
||||
|
||||
<a id="q-more-compute"></a>
|
||||
|
||||
### ❓ 问题 7:算力额度不足时可以追加申请吗?
|
||||
|
||||
**回答:** 可以先领取上述活动中的算力券。仍需额外资源时,请发送需求邮件至 `opensource@metax-tech.com`。
|
||||
|
||||
<a id="q-commercial-agent-cost"></a>
|
||||
|
||||
<a id="registration"></a>
|
||||
|
||||
## 报名、组队与资格审核
|
||||
|
||||
<a id="q-register-both"></a>
|
||||
|
||||
### ❓ 问题 1:同一团队或个人可以同时参加两个赛题吗?
|
||||
|
||||
**回答:** 可以。同一团队或个人可以同时报名两个赛题。
|
||||
|
||||
<a id="q-register-multiple-tracks"></a>
|
||||
|
||||
### ❓ 问题 2:同一名学生可以报名不同赛道的不同赛题吗?
|
||||
|
||||
**回答:** 可以。赛事不统一限制学生报名不同赛道或不同赛题,但同一作品不得用相同核心技术内容重复申报不同赛题。
|
||||
|
||||
<a id="q-new-graduate"></a>
|
||||
|
||||
### ❓ 问题 3:本科应届毕业、尚未正式入学的研一新生可以报名吗?
|
||||
|
||||
**回答:** 可以。参赛者可联系原本科学校完成认证手续,并以本科生身份报名。
|
||||
|
||||
<a id="q-advisor-required"></a>
|
||||
|
||||
### ❓ 问题 4:参赛必须配备指导教师吗?
|
||||
|
||||
**回答:** 不强制。填写指导教师时,每支队伍可以设置 1 至 3 名指导教师。
|
||||
|
||||
<a id="q-advisor-team-limit"></a>
|
||||
|
||||
### ❓ 问题 5:一名指导教师最多可以指导几支队伍?
|
||||
|
||||
**回答:** 赛事暂未设置统一的硬性上限。指导教师应根据可投入的时间控制队伍数量。
|
||||
|
||||
<a id="q-cross-school-stamp"></a>
|
||||
|
||||
### ❓ 问题 6:跨校组队时,报名表应该由哪所学校盖章?
|
||||
|
||||
**回答:** 资格审批阶段,每名参赛者需到本人学校的校团委或院团委完成盖章确认。后续材料由团队牵头学生统一整理和提交。
|
||||
|
||||
<a id="q-upload-stamped-form"></a>
|
||||
|
||||
### ❓ 问题 7:提交报名后还可以补充已盖章的报名表扫描件吗?
|
||||
|
||||
**回答:** 审核人员发现材料缺少盖章时,会退回申请。团队补齐材料后可以重新提交。尚未完成盖章的团队应先与学院、校团委或学校相关部门确认办理方式。
|
||||
|
||||
<a id="q-stamp-department"></a>
|
||||
|
||||
### ❓ 问题 8:资格审查材料应该加盖哪个部门的公章?
|
||||
|
||||
**回答:** 各高校的管理口径不同。教务处、学生处等学籍或学生管理部门通常可以办理,参赛团队应以本校校团委或相关管理部门的要求为准。
|
||||
|
||||
<a id="q-no-youth-league"></a>
|
||||
|
||||
### ❓ 问题 9:学校未设校团委,可以用院系公章替代吗?
|
||||
|
||||
**回答:** 赛事原则上要求校级部门公章。学校未设校团委时,可以联系校级学工、双创或教务部门盖章,并提交情况说明。院系公章不能直接替代校级部门公章。
|
||||
|
||||
<a id="q-student-status-proof"></a>
|
||||
|
||||
### ❓ 问题 10:学校无法配合盖章,可以用学籍证明替代吗?
|
||||
|
||||
**回答:** 不可以。参赛团队应使用报名系统导出的报名表,并按要求完成学校盖章。
|
||||
|
||||
<a id="q-public-notice"></a>
|
||||
|
||||
### ❓ 问题 11:公示材料需要包含哪些内容?
|
||||
|
||||
**回答:** 请参考赛事工作群发布的参考文本,并按学校要求调整。跨校团队涉及的学校应分别在学校官网公示,公示渠道原则上使用学校官网。
|
||||
|
||||
<a id="q-review-deadline"></a>
|
||||
|
||||
### ❓ 问题 12:报名审核需要在报名截止日前完成吗?
|
||||
|
||||
**回答:** 原则上需要。往届出现过系统延后关闭的情况,但本届参赛团队不应据此推迟材料提交或审核。
|
||||
|
||||
<a id="q-review-flow"></a>
|
||||
|
||||
### ❓ 问题 13:报名材料的审核顺序是什么?
|
||||
|
||||
**回答:** 学生提交材料后,学校校团委先审核;学校审核通过后,企业再审核。企业审核通过即视为报名成功。
|
||||
|
||||
<a id="q-school-review-account"></a>
|
||||
|
||||
### ❓ 问题 14:后台显示“校团委审核”,但学校不了解审核事项,怎么办?
|
||||
|
||||
**回答:** 校团委需在报名系统内完成审核。省级团委通常会向各高校团委发放账号和密码。学校未收到或不了解安排时,请学校联系省级团委确认。
|
||||
|
||||
## FAQ 维护约定
|
||||
|
||||
1. 参赛者通过 Issue 提交问题。
|
||||
2. 维护者确认答案后更新本文档。
|
||||
3. 每个答案保留稳定锚点;需要时附上来源 Issue 或公告。
|
||||
4. 维护者在原 Issue 中回复 FAQ 锚点链接,并关闭已经解决的问题。
|
||||
5. 涉及版本、日期、评测参数的答案应标注确认日期。
|
||||
21
README.md
21
README.md
|
|
@ -1,22 +1,5 @@
|
|||
# 降低Token 成本,攻坚国产推理生态|沐曦两大赛题登陆 2026 揭榜挂帅擂台赛,邀青年共破局!
|
||||
|
||||
## 常用入口
|
||||
|
||||
- [常见问题 FAQ](FAQ.md)
|
||||
- [沐曦通用GPU MXMACA编译器内建函数编程指南](https://developer.metax-tech.com/api/client/document/preview/1395/index.html)
|
||||
|
||||
## XPU-OJ 基线修复及榜单调整通知
|
||||
|
||||
针对近期部分同学反馈的“XPU.OJ”第三方评测系统中基线(baseline)不稳定的问题,我们高度重视,并已第一时间组织排查与测试。在此,我们对因此给大家带来的困扰深表歉意,也衷心感谢各位同学提出的宝贵意见。
|
||||
目前,相关问题已修复完毕。为确保评测的公平性与准确性,我们将对现有榜单进行清空处理。历史提交记录仍可查看,但后续排名将统一以基线修复后重新提交的算子成绩为准。
|
||||
|
||||
比赛期间,我们将持续关注系统运行状态,也欢迎大家继续向我们反馈建议。
|
||||
祝大家比赛顺利,取得理想成绩!
|
||||
|
||||
- XPU-OJ 地址:[https://xpuoj.com/](https://xpuoj.com/)
|
||||
- 账号申领说明:[赛事 XPU-OJ 账号申领说明](赛事XPUOJ账号申领说明.md)
|
||||
- 账号申领邮箱:`opensource@metax-tech.com`
|
||||
|
||||
2026 年度中国青年科技创新「揭榜挂帅」擂台赛正式启幕。沐曦股份重磅发布两大 AI 算力硬核榜题,聚焦国产 GPU 大模型推理算子优化,以硬核赛事搭建科研攻关平台,邀全国青年学子、科研人才揭榜攻坚,用技术重构推理效率,用创新拉低每 Token 算力成本!
|
||||
|
||||
## 两大重磅赛题 直击推理成本核心痛点
|
||||
|
|
@ -46,7 +29,7 @@
|
|||
|
||||
### 赛题二:基于 AI Agent 开发范式的国产 GPU 大模型推理算子库优化
|
||||
|
||||
大模型推理具有高并发、长序列、高<EFBFBD><EFBFBD><EFBFBD>用频次等特点,FlashInfer、FlashAttention、Fused MoE 等核心算子直接决定模型服务的吞吐、延迟与显存开销,影响单 Token 综合推理成本。
|
||||
大模型推理具有高并发、长序列、高调用频次等特点,FlashInfer、FlashAttention、Fused MoE 等核心算子直接决定模型服务的吞吐、延迟与显存开销,影响单 Token 综合推理成本。
|
||||
|
||||
本赛题面向沐曦国产 GPU 及 MXMACA 软件栈,鼓励参赛团队构建或使用 AI Agent / Skill 工作流,围绕推理算子库开展代码理解、算子迁移、性能分析、Kernel 优化、自动调优、Benchmark 验证和多轮迭代,探索“Agent 驱动算子优化”的新型开发范式。
|
||||
|
||||
|
|
@ -67,7 +50,7 @@
|
|||
- [模力方舟 Agent 部署准备教程](基于AI%20Agent开发范式的国产GPU大模型推理算子库优化/模力方舟Agent部署准备教程.md)
|
||||
- [赛题二说明及资料参考](基于AI%20Agent开发范式的国产GPU大模型推理算子库优化/赛题说明.md)
|
||||
|
||||
### **两个赛题统一使用模力方舟上的镜像PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.1.5**
|
||||
### **两个赛题统一使用模力方舟上的镜像PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.2.1**
|
||||
|
||||
## 参赛对象
|
||||
|
||||
|
|
|
|||
|
|
@ -54,10 +54,10 @@
|
|||
**创建并启动实例**
|
||||
|
||||
1. 进入算力市场,筛选“沐曦”芯片厂商,选择合适的 GPU 规格,推荐曦云 C500 节点。
|
||||
2. 关键配置:在预装镜像处,务必选择专属开发镜像 PyTorch Agent / 2.8.0 / Python 3.12 / maca 3.7.1.5。
|
||||
2. 关键配置:在预装镜像处,务必选择专属开发镜像 PyTorch Agent / 2.8.0 / Python 3.12 / maca 3.7.2.1。
|
||||
3. 创建完成后,进入算力容器,点击“工具-lab”即可打开 JupyterLab 终端开始项目创作。
|
||||
|
||||

|
||||

|
||||
|
||||
**说明:** 由于本次使用的是预装的专属镜像,环境中已经默认安装并配置好了 PyTorch、FlashAttention、einops 等依赖包。因此在启动实例后,无需再进行繁琐的依赖库版本验证即可直接进入测试环节。
|
||||
|
||||
|
|
@ -392,7 +392,7 @@ Benchmark 脚本用于理解目标算子的调用方式、输入输出 shape 和
|
|||
4. 找到对应题目 **Agent推理算子库优化-FlashAttention KV Cache Decode**。
|
||||
5. 点击进入题目详情页,查看题目描述、接口约定、数据范围和提交入口。
|
||||
|
||||

|
||||

|
||||
|
||||
### Step 10:理解 CUDA Maca 接口约定与精度要求
|
||||
|
||||
|
|
@ -593,9 +593,9 @@ S_{\mathrm{display}} = 150 + 10 \cdot \log_{10}\left(\frac{S}{150}\right)
|
|||
|
||||
在榜单页面,可以查看所有参赛者的排名情况:
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
* **本题得分:** 展示该题的历史最好成绩,排名按本题得分从高到低排序。
|
||||
* **个人排名:** 页面顶部会显示你的当前排名和当前得分,方便快速了解自己的位置。
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## 1. 教程定位
|
||||
|
||||
本教程是 **沐曦 - 揭榜挂帅 - Agent 推理算子库优化 - FlashInfer 任务** 的 “benchmark 性能基线与 XPU-OJ 提交衔接” 模块,主要帮助学员跑通目标算子的 benchmark 脚本,理解原库 API、输入输出结构、性能指标和性能基线结果,并进一步读懂 XPU-OJ 题目中的接口约定、测试数据、参考输出和精度要求。
|
||||
本教程是赛题二 FlashInfer 任务的 “benchmark 性能基线与 XPU-OJ 提交衔接” 模块,主要帮助学员跑通目标算子的 benchmark 脚本,理解原库 API、输入输出结构、性能指标和性能基线结果,并进一步读懂 XPU-OJ 题目中的接口约定、测试数据、参考输出和精度要求。
|
||||
|
||||
需要特别说明:
|
||||
|
||||
|
|
@ -75,15 +75,7 @@
|
|||
|
||||
使用兑换码兑换 GPU 租用余额:
|
||||
|
||||
访问 [*模力方舟官网*](https://ai.gitee.com/),首次登录需要使用手机号或者 Gitee 账号进行注册。登录后显示页面:
|
||||
|
||||

|
||||
|
||||
点击页面左上角 “giteeAI - 模力方舟” 图标,进入用户控制台:
|
||||
|
||||

|
||||
|
||||
在左侧边栏选择 “费用中心”,点击右上角 “兑换” 使用兑换码兑换代金券:
|
||||
访问 [*模力方舟官网*](https://ai.gitee.com/),在左侧边栏进入 “费用中心”,点击右上角 “兑换” 使用兑换码兑换代金券;
|
||||
|
||||

|
||||
|
||||
|
|
@ -94,9 +86,9 @@
|
|||
|
||||

|
||||
|
||||
2. 进入 “创建实例” 页面,确认计费方式为 “按量收费”,预装镜像选择:基础镜像 - **PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.1.5**,点击下一步;
|
||||
2. 进入 “创建实例” 页面,确认计费方式为 “按量收费”,预装镜像选择:基础镜像 - **PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.2.1**,点击下一步;
|
||||
|
||||

|
||||

|
||||
|
||||
3. 勾选同意服务条款,点击 “创建实例”;
|
||||
|
||||
|
|
@ -134,7 +126,7 @@
|
|||
|
||||

|
||||
|
||||
此部分内容可参考教程:[*模力方舟快速使用SOP*](https://gitlink.org.cn/metax-maca/op_optimization/tree/master/%E6%A8%A1%E5%8A%9B%E6%96%B9%E8%88%9F%E5%BF%AB%E9%80%9F%E4%BD%BF%E7%94%A8SOP.md)
|
||||
此部分内容可参考教程:[*模力方舟快速使用SOP*](../模力方舟快速使用SOP.md)
|
||||
|
||||
#### 4.1.4 深度学习环境配置
|
||||
|
||||
|
|
@ -169,7 +161,7 @@ which mxcc && mxcc --version || echo "mxcc 未找到,请确认 MACA 工具链
|
|||
|
||||
| 问题 | 解决方法 |
|
||||
| --- | --- |
|
||||
| `mxcc: command not found` | MACA 工具链未安装或 `PATH` 未配置,检查镜像是否预装或参考 [*模力方舟快速使用SOP*](https://gitlink.org.cn/metax-maca/op_optimization/tree/master/%E6%A8%A1%E5%8A%9B%E6%96%B9%E8%88%9F%E5%BF%AB%E9%80%9F%E4%BD%BF%E7%94%A8SOP.md) |
|
||||
| `mxcc: command not found` | MACA 工具链未安装或 `PATH` 未配置,检查镜像是否预装或参考 [*模力方舟快速使用SOP*](../模力方舟快速使用SOP.md) |
|
||||
|
||||
### 4.2 工具准备
|
||||
|
||||
|
|
@ -179,7 +171,7 @@ which mxcc && mxcc --version || echo "mxcc 未找到,请确认 MACA 工具链
|
|||
|
||||
- 已确认 Agent 可以正常调用模型。
|
||||
|
||||
配置过程可参考 [*模力方舟Agent部署准备教程*](https://gitlink.org.cn/metax-maca/op_optimization/tree/master/%E5%9F%BA%E4%BA%8EAI%20Agent%E5%BC%80%E5%8F%91%E8%8C%83%E5%BC%8F%E7%9A%84%E5%9B%BD%E4%BA%A7GPU%E5%A4%A7%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86%E7%AE%97%E5%AD%90%E5%BA%93%E4%BC%98%E5%8C%96%2F%E6%A8%A1%E5%8A%9B%E6%96%B9%E8%88%9FAgent%E9%83%A8%E7%BD%B2%E5%87%86%E5%A4%87%E6%95%99%E7%A8%8B.md)。
|
||||
配置过程可参考 [*模力方舟Agent部署准备教程*](模力方舟Agent部署准备教程.md)。
|
||||
|
||||
|
||||
**以配置 OpenCode 为例**
|
||||
|
|
@ -212,8 +204,6 @@ XPU-OJ 账号由组委会统一发放,参赛者无需自行注册。
|
|||
|
||||
### 4.5 评分规则概要
|
||||
|
||||
评分规则详情参考 [*基于AI Agent开发范式的国产GPU大模型推理算子库优化比赛方案*](https://gitlink.org.cn/metax-maca/op_optimization/tree/master/%E5%9F%BA%E4%BA%8EAI%20Agent%E5%BC%80%E5%8F%91%E8%8C%83%E5%BC%8F%E7%9A%84%E5%9B%BD%E4%BA%A7GPU%E5%A4%A7%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86%E7%AE%97%E5%AD%90%E5%BA%93%E4%BC%98%E5%8C%96%2F%E5%9F%BA%E4%BA%8EAI%20Agent%E5%BC%80%E5%8F%91%E8%8C%83%E5%BC%8F%E7%9A%84%E5%9B%BD%E4%BA%A7GPU%E5%A4%A7%E6%A8%A1%E5%9E%8B%E7%AE%97%E5%AD%90%E6%8E%A8%E7%90%86%E5%BA%93%E4%BC%98%E5%8C%96%E6%96%B9%E6%A1%88.md)。
|
||||
|
||||
提交作品的最终评价采用 **100 分制**,由客观评测和专家评审共同组成:
|
||||
|
||||
| 类别 | 评审维度 | 权重 | 说明 |
|
||||
|
|
@ -224,7 +214,7 @@ XPU-OJ 账号由组委会统一发放,参赛者无需自行注册。
|
|||
|
||||
|
||||
> - OJ 榜单分数与比赛最终得分属于不同分值体系。OJ 内部以各算子 baseline 为 50 分基准、硬件理论上限约 100 分;比赛性能部分满分 60 分,按排名映射;
|
||||
> - FlashInfer 方向包含多个子任务,任选一种或多种提交,各子任务独立计分,取通过正确性和稳定性测试的最高成绩参与排名,即 **FlashInfer 任务分数** = $\max$\{子题1分数, ..., 子题4分数\};
|
||||
> - FlashInfer 方向包含多个子任务,任选一种或多种提交,各子任务独立计分,取通过正确性和稳定性测试的最高成绩参与排名;
|
||||
> - 组委会对提交内容严格审查,严禁抄袭,一经发现取消成绩。
|
||||
|
||||
## 5. 知识预备
|
||||
|
|
@ -354,7 +344,7 @@ pip install pandas
|
|||
|
||||
**预期结果:**
|
||||
|
||||

|
||||

|
||||
|
||||
#### Step 3:验证项目脚本
|
||||
|
||||
|
|
@ -489,14 +479,14 @@ else:
|
|||
|
||||
**选择目标题目**
|
||||
|
||||
FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通道,**FlashInfer 任务分** = $\max$\{各子题得分\}。每个对应独立的 benchmark 脚本、题目说明、`run_kernel(...)` 接口和数据范围。
|
||||
FlashInfer 方向包含 **4 个可选算子题目**,每个对应独立的 benchmark 脚本、题目说明、`run_kernel(...)` 接口和数据范围。
|
||||
|
||||
| OJ 题号 | OJ 题目名称 | 核心特点 | Benchmark 脚本 | FlashInfer API |
|
||||
| OJ 题号 | 算子类型 | 核心特点 | Benchmark 脚本 | FlashInfer API |
|
||||
|---------|---------------|----------------|----------|----------|
|
||||
| **20001** | FlashInfer Ragged Prefill | GQA布局,Q/K/V平坦存储,causal=1 | `bench_batch_prefill_ragged.py` | `BatchPrefillWithRaggedKVCacheWrapper` |
|
||||
| **20002** | FlashInfer Paged Prefill | KV Cache分页存储,需解析page table | `bench_batch_prefill_paged.py` | `BatchPrefillWithPagedKVCacheWrapper` |
|
||||
| **20003** | FlashInfer MLA Paged Attention | DeepSeek MLA特有,双路Q(nope+pe)/双路Cache(ckv+kpe) |`bench_batch_mla.py` | `BatchMLAPagedAttentionWrapper` |
|
||||
| **20004** | FlashInfer Paged Decode | 每次只1个query token,memory-bound |`bench_batch_decode.py` | `BatchDecodeWithPagedKVCacheWrapper` |
|
||||
| **20001** | Ragged Prefill | GQA布局,Q/K/V平坦存储,causal=1 | `bench_batch_prefill_ragged.py` | `BatchPrefillWithRaggedKVCacheWrapper` |
|
||||
| **20002** | Paged Prefill | KV Cache分页存储,需解析page table | `bench_batch_prefill_paged.py` | `BatchPrefillWithPagedKVCacheWrapper` |
|
||||
| **20003** | MLA Paged Attention | DeepSeek MLA特有,双路Q(nope+pe)/双路Cache(ckv+kpe) |`bench_batch_mla.py` | `BatchMLAPagedAttentionWrapper` |
|
||||
| **20004** | Paged Decode | 每次只1个query token,memory-bound |`bench_batch_decode.py` | `BatchDecodeWithPagedKVCacheWrapper` |
|
||||
|
||||
**每个子题的接口参数、数据范围和精度要求以对应题目说明为准。** 下文以题目 **20001 Flashinfer Ragged Prefill** 为例演示从 benchmark 到 XPU-OJ 提交的完整流程。
|
||||
|
||||
|
|
@ -507,7 +497,7 @@ FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通
|
|||
> 完成 benchmark 后,需要注意 benchmark 脚本主要用于建立性能基线,并不需要最终提交
|
||||
> 最终评测以 XPU-OJ 为准,评测程序会调用选手提交代码中的 `run_kernel`,并将输出结果与 OJ 后台参考实现结果进行比较
|
||||
|
||||
下面以题目 **20001 FlashInfer Ragged Prefill** 为例,从本地题目文档 [*Agent 推理算子库优化 - FlashInfer Ragged Prefill*](https://gitlink.org.cn/metax-maca/op_optimization/tree/master/%E5%9F%BA%E4%BA%8EAI%20Agent%E5%BC%80%E5%8F%91%E8%8C%83%E5%BC%8F%E7%9A%84%E5%9B%BD%E4%BA%A7GPU%E5%A4%A7%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86%E7%AE%97%E5%AD%90%E5%BA%93%E4%BC%98%E5%8C%96%2Foperator_task_package%2Fflashinfer_task_package%2Fxpuoj_problem%2Fproblem_20001%2FAgent%20%E6%8E%A8%E7%90%86%E7%AE%97%E5%AD%90%E5%BA%93%E4%BC%98%E5%8C%96%20-%20FlashInfer%20Ragged%20Prefill.md) 中逐节解读关键信息。
|
||||
下面以题目 **20001 FlashInfer Ragged Prefill** 为例,从本地题目文档 [*Agent 推理算子库优化 - FlashInfer Ragged Prefill*](./operator_task_package/flashinfer_task_package/xpuoj_problem/problem_20001/Agent%20推理算子库优化%20-%20FlashInfer%20Ragged%20Prefill.md) 中逐节解读关键信息。
|
||||
|
||||
1. `## 1. 题目描述` — 我要实现什么?
|
||||
|
||||
|
|
@ -595,24 +585,23 @@ FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通
|
|||
|
||||
#### Step 7:登录 XPU-OJ 并进入题目页面
|
||||
|
||||
使用组委会统一发放的账号登录 XPU-OJ,并在 XPU-OJ 上找到 **比赛 -> 沐曦 - 揭榜挂帅 - Agent 推理算子库优化 - FlashInfer 任务**,进入后可见 4 个题目。
|
||||
使用组委会统一发放的账号登录 XPU-OJ,并进入对应赛题页面。
|
||||
|
||||
1. 打开 [*XPU-OJ*](https://xpuoj.com/) 平台,使用组委会统一发放的账号和初始密码登录;
|
||||
1. 打开 [*XPU-OJ*](https://xpuoj.com/) 平台,使用组委会统一发放的账号和初始密码登录 **【后续发布】**;
|
||||
|
||||

|
||||
|
||||
2. 登录后进入 **比赛** 列表,找到 **沐曦 - 揭榜挂帅 - Agent 推理算子库优化 - FlashInfer 任务**;
|
||||
2. 登录后进入比赛 / 题目列表页面;
|
||||
|
||||

|
||||

|
||||
|
||||
3. 找到对应题目,例如 **20001 FlashInfer Ragged Prefill**;
|
||||
|
||||
3. 找到对应题目,例如 **Agent 推理算子库优化 - FlashInfer Ragged Prefill(OJ 题号 20001)** ;
|
||||
|
||||

|
||||

|
||||
|
||||
4. 点击进入题目详情页,查看题目描述、接口约定、数据范围和提交入口。
|
||||
|
||||

|
||||

|
||||
|
||||
#### Step 8:提交 OJ 冒烟代码
|
||||
**目标**:完成一次最小提交,确认 OJ 提交链路、语言环境和 `run_kernel(...)` 接口可用。
|
||||
|
|
@ -659,7 +648,7 @@ FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通
|
|||
|
||||
- [*点击查看参考 Prompt*](#参考%20prompt)
|
||||
|
||||
- [*点击查看参考冒烟代码*](#参考冒烟代码)
|
||||
- [*点击查看参考冒烟代码*](#20001%20flashinfer%20ragged%20prefill%20参考冒烟代码)
|
||||
|
||||
更多 OpenCode 使用教程和 Agent 使用技巧可见
|
||||
|
||||
|
|
@ -671,11 +660,11 @@ FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通
|
|||
|
||||
4. 点击提交,等待评测结果返回;
|
||||
|
||||

|
||||

|
||||
|
||||
评测时间与题目测试点数量、队列状态和平台负载有关,通常需要等待**数十秒到数分钟**,以平台实际运行状况为准。
|
||||
评测时间与题目测试点数量、队列状态和平台负载有关,通常需要等待**数十秒到数分钟**,以平台实际返回为准。
|
||||
|
||||

|
||||

|
||||
|
||||
**OJ 评测流程**:
|
||||
|
||||
|
|
@ -701,46 +690,45 @@ FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通
|
|||
|
||||
5. 查看结果
|
||||
|
||||
1. 单测试点分析 — 以 OJ 返回的一次评测结果为例
|
||||
1. 单测试点分析 — 以 OJ 返回的一次评测为例
|
||||
|
||||
提交后,OJ 平台对每个测试用例独立评测并返回结果。以下是一份冒烟提交的典型评测输出(来自 20001 FlashInfer Ragged Prefill 第 1 个测试点):
|
||||
提交后,OJ 平台对每个测试用例独立评测并返回结果。以下是一份优化后的真实评测输出(来自 20001 FlashInfer Ragged Prefill 第 1 个测试点):
|
||||
|
||||

|
||||

|
||||
|
||||
```plaintext
|
||||
测试点 #1
|
||||
Testcase #1
|
||||
Accepted
|
||||
1 pts
|
||||
119 ms
|
||||
112 pts
|
||||
125 ms
|
||||
22.0 G
|
||||
输入文件
|
||||
|
||||
1
|
||||
你的输出
|
||||
Your output
|
||||
|
||||
OJCHAL v1 dQ0CZtDCX0JLxT1SF4h/Pw==
|
||||
OJRESULT v1 c6583f61291371b771de67188893f7d47a745beb2929edce17a67f44a0d80def eyJzY2hlbWFfdmVyc2lvbiI6MiwidGltZV9tcyI6MTE5LjI0Mywic3BlZWR1cCI6MC4wMTM0NTIsInRrX3RpbWVfbXMiOjExOS4yNDMsInRiX3RpbWVfbXMiOjEuNjA0LCJ0aF90aW1lX21zIjowLjM3MzMzNCwic2NvcmVfcmF0aW8iOjAuMDEwMjQ3LCJwYXNzIjp0cnVlfQ==
|
||||
你的标准错误输出
|
||||
OJCHAL v1 1bHB14u2jFxvzumsIYHDPA==
|
||||
OJRESULT v1 f84db85c... eyJ0aW1lX21zIjoxMjQuNjY1LCJzcGVlZHVwIjoyLjgwMjY1NSwidGtfdGltZV9tcyI6MTI0LjY2NSwidGJfdGltZV9tcyI6MzQ5LjM5MywidGhfdGltZV9tcyI6MTQ2LjYwMTU1LCJzY29yZV9yYXRpbyI6MS4xMjEyOTQsInBhc3MiOnRydWV9
|
||||
|
||||
{"schema_version":2,"time_ms":119.243,"speedup":0.013452,"tk_time_ms":119.243,"tb_time_ms":1.604,"th_time_ms":0.373334,"score_ratio":0.010247,"pass":true}
|
||||
检查器信息
|
||||
Checker message
|
||||
|
||||
=== SPJ Report - FlashInfer Batch Prefill ===
|
||||
----------------------------------------------------------------
|
||||
Testcase #1
|
||||
Config: sol016_trace_synthetic_b33_total16294: batch=33, total_q=16294, total_kv=16294, max_q=987, max_kv=987, q_heads=32, kv_heads=4, head_dim_qk=128, head_dim_vo=128, causal=1, source=sol-execbench 016 axes
|
||||
Config: batch=16, seq_len=16384, q_heads=32, kv_heads=4,
|
||||
head_dim_qk=128, head_dim_vo=128, causal=1
|
||||
|
||||
Baseline: 1.604000 ms
|
||||
User kernel: 119.243000 ms
|
||||
Speedup vs base: 0.013 x
|
||||
Baseline: 349.393000 ms
|
||||
User kernel: 124.665000 ms
|
||||
Hardware bound: 146.601550 ms
|
||||
Speedup vs base: 2.803 x
|
||||
|
||||
Score ratio: 0.010247 (1.02%)
|
||||
Display score: 1 / 100
|
||||
Score ratio: 1.121294 (112.13%)
|
||||
Display score: 112 / 100
|
||||
Pass: OK
|
||||
----------------------------------------------------------------
|
||||
```
|
||||
|
||||
> 以上是一份冒烟提交的评测输出示例:`speedup = 0.013x`(远慢于 baseline),`Display score = 1`。 `OJCHAL` 和 `OJRESULT` 为平台元信息,参赛者无需关注,SPJ Report 中已包含所有评测指标的可读版本。
|
||||
> 以上是**优化后**的结果(得分 112 分,加速比 2.8x),非冒烟测试预期。冒烟测试通常 `speedup < 1`,这是正常的起始点。另外 `OJCHAL` 和 `OJRESULT` 为平台元信息,参赛者无需关注,SPJ Report 中已包含所有评测指标的可读版本
|
||||
|
||||
**OJ 输出中各项指标的含义:**
|
||||
|
||||
|
|
@ -749,16 +737,16 @@ FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通
|
|||
```plaintext
|
||||
Testcase #1
|
||||
Accepted ← 状态
|
||||
1 pts ← 显示得分
|
||||
119 ms ← kernel 耗时
|
||||
112 pts ← 显示得分
|
||||
125 ms ← kernel 耗时
|
||||
22.0 G ← 内存占用
|
||||
```
|
||||
|
||||
| 项目 | 含义 | 说明 |
|
||||
|------|------|------|
|
||||
| `Accepted` | 评测状态 | 通过正确性校验;若为 `Wrong Answer`、`Time Limit Exceeded` 则未通过,不参与排名 |
|
||||
| `1 pts` | 显示得分 | 基于评分公式 + 对数压缩后的分数。冒烟阶段通常极低,正常现象 |
|
||||
| `119 ms` | kernel 耗时 | 该测试点 OJ 测速阶段你的 kernel 平均执行时间 |
|
||||
| `Accepted` | 评测状态 | 通过正确性校验;若为 `Wrong Answer` 则未通过,不参与排名 |
|
||||
| `112 pts` | 显示得分 | 基于评分公式 + 对数压缩后的分数(满分参考值 100) |
|
||||
| `125 ms` | kernel 耗时 | 该测试点 OJ 测速阶段你的 kernel 平均执行时间 |
|
||||
| `22.0 G` | 内存占用 | CPU 侧 RSS,仅供平台监控进程占用、防止 OOM |
|
||||
|
||||
其次,`Checker message` 中的 SPJ Report 给出了详细的性能对比:
|
||||
|
|
@ -767,15 +755,16 @@ FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通
|
|||
=== SPJ Report - FlashInfer Batch Prefill ===
|
||||
----------------------------------------------------------------
|
||||
Testcase #1
|
||||
Config: sol016_trace_synthetic_b33_total16294: batch=33, total_q=16294, total_kv=16294, max_q=987, max_kv=987,
|
||||
q_heads=32, kv_heads=4, head_dim_qk=128, head_dim_vo=128, causal=1
|
||||
Config: batch=16, seq_len=16384, q_heads=32, kv_heads=4,
|
||||
head_dim_qk=128, head_dim_vo=128, causal=1
|
||||
|
||||
Baseline: 1.604000 ms
|
||||
User kernel: 119.243000 ms
|
||||
Speedup vs base: 0.013 x
|
||||
Baseline: 349.393000 ms
|
||||
User kernel: 124.665000 ms
|
||||
Hardware bound: 146.601550 ms
|
||||
Speedup vs base: 2.803 x
|
||||
|
||||
Score ratio: 0.010247 (1.02%)
|
||||
Display score: 1 / 100
|
||||
Score ratio: 1.121294 (112.13%)
|
||||
Display score: 112 / 100
|
||||
Pass: OK
|
||||
----------------------------------------------------------------
|
||||
```
|
||||
|
|
@ -784,41 +773,44 @@ FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通
|
|||
|
||||
| 字段 | 含义 | 本例值 | 解读 |
|
||||
|------|------|--------|------|
|
||||
| `Config` | 测试配置 | — | 该测试点的 `batch`、`total_q`、`max_q`、`q_heads`、`kv_heads` 等参数 |
|
||||
| `Baseline` | OJ 参考实现耗时 (ms) | `1.60 ms` | 你的基准对比对象 |
|
||||
| `User kernel` | 你的 kernel 耗时 (ms) | `119.24 ms` | **核心性能指标** |
|
||||
| `Speedup vs base` | 加速比 | `0.013x` | `Baseline / User kernel`。`< 1` 表示比 baseline 慢 |
|
||||
| `Score ratio` | 归一化得分(原始值) | `0.0102` | 综合评分原始值 |
|
||||
| `Display score` | 显示得分 | `1` | OJ 内部评分,冒烟阶段通常极低 |
|
||||
| `Pass` | 正确性校验 | `OK` | 通过了正确性校验,可参与排名 |
|
||||
| `Pass` | 正确性校验 | `OK` | 通过了 `allclose(rtol=1e-2, atol=1e-2)`,可参与排名 |
|
||||
| `User kernel` | 你的 kernel 耗时 (ms) | `124.67 ms` | **核心性能指标** |
|
||||
| `Baseline` | OJ 参考实现耗时 (ms) | `349.39 ms` | 你的基准对比对象 |
|
||||
| `Hardware bound` | 硬件理论下限 (ms) | `146.60 ms` | 基于 FLOPs / 带宽估算的理论最快时间 |
|
||||
| `Speedup vs base` | 加速比 | `2.80x` | `Baseline / User kernel`,`> 1` 表示优于 OJ 参考实现 |
|
||||
| `Score ratio` | 归一化得分(原始值) | `1.121` | 综合评分原始值 |
|
||||
| `Display score` | 显示得分 | `112` | 经过对数压缩后的得分,超过 100 表示超越硬件理论估算 |
|
||||
| `Config` | 测试配置 | — | 该测试点的 `batch`、`seq_len`、`q_heads`、`kv_heads` 等参数 |
|
||||
|
||||
**从 SPJ Report 分析优化方向:**
|
||||
|
||||
以上述冒烟结果为例:
|
||||
- `Speedup vs base = 0.013x`:**冒烟代码远慢于 OJ baseline**,这是正常的起始点——冒烟阶段的目的是验证接口和提交链路,不追求性能;
|
||||
以上述结果为例:
|
||||
- `Speedup vs base = 2.80x`,已超越 OJ 参考实现 2.8 倍
|
||||
|
||||
- `Baseline = 1.60ms` 对比 `User kernel = 119.24ms`:两者之间有约 75 倍的性能差距,说明**优化空间巨大**。后续可以通过引入 tiling、shared memory、向量化访存等优化手段逐步缩小差距。
|
||||
- `User kernel = 124.67ms` 对比 `Hardware bound = 146.60ms`:**你的 kernel 已超越硬件理论下限**,说明该测试点的实现已非常接近硬件极限,继续优化的收益空间有限
|
||||
|
||||
- `Score ratio = 1.121` 对应 `Display score = 112`,已超过 100 分的满分线
|
||||
|
||||
**优化优先级判断法:**
|
||||
|
||||
| 情况 | 优化空间 | 建议方向 |
|
||||
|------|----------|----------|
|
||||
| `User kernel ≫ Baseline`(speedup < 1) | 巨大 | 冒烟阶段正常状态。优先保证正确性,再引入 tiling / shared memory 等基础优化 |
|
||||
| `User kernel ≈ Baseline` | 大 | 已追平 baseline,进一步分析 compute / memory 瓶颈 |
|
||||
| `User kernel ≪ Baseline`(speedup > 1) | 中 | 已优于 baseline,使用 profiler 精调瓶颈阶段 |
|
||||
| `User kernel ≈ Baseline` | 大 | 先保证正确性,再分析 compute / memory 瓶颈 |
|
||||
| `User kernel` 在 `Baseline` 和 `Hardware bound` 之间 | 中 | 使用 profiler 分析,优化瓶颈阶段 |
|
||||
| `User kernel ≈ Hardware bound` | 小 | 该测试点已接近最优,转而优化其他测试点 |
|
||||
|
||||
**查看所有测试用例结果:**
|
||||
|
||||
OJ 平台每次提交会评测所有测试用例,每个测试用例返回一组独立的 SPJ Report。每个子题独立计分,FlashInfer 任务总分取各子题得分的最高值。建议将各组结果整理成表格,方便跟踪优化进展:
|
||||
OJ 平台每次提交会评测所有测试用例,每个测试用例返回一组独立的 SPJ Report。建议将各组结果整理成表格,方便跟踪优化进展:
|
||||
|
||||
| 测试点 | batch | total_q | Baseline | User kernel | Speedup | Score | Pass |
|
||||
| 测试点 | batch_size | seq_len | Baseline | User kernel | Speedup | Score | Pass |
|
||||
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
||||
| 1 | 33 | 16294 | 1.60 | 119.24 | 0.013 | 1 | ✓ |
|
||||
| 2 | 1 | 1024 | — | — | — | — | — |
|
||||
| 1 | 1 | 1024 | — | — | — | — | — |
|
||||
| 2 | 1 | 4096 | — | — | — | — | — |
|
||||
| ... | ... | ... | ... | ... | ... | ... | ... |
|
||||
| 15 | 2 | 98 | — | — | — | — | — |
|
||||
| 12 | 16 | 16384 | 349.39 | 124.67 | 2.80 | 112.13 | ✓ |
|
||||
|
||||
2. XPU-OJ 平台评分机制(**仅供参考**)
|
||||
2. XPU-OJ 平台评分机制(仅供参考)
|
||||
|
||||
以下为 XPU-OJ 平台的内部评分算法,用于生成榜单中每个题目的单题分数。请注意:
|
||||
|
||||
|
|
@ -830,7 +822,7 @@ FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通
|
|||
|
||||
**单测试点评分公式**(参考 Sol-ExecBench):
|
||||
|
||||
$S(T_k) = \frac{100}{1 + \left(\frac{1}{0.5} - 1\right) \cdot \frac{T_k - T_h}{T_b - T_h}}$
|
||||
$$S(T_k) = \frac{100}{1 + \left(\frac{1}{0.5} - 1\right) \cdot \frac{T_k - T_h}{T_b - T_h}}$$
|
||||
|
||||
其中:
|
||||
- $T_k$:你的 kernel 平均时间
|
||||
|
|
@ -856,16 +848,17 @@ FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通
|
|||
|
||||
3. 榜单查看 — 如何阅读排行榜
|
||||
|
||||
排行榜位于 **比赛 -> 沐曦 - 揭榜挂帅 - Agent 推理算子库优化 - FlashInfer 任务 -> 排行榜** 页面,展示各参赛者在每个题目的 OJ 内部得分。请注意:**OJ 榜单中各题的分数与比赛最终得分不是同一体系。** 比赛最终成绩中,性能提升效果仅取你得分最高的一个任务,按该任务的 OJ 排名换算(详见 [*4.5 评分规则概要*](#45%20评分规则概要))。
|
||||
排行榜位于 XPU-OJ 比赛页面,展示各参赛者在每个题目的 OJ 内部得分。请注意:**OJ 榜单中各题的分数与比赛最终得分不是同一体系。** 比赛最终成绩中,性能提升效果仅取你得分最高的一个任务,按该任务的 OJ 排名换算(详见 [*4.5 评分规则概要*](#45%20评分规则概要))。
|
||||
|
||||

|
||||

|
||||
|
||||
**榜单解读**:
|
||||
|
||||
- FlashInfer 任务有 4 个子题,各子题独立计分,FlashInfer 任务得分取各子题的最高值;
|
||||
- 各题分数为 OJ 内部评分(OJ baseline = 50 分),排名按 Total(各题 OJ 得分之和)降序。此为 OJ 平台汇总逻辑,比赛最终只取单一最高分任务,不做多任务累加
|
||||
- 6 列对应 6 个 OJ 子题:Ragged Prefill (20001)、Paged Prefill (20002)、MLA Attention (20003)、Paged Decode (20004)、FlashAttention KV Cache Decode (20005)、Fused MoE i8 tn (20006)
|
||||
|
||||
- 每列下方的括号数值(如 `(24)`)表示该题提交次数
|
||||
- 各题分数为 OJ 内部评分(OJ baseline = 50 分),排名按 Total(各题 OJ 得分之和)降序。**比赛最终只取单一最高分任务**,而非多任务累加
|
||||
|
||||
- 每列下方的括号数值(如 `(48)`)表示该题提交次数
|
||||
|
||||
- `pass = false` 的提交不参与排名(对应 0 分)
|
||||
|
||||
|
|
@ -937,18 +930,7 @@ FlashInfer 方向包含 **4 个可选算子题目**,均属于同一比赛通
|
|||
- online softmax 的 m/l 更新逻辑是否正确
|
||||
```
|
||||
|
||||
### 7.7 调试 TLE 超时
|
||||
``` plaintext
|
||||
我的 run_kernel 提交到 OJ 后显示 Time Limit Exceeded,请帮我排查:
|
||||
1. 这是我的 submit 代码:[粘贴你的 run_kernel 实现]
|
||||
请帮我检查:
|
||||
- run_kernel 中是否调用了 cudaDeviceSynchronize()(应删除)
|
||||
- kernel 中 for 循环的终止条件是否有死循环风险
|
||||
- __syncthreads() 是否在条件分支内(应移到分支外)
|
||||
- grid/block 配置是否过大
|
||||
```
|
||||
|
||||
### 7.8 问题排查
|
||||
### 7.7 问题排查
|
||||
|
||||
``` plaintext
|
||||
运行 bench_batch_prefill_ragged.py 时报错 out of memory,请帮我分析原因并给出解决方案。
|
||||
|
|
@ -1262,7 +1244,7 @@ Before output, confirm ALL items. Any failure = 0 points.
|
|||
|
||||
[*回退到 Step 8*](#step%208提交%20oj%20冒烟代码)
|
||||
|
||||
### 参考冒烟代码
|
||||
### 20001 FlashInfer Ragged Prefill 参考冒烟代码
|
||||
|
||||
[*回退到 Step 8*](#step%208提交%20oj%20冒烟代码)
|
||||
|
||||
|
|
|
|||
|
|
@ -404,7 +404,7 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
|
||||
#### Step 7:登录 XPU-OJ 平台并进入题目页面
|
||||
|
||||
**目标:**访问 XPU-OJ 评测平台,登录并进入 Fused MoE 算子对应任务页面,熟悉页面布局。
|
||||
**目标:**访问 XPU-OJ 评测平台,找到 `fused_moe_i8_tn`算子题目,熟悉题目页面布局。
|
||||
|
||||
**操作:**
|
||||
|
||||
|
|
@ -412,13 +412,13 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
|
||||
[](https://www.picgo.net/image/image1.4tmFfp)
|
||||
|
||||
2. 进入 Fused MoE 任务页面:点击顶部导航栏【比赛】,选择【进行中】,找到 Fused MoE 任务点击右侧【进入】按钮。
|
||||
2. 进入比赛页面:点击顶部导航栏【比赛】,选择【进行中】,找到对应比赛进入。
|
||||
|
||||
[](https://www.picgo.net/image/image2.4i0rxb)
|
||||
[](https://www.picgo.net/image/image2.4tmnl6)
|
||||
|
||||
Fused MoE 任务包含 `Fused MoE i8 tn` 一个题目,直接点击即可进入题目页面:
|
||||
3. 进入题目页面:本算子对应比赛题目6:`Fused MoE i8 tn`,点击进入题目页面。
|
||||
|
||||
[](https://www.picgo.net/image/image3.4i0cXl)
|
||||
[](https://www.picgo.net/image/image3.4tmZJu)
|
||||
|
||||
完成上述步骤可进入如下题目页面:
|
||||
|
||||
|
|
@ -427,7 +427,7 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
* 右侧:提交区域,输入编写的`run_kernel(...)`后在下方选择对应的语言即可提交。提交后可通过上方导航栏【我的提交】查看历史提交。
|
||||
|
||||
|
||||
[](https://www.picgo.net/image/image4.4i0eCw)
|
||||
[](https://www.picgo.net/image/image4.4tmM4N)
|
||||
|
||||
#### Step 8:理解 XPU-OJ 评测接口和精度要求
|
||||
|
||||
|
|
@ -457,7 +457,7 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
|
||||
* 容差:`rtol=2e-2, atol=5e-3`;
|
||||
|
||||
* 通过率:`matched_ratio ≫ 0.99`(至少 99% 的元素在容差范围内)。
|
||||
* 通过率:`matched_ratio >= 0.99`(至少 99% 的元素在容差范围内)。
|
||||
|
||||
|
||||
#### Step 9:提交 OJ 冒烟代码
|
||||
|
|
@ -475,7 +475,7 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
4. 等待结果:评测时间与题目测试点数量、队列状态和平台负载有关,通常需要等待数十秒到数分钟。以平台实际返回为准。
|
||||
|
||||
|
||||
[](https://www.picgo.net/image/image5.4i15ww)
|
||||
[](https://www.picgo.net/image/image5.4tmuBi)
|
||||
|
||||
**预期结果:**
|
||||
|
||||
|
|
@ -497,7 +497,7 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
* 在提交记录中可查看每次提交的状态、总得分、耗时、内存:
|
||||
|
||||
|
||||
[](https://www.picgo.net/image/image6.4irF5q)
|
||||
[](https://www.picgo.net/image/image6.4tm6n2)
|
||||
|
||||
* 此页面下滑还可查看单测试点检查器信息(SPJ Report):
|
||||
|
||||
|
|
@ -553,18 +553,18 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
|
||||
1. 查看榜单
|
||||
|
||||
[](https://www.picgo.net/image/image8.4i1Bzd)
|
||||
[](https://www.picgo.net/image/image8.4tm3rO)
|
||||
|
||||
点击【排行榜】进入榜单页面,可查看:
|
||||
|
||||
* 总得分:各题目得分总和,本任务只包含一个题目,因此该题得分即为总分。
|
||||
* 总得分:各题目得分总和,决定最终排名。
|
||||
|
||||
* 个人排名及其它选手的排名:根据总分进行排名,方便参赛者纵向对比。
|
||||
* 个人排名:页面顶部显示【我的排名】与【我的总分】。
|
||||
|
||||
* 每题得分:表格中每列对应一个题目,方便参赛者横向对比。
|
||||
* 每题得分:表格中每列对应一个题目,便于横向对比。
|
||||
|
||||
|
||||
[](https://www.picgo.net/image/image9.4i4SOw)
|
||||
[](https://www.picgo.net/image/image9.4t3S4J)
|
||||
|
||||
2. 制定优化方向
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
基础镜像:
|
||||
|
||||
```plaintext
|
||||
PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.1.5
|
||||
PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.2.1
|
||||
```
|
||||
|
||||
## 二、学习目标
|
||||
|
|
@ -202,7 +202,7 @@ fusedmoe_v2.1
|
|||
本教程使用的镜像是:
|
||||
|
||||
```plaintext
|
||||
PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.1.5
|
||||
PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.2.1
|
||||
```
|
||||
|
||||
这意味着你不需要从零安装 PyTorch、MACA、mxcc 等底层组件。你需要做的是进入镜像、确认环境、放入源码并运行 baseline。
|
||||
|
|
@ -256,7 +256,7 @@ MiniMax-M2.7
|
|||
3. 选择镜像:
|
||||
|
||||
```plaintext
|
||||
PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.1.5
|
||||
PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.2.1
|
||||
```
|
||||
|
||||
4. 点击创建实例。
|
||||
|
|
@ -308,7 +308,7 @@ print("cuda available:", torch.cuda.is_available())
|
|||
PY
|
||||
```
|
||||
|
||||
期望输出:torch: 2.8.0+metax3.7.1.5
|
||||
期望输出:torch: 2.8.0+metax3.7.1.3
|
||||
|
||||
检查 MACA / mxcc:
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
## 推进流程
|
||||
|
||||
**第一步:获取算力。** 赛事提供曦云 C500 在线算力,无需自备硬件。在沐曦开发者社区领取算力券,于模力方舟平台租用实例,选择镜像 `PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.1.5`。详见 [模力方舟快速使用 SOP](../模力方舟快速使用SOP.md)。
|
||||
**第一步:获取算力。** 赛事提供曦云 C500 在线算力,无需自备硬件。在沐曦开发者社区领取算力券,于模力方舟平台租用实例,选择镜像 `PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.2.1`。详见 [模力方舟快速使用 SOP](../模力方舟快速使用SOP.md)。
|
||||
|
||||
**第二步:部署 Agent。** 推荐安装 OpenCode,通过模力方舟 API 接入 MiniMax-M2.7 模型。部署后执行 `mx-smi` 确认 Agent 可操作当前环境。详见 [模力方舟 Agent 部署准备教程](../基于AI%20Agent开发范式的国产GPU大模型推理算子库优化/模力方舟Agent部署准备教程.md)。
|
||||
|
||||
|
|
@ -78,7 +78,7 @@
|
|||
- 报名:2026 年 5 月 30 日 – 6 月 30 日,[挑战杯官网](https://2026.tiaozhanbei.net/)
|
||||
- 作品提交截止:2026 年 9 月 5 日
|
||||
- 团队上限 10 人,指导教师上限 3 人
|
||||
- 统一开发与评测镜像:`PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.1.5`
|
||||
- 统一开发与评测镜像:`PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.2.1`
|
||||
- Benchmark 须使用整张单卡(64 GB),日常开发建议 16–32 GB
|
||||
- 正确性测试为硬性门槛,未通过的作品不参与性能排名
|
||||
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@
|
|||
|
||||
## 4.创建实例
|
||||
|
||||
使用本赛事专属镜像:PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.1.5。
|
||||
使用本赛事专属镜像:PyTorch-Agent / 2.8.0 / Python 3.12 / maca 3.7.2.1。
|
||||
|
||||

|
||||

|
||||
|
||||
## 5.项目创作
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue