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

April 30, 2026

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-optimizetriton-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 CLIPython + uv,如果需要本地运行算子还需要配置好 昇腾 CANN 环境 + torch_npu(没有本地NPU可以通过SSH调用远程机器)。

6.1 前置准备

  1. 克隆 Triton Agent 仓库
    git clone git@gitcode.com:midwinter1993/triton-agent.git ~/code/triton-agent
    cd ~/code/triton-agent
    
  2. 安装依赖
    # 用 uv 安装依赖
    uv sync
    
    # 验证 CLI 可执行
    uv run triton-agent --version
    
  3. (可选) 配置全局调用,不需要每次都用 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可以直接调用它完成算子开发全流程,不需要额外配置技能。

  1. 打开 OpenCode 配置文件 ~/.opencode/config.yaml
  2. 加入自定义工具配置:
    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
    
  3. 直接使用示例:在OpenCode对话中直接输入:
    调用 triton-agent 帮我优化当前目录下的 `add_op.py` 算子,至少迭代3轮,用差分测试验证正确性

方式2:导入 Triton Agent Skills 到 OpenCode 技能库(进阶,可二次开发)

Triton Agent的 skills/ 目录下包含了16个算子开发专项技能,可以直接导入到OpenCode中,让OpenCode复用这些沉淀的知识:

  1. 复制技能到OpenCode技能目录:
    cp -r ~/code/triton-agent/skills/* ~/.opencode/skills/
    
  2. 给每个技能增加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
    
  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调用远程昇腾机器运行算子:

  1. 配置SSH免密登录:
    ssh-copy-id user@npu-server-ip
    
  2. 所有命令都加上 --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 放宽精度校验阈值(适合浮点算子)。