Adaptive Search with Constraint-Aware Evolution and NPU Diagnostics for Optimization of Triton Kernel
面向 Triton-Ascend 与昇腾 A2/A3 平台的约束感知进化算子优化系统
ASCEND-OK 以待优化 Triton Kernel 和测试目录为输入,使用赛事允许的大模型提出程序变异,并由编译、全部正确性 Case 与真实 NPU 性能测量决定候选能否进入下一代。系统自动完成搜索、失败诊断、断点恢复、多样性选择和确定性打包,最终为每个 Kernel 输出不超过 5 个候选。
项目由中山大学“没带龙书让agent自己干活”队完成。队员:欧阳易芃、陈龙、陈大有;指导老师:张献伟。
| 配置 | 分数 | 任务通过 | 有效 Kernel | avg speedup |
|---|---|---|---|---|
| 开放候选池峰值 | 100 | 191 / 216 | 20 / 21 | 103.70 |
| 连续受约束搜索峰值 | 71 | 241 / 276 | 19 / 21 | 71.39 |
| 稳健收口配置 | 70 | 204 / 225 | 20 / 21 | 69.98 |
稳健收口轮次中,_chunk_cumsum_fwd_kernel 与 _unpack_seq_triton_kernel 达到单 Kernel 评分上限 200;_fwd_kernel_ep_gather、_act_quant_kernel、_quantize_k_cache_fast_kernel 分别达到 162.94、161.97 和 138.29。不同轮次的 Case 数与候选组合并不完全相同,因此相邻分数差异不直接作为单模块消融结论。完整实验数据与逐 Kernel 分析见技术报告。
flowchart LR
A[Kernel + Tests] --> B[Constraint-aware Evolution]
B --> C{Compile Gate}
C -- fail --> F[Failure Diagnosis]
C -- pass --> D{All Correctness Cases}
D -- fail --> F
D -- pass --> E[NPU Measurement]
E --> G[Archive + Diverse Top-5]
F --> B
G --> B
- 约束感知进化:组合大模型程序变异、参数变异、保守 AST 变换、双父代交叉与定向错误修复。
- 正确性优先评价:候选依次经过静态检查、Triton 编译、全部正确性 Case、边界变体和性能测量;只有完全正确的版本才进入性能档案。
- NPU 诊断反馈:从源码、运行失败和 profiler 中提取访存连续性、规约轴、尾块比例、量化路径与流水线信号,引导下一代搜索。
- 多样性 Top-5:在速度之外保留不同模型、父代和结构路径产生的候选,降低隐藏形状上的共因失效风险。
- 可追溯与可恢复:源码指纹、lineage、事件日志和原子 checkpoint 记录每次变异及评价结论,支持中断后继续搜索。
- 确定性交付:稳定排序生成 manifest、哈希校验、secret scan 与 ZIP;同一输入和候选集合得到同一交付结构。
| 组件 | 版本 / 配置 |
|---|---|
| 设备 | 1 × 昇腾 910B3 芯片 |
| 平台 | 昇腾 A2 / A3(A2 通常对应 910B 系列) |
| OS / CPU | openEuler aarch64 / 32 核 |
| Python | 3.10.0 |
| PyTorch / torch-npu | 2.6.0 / 2.6.0rc1 |
| Triton-Ascend | 3.4.0.dev2026011122 |
| CANN | 8.3.RC1.alpha003 |
| 候选模型 | deepseek-v4-flash, qwen3.6-flash |
| 模型协议 | OpenAI-compatible Chat Completions |
比赛运行环境需预先提供 CANN、torch-npu、Triton-Ascend、NPU 驱动和官方测试数据。Python 控制面使用 uv 管理。
uv sync --frozen
uv run python scripts/release/verify_public_tree.py第二条命令检查公开目录、根级兼容入口和核心测试,无 NPU 的机器也可以执行。
凭据只通过环境变量注入,不写入源码和配置文件:
export ASCEND_OK_MODEL_ENDPOINT="<OpenAI-compatible base URL>"
export ASCEND_OK_MODEL_API_KEY="<runtime-injected secret>"
export ASCEND_OK_MODEL_NAMES="deepseek-v4-flash,qwen3.6-flash"uv run python main.py \
--input-dir /path/to/datasets \
--output-dir /tmp/ascend-ok-smoke \
--kernel _log_softmax_kernel \
--population-size 4 \
--max-generations 2uv run python -m ascend_ok.submission.runner \
--input-dir /path/to/datasets \
--output-dir /tmp/ascend-ok-full/output \
--archive /tmp/ascend-ok-full/submission.zip \
--receipt /tmp/ascend-ok-full/receipt.json输出目录必须为空。runner 会按稳定顺序发现 Kernel,运行优化 Agent,验证 1–5 个候选,生成 manifest,并在任务完成后构造确定性 ZIP。环境准备、数据布局、全量批次与故障定位详见 docs/REPRODUCING.md。
根目录保留赛事参考框架的导入方式:
from config import EAConfig
from executor import TritonExecutor
from optimizer_agent import TritonOptimizerAgent也可直接运行:
python main.py --input-dir <datasets> --output-dir <fresh-output>src/ascend_ok/ Agent、搜索、评价、模型与打包核心
config/ 模型、搜索、运行时与数据契约
scripts/ 环境检查、运行与发布验证工具
tests/ 单元、集成、端到端与边界测试
data/experiments/ 门户结果的脱敏摘要
docs/ 复现步骤、依赖说明与来源记录
site/ GitHub Pages 静态项目网站
ASCEND-OK-Technical-Report.pdf