Kerminal
免费体验
本篇目录
任务概述一、论文研究与理解二、参考代码分析三、算子定义四、测试先行开发五、精度验证任务总结效率对比关键能力展示
Kerminal QR Code扫码添加官方社群
文档/操作指南/相关实践/算子开发真实案例

算子开发真实案例

真实场景下的算子开发案例

任务概述


项目 内容
任务目标 在昇腾 910B 上用 Ascend C 实现 DeepSeek mhc_post 算子
完成时间 30 分钟
人工干预 无(全程自动)
对比基准 资深算子专家 1-2 天

一、论文研究与理解


Kerminal 自行搜索并查阅 DeepSeek 论文:

——《mHC: Manifold-Constrained Hyper-Connections》
——arXiv:2512.24880

提取核心公式:

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

从概念上理解 mhc_post 的作用:

  • 将 block 输出沿 streams 维度广播
  • 按权重缩放
  • 对应 HpostTH_{\mathrm{post}}^THpostT​ 与 block 输出的乘法操作

二、参考代码分析


由于论文刚发布,没有现成的算子定义文档。

Kerminal 通过联网搜索找到 GitHub 上 tokenbender 的 mHC 参考实现,分析其 hyper_connections_mhc.py 中的 depth_connection 函数。

提取核心公式:

output=einsum(branch_output, β, “b…d, s→b…sd”)\text{output} = \mathrm{einsum}\left( \text{branch\_output},\ \beta,\ \text{``}b\ldots d,\ s \rightarrow b\ldots s d\text{''} \right)output=einsum(branch_output, β, “b…d, s→b…sd”)

三、算子定义


Kerminal 将研究结果转化为清晰的算子定义:

参数 说明
输入 x token 向量,形状 [totalLength, dim]
输入 weight 权重向量,形状 [numStreams]
输出 y 形状 [totalLength × numStreams, dim]

计算逻辑: 将每个 token 复制 numStreams 份,每份乘以对应权重

四、测试先行开发


Kerminal 采用测试驱动的开发方式:

4.1 CPU 参考实现

首先编写 CPU 参考实现作为正确性基准

4.2 Ascend C Kernel 实现

Kernel 实现要点:

  • 按 token 维度多核并行切分
  • 使用双缓冲队列实现流水优化
  • 维度按 8 对齐满足向量指令要求
  • 核心使用 DataCopy 搬运数据、Muls 完成标量乘法

4.3 工程结构

  • CMake 使用 ascendc_library 单独编译 kernel 生成静态库
  • 测试程序独立编译后链接该库

五、精度验证


测试程序生成随机输入数据,分别调用 CPU 参考实现和 NPU kernel 计算,逐元素对比结果。

验证参数:

  • 容差:rtol=1e-6, atol=1e-6

测试用例

参数配置 结果
128 × 256 × 4 streams 通过
512 × 1024 × 8 streams 通过
2048 × 4096 × 4 streams 通过

在 Ascend 910B2 芯片上全部通过精度校验。

任务总结


Kerminal 在任务结束后自行生成总结报告,包含:

  • 算子实现原理说明
  • 代码架构设计
  • 测试结果汇总
  • 后续优化建议

效率对比


人工投入 耗时 参与度
资深算子专家 1-2 天 全程参与
Kerminal 30 分钟 仅需启动任务

结果:效率提升:50-100 倍!!!

关键能力展示


  • 自主研究: 能够查阅论文、理解算法语义
  • 代码分析: 自动搜索并分析参考实现
  • 工程实现: 生成符合规范的 Ascend C 代码
  • 测试验证: 自动构建测试用例并在真实硬件上验证
  • 文档输出: 自动生成任务总结报告