diff --git a/README.md b/README.md index 49bc964..737753c 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,107 @@ # 评测数据集生成挑战赛(GPUCodeForces) -欢迎参加 **评测数据集生成挑战赛** 📊! -本比赛旨在构建一个标准化、可用于 GPU 性能测试的评测数据集,帮助开发者更高效地比较不同硬件和框架的性能表现。 +欢迎参加 **评测数据集生成挑战赛** 📊!   本比赛旨在构建一个标准化、可用于 GPU 性能测试的评测数据集,帮助开发者更高效地比较不同硬件和框架的性能表现。 --- -## 🧠 比赛背景简介 +## 🧠 比赛背景简介 -在 AI 模型开发和部署中,**GPU 性能评测**是一个非常重要的环节。 -不同 GPU、不同深度学习框架(如 PyTorch、TensorFlow、PaddlePaddle 等)在运行相同任务时,速度、吞吐量、内存占用等表现差异很大。 -本次挑战赛希望通过社区的力量,**构建一个标准化、带权重的评测数据集**,让 GPU 性能比较更加科学、公正。 +在 AI 模型开发和部署中,**GPU 性能评测**是一个非常重要的环节。   不同 GPU、不同深度学习框架(如 PyTorch、TensorFlow、PaddlePaddle 等)在运行相同任务时,速度、吞吐量、内存占用等表现差异很大。   本次挑战赛希望通过社区的力量,**构建一个标准化、带权重的评测数据集**,让 GPU 性能比较更加科学、公正。 --- -## 🎯 比赛目标 +## 🎯 比赛目标 -- 从 **PyTorch、PaddlePaddle、TensorFlow、Jax、MMCV、Transformers** 等框架中收集并生成评测样本。 -- 为每个样本提供**标准输出**和**性能指标**,确保结果可复现。 -- 最终形成 **GPU CodeForces** 数据集和评价方法。 +* 从 **PyTorch、PaddlePaddle、TensorFlow、Jax、MMCV、Transformers** 等框架中收集并生成评测样本。 + +* 为每个样本提供**标准输出**和**性能指标**,确保结果可复现。 + +* 最终形成 **GPU CodeForces** 数据集和评价方法。 + --- -## 📥 如何参与提交? +## 📥 如何参与提交? -### ✅ 参赛资格 -- 你提交的PR样本中,**至少有 1 个样本被评审通过并正式整合到“GPU CodeForces” 数据集**,即可算作有效参赛。 +### 📝初始化仓库及提交流程 -### 📦 提交PR内容 -- **一个PR包含样本的目录** [提交样例](https://gitee.com/ccf-ai-infra/GPUCodeForces/tree/main/example/001-example) -- 每个提交目录建议包含如下: - 1. **示例代码:** torch代码示例 - 2. **对比代码:** 和torch对应的CUDA代码 - 3. **测试代码入口:** run_code.py(请务必用这个名称,提交的PR会根据这个名称在GPU上测试结果) - 4. **其它文件(或目录):** prompt(利用LLM从torch代码生成cuda代码的prompt示例)或者其它优化代码 - 4. **PR目录说明文件:** https://gitee.com/ccf-ai-infra/GPUCodeForces/blob/main/example/001-example/readme.md +* 进入到赛事首页:[GPUCodeForces赛事首页](https://gitee.com/ccf-ai-infra/GPUCodeForces),点击[Issues](https://gitee.com/ccf-ai-infra/GPUCodeForces/issues/new/choose),选择赛题\[CP\]->立即开始: + -### 📦 提交PR的格式 + +然后按照模板格式填写相关信息后提交即可。在最后一个选项“推荐其他选手完成”这里,若有团队则可框选,若是自身完成则不用框选: -建议在开始做题目之前创建一个赛题,提交的PR和自己创建的赛题相关联。参赛选手在每个比赛周期的目录下(例如:第一期S1、第二期S2、第三期S3...)创建一个目录,目录名称赛题的ID(ICTXSZ),例如: + + +提交完成后,返回Issue主页可以看到自己的提交记录,可以复制Issue id进行保存: + + + +* 回到赛事主页,在仓库界面右上角选择fork至自己的仓库下: + + + + + + +然后把源项目克隆至本地,文件路径可以根据自己的喜好来: + + + +在克隆仓库或本地文件夹内都可以大展你的身手,进行算子优化了🎉! + +* 准备好了代码及各项必需文件后,在本地文件夹内启动git bash,进行初始化和远程仓库连接: + + +```shell +git init +git remote add origin https://gitee.com/your-name/GPUCodeForces.git +git remote -v +#成功后应显示: +#origin https://gitee.com/your-name/GPUCodeForces.git (fetch) +#origin https://gitee.com/your-name/GPUCodeForces.git (push) +``` + +* 然后将本地优化好的算子仓库存入到暂存区,并进行上传: + + +```shell +git add . +git commit -m "填写本次提交记录,如'第一次提交'" +git push -u origin master +#最后一步需要根据自身的实际仓库分支来,一般为master,也可能为main或者你自定义的目录名称,可以使用 git push --upstream orgin 目录名 ``` + +* 上传成功后,回到自己的仓库主页,选择”新建Pull Request“: + + + +然后在上传界面选择自己更新项目的分支,选择合并即可: + + + +### 📦 提交PR内容 + +* **一个PR包含样本的目录** [提交样例](https://gitee.com/ccf-ai-infra/GPUCodeForces/tree/main/example/001-example) + +* 每个提交目录建议包含如下: + + 1. **示例代码:** torch代码示例 + + 2. **对比代码:** 和torch对应的CUDA代码 + + 3. **测试代码入口:** run\_code.py(请务必用这个名称,提交的PR会根据这个名称在GPU上测试结果) + + 4. **其它文件(或目录):** prompt(利用LLM从torch代码生成cuda代码的prompt示例)或者其它优化代码 + + 5. **PR目录说明文件:** https://gitee.com/ccf-ai-infra/GPUCodeForces/blob/main/example/001-example/readme.md + + +### 📦 提交PR的格式 + +建议在开始做题目之前创建一个赛题,提交的PR和自己创建的赛题相关联。参赛选手在每个比赛周期的目录下(例如:第一期S1、第二期S2、第三期S3...)创建一个目录,目录名称赛题的ID(ICTXSZ),例如: + +```plaintext . ├── S1(说明:第一季比赛名称) │ ├── ICTXSZ(说明:以赛题ID命名的目录存放PR提交样本的目录) @@ -48,55 +111,91 @@ │ └── …… └── S2(第二季比赛) └── 赛题1 + ``` +### 💻审核流程 + +* 在一切文件都准备好并且提交后,在对应的PR下会得到回复: + + + + +也就是说,除了能够自己在服务器上运行得到算子测算的初步结果外,还可以在这里看到最终的测算结果。这里显示测试通过才能进入后续审核流程。 + +### ✅ 参赛资格 + +* 你提交的PR样本中,**至少有 1 个样本被评审通过并正式整合到“GPU CodeForces” 数据集**,即可算作有效参赛。 + + +### ⚠️注意事项 + +1. 请勿抄袭他人代码或成果 + +2. 请勿恶意提交(如相同算子多次提交、相近优化重复提交) + \---相近优化:即指同一份参赛用例在优化后加速比没有提升或更低的用例提交 + +3. 请遵守提交的格式要求、内容规范 + + --- -## 🏅 竞赛排名机制 +## 🏅 竞赛排名机制 -1. **优先按接受数量从高到低排序作为排名,取前12名。** -2. 若接受数量相同: - - 比较总基础评分高者优先 - - 若仍相同,比加分项得分高者优先 +1. **优先按接受数量从高到低排序作为排名,取前12名。** + +2. 若接受数量相同: + + * 比较总基础评分高者优先 + + * 若仍相同,比加分项得分高者优先 + -> **接受数量** = 提交并被评审通过的样本总数 +> **接受数量** = 提交并被评审通过的样本总数 -> **接受数量相同需要区分排名时如下的基础和甲方的评分规则才会生效** +> **接受数量相同需要区分排名时如下的基础和甲方的评分规则才会生效** --- -## 📈 评分规则 +## 📈 评分规则 + +### 📊 基础得分 -### 📊 基础得分 | 内容 | 分值 | -|------|------| -| 提供标准 GT 输出生成函数(Numpy-CPU / 原始框架实现) | +2 分 | -| CUDA 执行时间评估 | +5 分 | -| CUDA 吞吐量评估 | +4 分 | -| CUDA 内存带宽评估 | +3 分 | +| --- | --- | +| 提供标准 GT 输出生成函数(Numpy-CPU / 原始框架实现) | +2 分 | +| CUDA 执行时间评估 | +5 分 | +| CUDA 吞吐量评估 | +4 分 | +| CUDA 内存带宽评估 | +3 分 | + +### ✨ 加分项 -### ✨ 加分项 | 内容 | 分值 | -|------|------| -| 提供 Prompt 让 LLM 生成对应的 CUDA 代码,并同样进行性能评价 | 额外加分 | +| --- | --- | +| 提供 Prompt 让 LLM 生成对应的 CUDA 代码,并同样进行性能评价 | 额外加分 | --- -## 📚 术语解释 - -- **评测数据集**:用来测试 GPU 性能的一组标准化样本,包括代码、输入数据和预期结果。 -- **GT(Ground Truth)**:标准参考答案或结果,用来验证程序运行是否正确。 -- **吞吐量(Throughput)**:每秒钟能处理的数据量,越高表示 GPU 处理能力越强。 -- **内存带宽(Memory Bandwidth)**:单位时间内 GPU 内存与计算核心之间的数据传输速度。 -- **Prompt**:引导大语言模型(LLM)生成代码或内容的提示词。 -- **LLM**:Large Language Model,大语言模型,如 ChatGPT、LLaMA 等。 +## 📚 术语解释 + +* **评测数据集**:用来测试 GPU 性能的一组标准化样本,包括代码、输入数据和预期结果。 + +* **GT(Ground Truth)**:标准参考答案或结果,用来验证程序运行是否正确。 + +* **吞吐量(Throughput)**:每秒钟能处理的数据量,越高表示 GPU 处理能力越强。 + +* **内存带宽(Memory Bandwidth)**:单位时间内 GPU 内存与计算核心之间的数据传输速度。 + +* **Prompt**:引导大语言模型(LLM)生成代码或内容的提示词。 + +* **LLM**:Large Language Model,大语言模型,如 ChatGPT、LLaMA 等。 + --- -## 📬 联系与帮助 +## 📬 联系与帮助 -如需更多信息或格式说明,请查看官方文档或在本仓库提交[想法](https://gitee.com/ccf-ai-infra/GPUCodeForces/issues/new?template=feature.yml)进行讨论。 -祝你挑战成功,贡献出高质量的 GPU 评测数据集!🚀 +如需更多信息或格式说明,请查看官方文档或在本仓库提交[想法](https://gitee.com/ccf-ai-infra/GPUCodeForces/issues/new?template=feature.yml)进行讨论。  祝你挑战成功,贡献出高质量的 GPU 评测数据集!🚀 ## FAQ diff --git a/how-to-contribute.md b/how-to-contribute.md index 12bfd67..c209a59 100644 --- a/how-to-contribute.md +++ b/how-to-contribute.md @@ -2,6 +2,11 @@ 本项目协作采用标准的Pull Request(PR)流程机制,PR流程是开源项目协作和代码管理的核心机制。以下是创建和处理PR的详细步骤: +## 0. CLA签署 +- **目的**:项目内Pull Request需要贡献者签署贡献者协议后方可合并,为保证后续项目的顺利,建议提前进行CLA签署。 +- **步骤**: + - 点击[CLA签署链接](https://gitee.com/organizations/ccf-ai-infra/cla/governance),滑动阅读后在页面下方填写真实姓名,并选择参赛所用账号的邮箱即可。 + ## 1. Fork项目仓库 - **目的**:将原始仓库复制到您的Gitee(或github)账户下,以便您可以进行修改。 - **步骤**: diff --git a/images/readme_comment_check.png b/images/readme_comment_check.png new file mode 100644 index 0000000..23216f2 Binary files /dev/null and b/images/readme_comment_check.png differ diff --git a/images/readme_issue_create.png b/images/readme_issue_create.png new file mode 100644 index 0000000..d876dc4 Binary files /dev/null and b/images/readme_issue_create.png differ diff --git a/images/readme_issue_id.png b/images/readme_issue_id.png new file mode 100644 index 0000000..bf5721c Binary files /dev/null and b/images/readme_issue_id.png differ diff --git a/images/readme_issue_write.png b/images/readme_issue_write.png new file mode 100644 index 0000000..98d06b5 Binary files /dev/null and b/images/readme_issue_write.png differ diff --git a/images/readme_pr_create.png b/images/readme_pr_create.png new file mode 100644 index 0000000..5eeeb08 Binary files /dev/null and b/images/readme_pr_create.png differ diff --git a/images/readme_pr_upload.png b/images/readme_pr_upload.png new file mode 100644 index 0000000..42f7eaa Binary files /dev/null and b/images/readme_pr_upload.png differ diff --git a/images/readme_project_check.png b/images/readme_project_check.png new file mode 100644 index 0000000..2d46dee Binary files /dev/null and b/images/readme_project_check.png differ diff --git a/images/readme_project_clone.png b/images/readme_project_clone.png new file mode 100644 index 0000000..7841bce Binary files /dev/null and b/images/readme_project_clone.png differ diff --git a/images/readme_project_fork.png b/images/readme_project_fork.png new file mode 100644 index 0000000..ddb591d Binary files /dev/null and b/images/readme_project_fork.png differ