Kerminal
免费体验
本篇目录
一、适用场景二、准备工作三、快速开始四、开发流程详解五、常用命令示例六、最佳实践七、预期效果八、交付产物九、常见问题
Kerminal QR Code扫码添加官方社群
文档/操作指南/相关实践/算子开发

算子开发

使用 Kerminal 快速完成自定义算子的开发、优化和验证

——本指引将帮助你使用 Kerminal 快速完成自定义算子的开发、优化和验证工作。

一、适用场景


  • 为国产芯片(如昇腾)开发自定义算子
  • 将现有算子从 CUDA 迁移到 Ascend C
  • 优化已有算子的性能
  • 实现最新论文中的新算法算子

二、准备工作

2.1 环境要求

项目 要求
硬件 目标芯片服务器(如昇腾 910B)
开发工具 算子开发工具链(如 CANN Toolkit)
文档资料 平台编程范式说明、API 文档、代码示例(可选)
Kerminal 已安装并配置密钥

2.2 安装 Kerminal

安装流程

支持三种平台的安装脚本

Mac / Linux:

curl -fsSL https://release.kerminal.cn/install.sh | bash

Windows:请使用 PowerShell 终端下载安装

irm https://release.kerminal.cn/install.ps1 | iex

看到猫咪图案即启动成功。

2.3 准备参考资料(可选)

如果有以下资料,可放入工作目录供 Kerminal 参考:

  • 算子定义文档
  • 参考实现代码
  • 相关论文 PDF
  • 代码规范要求

三、快速开始


3.1 启动任务

用自然语言描述你的需求:

我需要用 Ascend C 实现一个 mhc_post 算子

或者更具体:

帮我实现 DeepSeek 论文中的 mhc_post 算子,用于 hyper-connections 模块

3.2 Kerminal 自动执行流程

Kerminal 会按以下流程自动完成开发:

 ┌─────────────────────────┐
 │  • 需求理解    │    分析算子功能、查阅论文/文档
 └─────────┬───────────────┘
           ▼
 ┌─────────────────────────┐
 │  • 算子定义    │    确定输入输出、计算逻辑
 └─────────┬───────────────┘
           ▼
 ┌─────────────────────────┐
 │  • 参考实现    │    编写 CPU 版本作为基准
 └─────────┬───────────────┘
           ▼
 ┌─────────────────────────┐
 │  • Kernel 开发  │    实现目标平台算子代码
 └─────────┬───────────────┘
           ▼
 ┌─────────────────────────┐
 │  • 测试验证    │    精度对比、多参数覆盖
 └─────────┬───────────────┘
           ▼
 ┌─────────────────────────┐
 │  • 输出交付    │    代码 + 工程结构 + 文档
 └─────────────────────────┘

四、开发流程详解


4.1 需求理解

Kerminal 会自动:

  • 联网搜索相关论文和实现
  • 分析参考代码提取核心逻辑
  • 理解算子的数学含义

示例:对于 mhc_post 算子,Kerminal 自动查阅 DeepSeek 论文,提取公式:

Xl+1=Hres⋅Xl+HpostT⋅F(Hpre⋅Xl)X_{l+1} = H_{\text{res}} \cdot X_l + H_{\text{post}}^T \cdot F\left(H_{\text{pre}} \cdot X_l\right)Xl+1​=Hres​⋅Xl​+HpostT​⋅F(Hpre​⋅Xl​)

4.2 算子定义

Kerminal 会生成清晰的算子规格:

属性 示例
输入 x: [totalLength, dim],
weight: [numStreams]
输出 y: [totalLength × numStreams, dim]
计算逻辑 将每个 token 复制 numStreams 份,每份乘以对应权重

4.3 Kernel 实现

Kerminal 会根据目标平台特性优化实现:

Ascend C 实现要点:

  • 多核并行切分策略
  • 双缓冲队列流水优化
  • 向量指令对齐要求
  • 内存搬运与计算重叠

4.4 测试验证

Kerminal 采用测试先行的开发方式:

  • CPU 参考实现:作为正确性基准
  • 随机测试数据:覆盖多种输入规模
  • 精度对比:逐元素校验(默认容差 rtol=1e-6, atol=1e-6)
  • 硬件验证:在真实芯片上运行

五、常用命令示例


从零开发算子

用 Ascend C 实现一个 softmax 算子
帮我写一个矩阵乘法 kernel
实现论文 xxx 中的 attention 算子

算子迁移

把这个 CUDA kernel 转成 Ascend C
帮我把 PyTorch 自定义算子迁移到昇腾

算子优化

优化这个算子的性能
分析一下性能瓶颈在哪里
内存访问能不能优化一下

问题排查

精度对不上,帮我查一下原因
编译报错了怎么解决
运行时 crash 了

六、最佳实践


推荐做法

  • 提供参考资料: 论文、代码、文档越完整,开发效果越好
  • 硬件在环开发: 直接在目标硬件上开发和验证
  • 先正确后优化: 确保精度验证通过后再追求性能
  • 多规模测试: 覆盖不同输入规模和边界条件
  • 保留中间产物: 测试数据、日志、性能数据便于后续分析

避免做法

  • 跳过测试直接集成
  • 只测试单一输入规模
  • 忽略精度验证
  • 在非目标硬件上开发

七、预期效果


任务类型 传统方式 Kerminal
基础算子开发 数小时~1 天 10 - 30 分钟
复杂算子开发 1-2 天 30 - 60 分钟
算子优化 数天 数小时
效率提升 10 - 50 倍

八、交付产物


任务完成后,Kerminal 会输出:

 1  ├── src/
 2  │   ├── kernel.cpp          # Ascend C 算子实现
 3  │   └── cpu_ref.cpp         # CPU 参考实现
 4  ├── test/
 5  │   └── test_kernel.cpp     # 测试程序
 6  ├── CMakeLists.txt           # 构建配置
 7  └── README.md                # 使用说明

九、常见问题


Q: 没有现成的算子文档怎么办?

Kerminal 可以自动搜索论文、分析参考代码,从零理解算子定义。

Q: 精度验证不通过怎么办?

描述问题,Kerminal 会自动分析原因并修复。常见原因包括数据类型、边界处理、数值稳定性等。

Q: 如何进一步优化性能?

直接告诉 Kerminal 你的性能目标,它会尝试多种优化策略。

Q: 支持哪些算子开发语言?

目前支持 Ascend C,后续将支持更多平台的算子开发语言。