GPUKernelContest/README.md

6.2 KiB
Raw Blame History

GPU 算子优化挑战赛GPUKernelContest

欢迎参加 GPU 算子优化挑战赛 🎯
本比赛旨在通过优化深度学习框架中的核心计算模块,提升大模型的运行效率。在本仓库中,你可以提交你的优化代码、测试样例和使用说明。


🧠 比赛背景简介

随着大语言模型LLM, 如 ChatGPT 等)的广泛使用,其在运行推理时对计算资源的要求越来越高,出现了所谓的 “三高” 问题:

  • 高延迟:响应慢
  • 高显存占用:消耗大量显存
  • 高生态依赖:对系统和软件依赖复杂

本次挑战赛正是为了解决这些问题,鼓励选手优化 GPU 上的底层算子(即最基础的数学运算模块),提高模型推理效率。


🔧 挑战方向

本次挑战主要有两个技术方向:

1. Test Time Scaling 算子优化

  • 对深度学习框架中的基础算子(如 PyTorch 或 PaddlePaddle 中的矩阵乘法)进行性能优化。

2. Gemm 内核极致优化

  • GEMMGeneral Matrix Multiplication 是大模型中的核心计算操作。
  • 目标是对其内核Kernel进行精细调优提高执行效率。

👉 项目目标:在不更换硬件的前提下,让推理速度提升 30%


🚀 快速上手

本竞赛旨在评估参赛者在GPU并行计算领域的算法优化能力。为了快速让参赛者进入比赛状态我们提供了三个核心算法的高性能版本参考供参赛选手不断优化性能

  • ReduceSum: 高精度归约求和
  • SortPair: 键值对稳定排序
  • TopkPair: 键值对TopK选择

三个核心算法赛题模板

📥 选手赛题准备

  1. 点击创建赛题
  2. 记录赛题的ID例如ICTN0N
  3. Fork仓库并初始化比赛环境(三个核心算法题优化赛题以外自定义的赛题需有入口run.sh脚本供CI自动测试验证)
    1. 拷贝赛题样例cp_template到赛题ICTN0N目录
      ├── S1(说明:第一季比赛名)
      │   ├── ICTN0N(说明以赛题ID命名目录存放赛题的PR)
      |   |   ├── utils
      │   |   ├── run.sh说明作为CI自动测试验证的入口
      |   |   └── ……
      │   └── ……
      └── S2说明第二季比赛名
          └── 赛题目录1
          └── 赛题目录2
      

编译和测试

选手赛题目录内提供了编译、测试的脚本,供选手熟悉比赛环境,步骤如下:

# 注意参赛选手需要根据自己的赛题ID进入自己初始化的目录
cd GPUKernelContest/S1/ICTN0N

1. 全量编译和运行

# 编译并运行所有算法测试(默认行为)
./run.sh

# 编译并运行单个算法测试
./run.sh --run_reduce   # ReduceSum算法
./run.sh --run_sort     # SortPair算法
./run.sh --run_topk     # TopkPair算法

2. 手动运行测试

# 仅编译所有算法,不运行测试
./run.sh --build-only

# 单个运行不同算法的测试
./build/test_reducesum [correctness|performance|all]
./build/test_sortpair [correctness|performance|all]
./build/test_topkpair [correctness|performance|all]

对于如何提交可参考:如何贡献

参赛要求:

  • 提交内容必须可以在MACA软件上运行。
  • 所提交的优化代码将由主办方审核,需成功合并Merge到官方 Gitee 仓库,才算有效提交。

📦 提交内容包含:

  • 算子优化后的代码
  • 可运行的测试用例
  • 使用说明文档

📈 评分机制

每次合并的提交会按以下规则评分:

🎯 基础得分Level

等级 内容描述 分值
Level 1 优化一个 PyTorch / Paddle 算子 5 分
Level 2 融合优化 2~9 个算子 10 分
Level 3 含 MMA多维矩阵乘融合算子 50 分
Level 4 用于大模型推理的复杂融合算子 50 分
合并至MACA开源项目仓库的每个PR<需要在赛题提供对应合并的记录,并确保和参赛使用的邮箱一致的提交邮箱> - 50 分

加分项:

内容 分值
代码规范、清晰 +10 分
性能优化明显 +10 分
记录优化过程、说明模型来源 +20 分
使用 LLM Prompt 自动生成代码及样例 +20 分

注意: 加分项只针对于在基础得分相同的情况下通过加分项来区分不同的排名和后续优秀选手的参考。


🏆 排名机制

  1. 评委评分从高到低排序
  2. 评估规则: 取前 12 名作为最终获奖选手
  3. 若基础得分相同:
  • 加分项多者优先
  • 提交数量多者优先
  • 提交时间早者优先
  1. 当同一参赛选手在本赛题有多个赛题的提交时,多个赛题计算累计得分

📚 参考MACA开源项目仓库

你可以参考以下项目仓库,了解算子开发与提交格式:


💡 术语解释

  • 算子Operator:指深度学习框架中的基本计算模块,例如矩阵乘法、卷积等。
  • GEMM:全称 General Matrix Multiplication一种用于矩阵计算的核心算法是大模型中的基础运算。
  • MMAMatrix Multiply-Accumulate多维矩阵乘加运算适用于复杂计算加速。
  • LLMLarge Language Model大语言模型如 GPT、BERT 等。
  • 推理Inference:模型训练完成后,用来“预测”或“使用”的过程。
  • Prompt:用于引导大模型生成特定内容的输入提示词。
  • PRPull Request:在 Git 仓库中提交你的修改请求,供维护者审查后合并。

📬 联系与帮助

如需帮助或有疑问,请联系主办方或在项目中发起 Issue。

祝你挑战顺利,优化出更快的大模型推理体验!🚀