提供用于昇腾 AscendC 算子代码生成的训练数据集,数据集涵盖多种算子类型,旨在支持算子代码自动生成模型的训练与评估。
📋 简介
本项目提供了用于昇腾 AscendC 算子代码生成的训练数据集与测试集。数据集涵盖多种算子类型,旨在支持算子代码自动生成模型的训练与评估。分为AscendC数据集和AscendC Agent 数据集。
✨ AscendC 数据集类型
| 数据类型 | 描述 | 状态 |
|---|---|---|
| doc_data | AscendC 开发指南和API 文档数据 | ✅ 可用 |
| vector_data | Vector 算子数据 | ✅ 可用 |
| cube_data | Cube 算子数据 | ✅ 可用 |
| cv_fusion_data | CV 融合算子数据 | ✅ 可用 |
| flywheel | 飞轮数据(以模型生成样本纠错数据为主) | ✅ 可用 |
数据集版本与SFT模型生成效果评测结果详见👉./dataset/README.md
✨ AscendC Agent 数据集
| 数据来源 | 描述 | 状态 |
|---|---|---|
| CANN | CANN仓 Agent 生成算子轨迹数据 | ✅ 可用 |
| level_0 | level 0 Agent 生成算子轨迹 | ✅ 可用 |
| level_1 | level 1 Agent 生成算子轨迹 | ✅ 可用 |
| level_2 | level 2 Agent 生成算子轨迹 | ✅ 可用 |
✨ 测试集
| 数据类型 | 描述 | 状态 |
|---|---|---|
| npu_benchmark | NPU 算子生成 Agent 基准测试集 | ✅ 可用 |
📈 数据集目录
📁 dataset/
├── 📁 dataset/
│ ├── 📂 doc_data/ # 文档数据
│ │ ├── 202602_0001.json
│ │ ├── 202602_0002.json
│ │ └── ...
│ ├── 📂 vector_data/ # Vector 算子数据
│ │ ├── 202602_0010.json
│ │ ├── 202602_0011.json
│ │ └── ...
│ ├── 📂 cube_data/ # Cube 算子数据
│ │ └── [待补充]
│ └── 📂 cv_fusion_data/ # CV 融合算子数据
│ └── [待补充]
│
├── 📁 agent_dataset/
│ ├── 📂 CANN/
│ │ ├── 📂 20260613/
│ │ │ ├── 1_AdaptiveAvgPool3d_aug00.json
│ │ │ ├── 3_AdaptiveMaxPool3DGrad_aug00.json
│ │ │ └── ...
│ │ ├── 📂 20260630/
│ │ ├── 📂 20260701/
│ ├── 📂 level_0/
│ ├── 📂 level_1/
│ └── 📂 level_2/
└── 📂 scripts/ # 合并数据集脚本
📈 测试集目录
📁 npu_benchmark/ # NPU 算子生成基准测试集
├── 📂 level1/ # Level1 - 基础 Vector 算子
│ ├── 1_GELU.py / 1_GELU.json
│ ├── 2_SwiGLU.py / 2_SwiGLU.json
│ └── ...
├── 📂 level2/ # Level2 - 复杂融合算子
│ ├── 1_RotaryMul.py / 1_RotaryMul.json
│ ├── 2_GroupNormSwish.py / 2_GroupNormSwish.json
│ └── ...
├── 📂 level3/ # Level3 - Cube 算子
│ ├── 1_BatchMatmul.py / 1_BatchMatmul.json
│ ├── 2_GroupedMatmul.py / 2_GroupedMatmul.json
│ └── ...
└── 📂 level4/ # Level4 - CV 融合算子
├── 1_LSTM.py / 1_LSTM.json
├── 2_FFN.py / 2_FFN.json
└── ...
📂 AscendC 数据结构
JSONL 格式
所有训练数据采用 JSON Lines 格式,每行一个 JSON 对象。
字段说明
| 字段 | 类型 | 描述 |
|---|---|---|
instruction |
string | 任务指令或提示 |
input |
string | 输入内容或问题描述 |
output |
string | 期望的输出或代码 |
system |
string | 系统提示词 |
history |
array | 对话历史 |
数据示例
📖 doc_data
Ascend C API 文档问答数据:
{
"instruction": "",
"input": "在Ascend C中,GetBlockSize函数的返回值单位是什么?",
"output": "GetBlockSize函数的返回值单位是字节(Byte)。GetBlockSize用于获取当前核函数执行的Block的大小。",
"system": "",
"history": []
}
🔢 vector_data
向量算子代码生成任务:
{
"instruction": "",
"input": "帮我根据下面的算子需求,实现高效的Ascend C代码\n\n1. 算子描述:\n# aclnnAddLayerNormGrad...",
"output": "// Ascend C 算子实现代码...",
"system": "",
"history": []
}
🧪 npu_benchmark
NPU 算子生成 Agent 的基准测试集,用于评估 Agent 根据算子描述自动生成 Ascend C 算子代码的能力。每个算子包含两个文件:
.py文件:算子的 PyTorch 参考实现,包含模型定义与测试用例加载逻辑.json文件:算子的输入规格描述(JSONL 格式),每行定义一组测试输入,包含张量形状、数据类型、属性等信息
按难度分为四个级别:
| 级别 | 目录 | 算子数量 | 描述 |
|---|---|---|---|
| Level 1 | level1/ |
33 | 基础 Vector 算子(如 GELU、Add、Sort 等) |
| Level 2 | level2/ |
30 | 复杂融合算子(如 RotaryMul、MoeFinalizeRouting 等) |
| Level 3 | level3/ |
10 | Cube 算子(如 BatchMatmul、ConvStandard 等) |
| Level 4 | level4/ |
10 | CV 融合算子(如 LSTM、FFN、FusionAttention 等) |
使用示例:
1)将待测算子的 Python 与 JSON 文件复制到 Agent 工作目录:
cp npu_benchmark/level1/1_GELU.py <agent_work_dir>/
cp npu_benchmark/level1/1_GELU.json <agent_work_dir>/
2)输入提示词让 Agent 参考两个文件生成算子:
请参考 1_GELU.py 中的算子逻辑和 1_GELU.json 中的输入规格,生成对应的 Ascend C 算子实现代码。
3)对比原算子与生成算子的输出结果,验证精度、对比性能。
基于claude code 的Benchmark 批量评测
在这之前,请确保您的环境满足以下要求:
- Python 3.8+
- Ascend CANN 8.0+
- PyTorch 2.0+
- Claude Code CLI (请确保已正确安装并配置)
适用于批量评测算子的生成效果,支持单 NPU 串行或多 NPU 并行执行。
操作步骤:
- 在 agent 工作目录下创建
.claude目录并配置 Agent:
mkdir -p .claude
mkdir -p .claude/skills
mv agents/ascend-kernel-developer.md .claude/CLAUDE.md
mv skills/ascendc/* .claude/skills/
- 进入 agent 工作目录,执行批量调度脚本:
单 NPU 串行模式:
cd /path/to/agent_work_dir
bash utils/run_benchmark_ascendc.sh \
--benchmark-dir /path/to/NPUKernelBench \
--level 1 \
--range 1-30 \
--npu 0 \
--output /path/to/output
多 NPU 并行模式(推荐):
cd /path/to/agent_work_dir
bash utils/run_benchmark_ascendc.sh \
--benchmark-dir /path/to/NPUKernelBench \
--level 1 \
--range 1-30 \
--npu-list "0,1,2,3,4,5" \
--output /path/to/output
参数说明:
--benchmark-dir: Benchmark 根目录路径(必填)--level: Level 编号,如 1, 2, 3(必填)--range: 算子范围,如1-30(与--ids二选一)--ids: 指定算子编号列表,逗号分隔,如3,7,15(与--range二选一)--npu: 单 NPU 设备 ID,如 0(默认 0,与--npu-list互斥)--npu-list: 多 NPU 列表,逗号分隔,如0,1,2,3,4,5(与--npu互斥,优先级更高)--output: 输出目录(必填)
注释:agents、skills和utils/run_benchmark_ascendc.sh可以从https://gitcode.com/cann/cannbot-skills 获取
👥 贡献者
感谢所有为本项目做出贡献的开发者!
华为计算产品线:zhengruxi、yancen、lipengfei
🤝 贡献指南
我们欢迎社区贡献!如果您想为本项目做出贡献,请遵循以下规范:
数据贡献规范
- 确保数据格式符合 JSONL 标准
- 每个数据文件应包含清晰的字段说明
- 代码数据应经过编译验证
- 文档数据应经过准确性校验
📄 许可证
本项目采用 MIT 许可证 开源。
📞 联系方式
如有问题、建议或想要参与贡献,请通过以下方式联系我们:
- 🐛 提交 Issue - 报告 Bug 或提出功能建议
- 🔀 发起 Pull Request - 贡献代码或数据