Triton-Agent: 基于 AI Agent 的昇腾 NPU 算子自动化开发工具链

在昇腾(Ascend)NPU 的生态建设中,算子(Operator)开发是一个高门槛、高重复劳动的环节。最近发现了一个名为 triton-agent 的开源项目(gitcode.com/midwinter1993/triton-agent),它提出了一种全新的开发范式:利用 AI Agent 和本地 Skills 知识库,自动化完成算子的迁移、测试生成和性能调优。
本文将对该项目进行深度分析,并整理一份包含外部依赖、硬件环境和测试工具链的完整使用指导。
1. 项目定位与核心架构
triton-agent 本质上是一个 基于 CLI 的编排器,它不直接生成代码,而是负责任务拆解、上下文注入(Skills)和调用外部 AI Agent(如 OpenCode, Codex, OpenHands 等)。
- 设计模式:编排器 + 技能库 (Orchestrator + Skills)
- 核心组件:
- CLI (Python):轻量级入口,负责解析命令、准备 Workspace、注入 Skills 并调用 Agent。
- Agent Backends:支持多种代码生成工具(
codex,opencode,pi,claude,openhands,traecli)。 - Skills (Local):位于
skills/目录的 16 个专项技能(如triton-npu-optimize、triton-npu-profile-operator),以 Markdown 形式指导 Agent 如何处理特定的算子开发任务。
2. 外部依赖清单 (关键)
该项目高度依赖昇腾 NPU 硬件生态和特定的 Agent 工具链。以下是运行环境的最小依赖集:
| 组件 | 必需性 | 说明 |
|---|---|---|
| Huawei Ascend NPU | 🔴 核心 | 支持 910B/910C 等系列(昇腾 AI 处理器)。 |
| CANN Toolkit | 🔴 核心 | 华为异构计算架构,提供算子编译和运行环境。 |
| Triton Compiler (Ascend Fork) | 🔴 核心 | 昇腾适配的 Triton 编译器(通常随 CANN 或单独安装)。 |
| PyTorch + torch_npu | 🔴 核心 | 用于差分测试(Differential Testing)的对照组。 |
| msprof | 🟡 推荐 | 用于 --bench-mode msprof 模式下的硬件级性能分析。 |
| uv | 🟢 工具 | 高性能 Python 包管理器,项目使用 uv 管理环境和依赖。 |
3. Agent 工具链选择
项目支持多种 Agent 后端,你可以根据现有环境选择:
| 工具 | 配置方式 | 适用场景 |
|---|---|---|
| OpenCode CLI | 已安装 (opencode) |
本地终端 Agent,推荐集成。 |
| OpenAI Codex CLI | codex |
OpenAI 官方代码 Agent。 |
| OpenHands | SDK + LLM_API_KEY |
适合复杂任务规划,需配置 API Key。 |
| Claude / Trae / Pi | CLI 命令 | 其他支持的 Agent 后端。 |
4. 核心使用指导
4.1 算子优化 (核心场景)
假设你有一个算子文件 my_op.py:
# 1. 一键开始优化 (默认使用 opencode 或 codex)
uv run triton-agent optimize --input my_op.py --min-rounds 3
# 2. 指定使用 OpenHands Agent 并开启 msprof 硬件级分析
uv run triton-agent optimize --input my_op.py \
--agent openhands \
--bench-mode msprof \
--resume auto
# 3. 开启编译器源码分析 (用于疑难杂症)
uv run triton-agent optimize --input my_op.py \
--enable-compiler-source-analysis
4.2 批量处理 (大规模迁移)
如果你有一整个目录的算子 ops_dir/:
# 1. 并行处理,自动分配 NPU 设备 (假设你有 8 张卡)
export TRITON_AGENT_BATCH_NPU_DEVICES=0-7
uv run triton-agent optimize-batch --input ops_dir \
--max-concurrency 8 \
--agent opencode
4.3 结果验证
# 验证最优算子的正确性和性能
uv run triton-agent verify --input . --phase all
5. 进阶特性
- 差分测试 (Differential Testing):默认模式下,工具会自动生成对比代码,在 CPU/NPU 上分别运行原始 PyTorch 算子和生成的 Triton 算子,校验输出精度。
- Resume 机制 (断点续传):
optimize命令默认开启--resume auto。如果 Agent 中途中断,下次运行会自动读取状态,从中断的轮次继续优化。 - 远程执行 (
--remote):如果本地没有 NPU,可以通过 SSH 调用远程服务器:uv run triton-agent optimize --input my_op.py --remote user@npu-server
这个工程将传统的“手动写算子 -> 手动跑 profile -> 手动改代码”流程,彻底自动化为 “输入代码 -> AI 自动迭代 -> 输出最优算子” 的闭环,极大降低了昇腾算子的开发门槛。
6. 本地 OpenCode 集成配置运行指南
本指南适用于本地开发环境,假设你已经安装了 OpenCode CLI、Python + uv,如果需要本地运行算子还需要配置好 昇腾 CANN 环境 + torch_npu(没有本地NPU可以通过SSH调用远程机器)。
6.1 前置准备
- 克隆 Triton Agent 仓库
git clone git@gitcode.com:midwinter1993/triton-agent.git ~/code/triton-agent cd ~/code/triton-agent - 安装依赖
# 用 uv 安装依赖 uv sync # 验证 CLI 可执行 uv run triton-agent --version - (可选) 配置全局调用,不需要每次都用
uv run:echo 'export PATH="$HOME/code/triton-agent/.venv/bin:$PATH"' >> ~/.zshrc source ~/.zshrc # 验证 triton-agent --version
6.2 两种集成方式选择
根据你的使用场景选择一种即可:
方式1:OpenCode 直接调用 Triton Agent CLI(推荐,轻量)
Triton Agent 本身是CLI工具,OpenCode可以直接调用它完成算子开发全流程,不需要额外配置技能。
- 打开 OpenCode 配置文件
~/.opencode/config.yaml - 加入自定义工具配置:
tools: - name: triton-agent description: "Triton 算子自动化开发工具链,支持算子测试生成、迁移、性能优化、验证" command: "uv run --cwd ~/code/triton-agent triton-agent {{args}}" parameters: - name: args description: "triton-agent 命令参数,比如 optimize --input my_op.py" required: true - 直接使用示例:在OpenCode对话中直接输入:
调用 triton-agent 帮我优化当前目录下的 `add_op.py` 算子,至少迭代3轮,用差分测试验证正确性
方式2:导入 Triton Agent Skills 到 OpenCode 技能库(进阶,可二次开发)
Triton Agent的 skills/ 目录下包含了16个算子开发专项技能,可以直接导入到OpenCode中,让OpenCode复用这些沉淀的知识:
- 复制技能到OpenCode技能目录:
cp -r ~/code/triton-agent/skills/* ~/.opencode/skills/ - 给每个技能增加OpenCode格式的元数据(
skill.yaml),比如triton-npu-optimize/skill.yaml:name: triton-npu-optimize description: "昇腾 NPU Triton 算子性能优化技能,自动识别性能瓶颈,生成优化后的算子代码" parameters: - name: op_path description: "算子文件路径" required: true - name: min_rounds description: "最少优化轮次,默认3" default: 3 - 重启OpenCode后即可在对话中直接调用:
用 triton-npu-optimize 技能优化 `conv_op.py` 算子,重点优化内存访问效率
6.3 完整算子优化流程示例
假设你有一个待优化的算子文件 my_add.py:
import torch
import triton
import triton.language as tl
@triton.jit
def add_kernel(x_ptr, y_ptr, output_ptr, n_elements, BLOCK_SIZE: tl.constexpr):
pid = tl.program_id(axis=0)
block_start = pid * BLOCK_SIZE
offsets = block_start + tl.arange(0, BLOCK_SIZE)
mask = offsets < n_elements
x = tl.load(x_ptr + offsets, mask=mask)
y = tl.load(y_ptr + offsets, mask=mask)
output = x + y
tl.store(output_ptr + offsets, output, mask=mask)
def add(x: torch.Tensor, y: torch.Tensor):
output = torch.empty_like(x)
n_elements = output.numel()
grid = lambda meta: (triton.cdiv(n_elements, meta['BLOCK_SIZE']), )
add_kernel[grid](x, y, output, n_elements, BLOCK_SIZE=1024)
return output
步骤1:生成差分测试用例
triton-agent gen-test --input my_add.py --test-mode differential --agent opencode
会生成 differential_test_my_add.py,自动对比CPU PyTorch和NPU Triton的输出一致性。
步骤2:运行测试验证正确性
triton-agent run-test --test-file differential_test_my_add.py --operator-file my_add.py
如果测试失败,会自动生成修复建议。
步骤3:性能优化
triton-agent optimize --input my_add.py \
--min-rounds 3 \
--bench-mode msprof \ # 硬件级性能分析,需要msprof工具
--agent opencode \
--resume auto
每轮优化都会生成性能对比报告,自动保留最优版本。
步骤4:验证最优版本
triton-agent verify --input . --phase all
会重新运行测试和性能基准,确认优化后的算子正确性和性能提升。
批量处理多个算子:
如果有一整个目录的算子需要迁移优化:
# 配置可用NPU设备(这里用0-3号卡,4卡并行)
export TRITON_AGENT_BATCH_NPU_DEVICES=0-3
# 批量优化,4并发
triton-agent optimize-batch --input ./operators_dir \
--max-concurrency 4 \
--agent opencode
会自动给每个算子分配独立的NPU设备,并行优化。
6.4 远程 NPU 配置(本地没有昇腾卡)
如果本地没有NPU,可以通过SSH调用远程昇腾机器运行算子:
- 配置SSH免密登录:
ssh-copy-id user@npu-server-ip - 所有命令都加上
--remote和--remote-workdir参数:triton-agent optimize --input my_add.py \ --remote user@npu-server-ip \ --remote-workdir /tmp/triton_agent_workspace
文件会自动同步到远程机器,运行完成后结果自动拉回本地。
6.5 常见问题排查
- CANN 环境变量找不到:在
~/.zshrc中配置好CANN环境:source /usr/local/Ascend/ascend-toolkit/set_env.sh - msprof 找不到:安装 MindStudio 工具包,并把 msprof 加入 PATH。
- 优化速度慢:增加
--max-concurrent-workers参数,配置更多并行Worker。 - 差分测试精度不通过:添加
--tolerance 1e-3放宽精度校验阈值(适合浮点算子)。