---
tags: [CANN]
doc_type: knowledge-note
abstract: "按 Abs 示例完成开发验收，并回看 SiLU 演示与知识复用规划。"
返回目录: "[[计算机系/昇腾与CANN/大模型与算子专题学习导航|大模型与算子专题学习导航]]"
专题目录: "[[计算机系/昇腾与CANN/CANNBot智能体与算子开发工作流|CANNBot智能体与算子开发工作流]]"
上一篇: "[[计算机系/昇腾与CANN/05 CANNBot开发流程与质量验证|05 CANNBot开发流程与质量验证]]"
前置操作: "[[计算机系/昇腾与CANN/05 CANNBot开发流程与质量验证|05 CANNBot开发流程与质量验证]]"
---

# 06 CANNBot算子实战与知识复用

按 Abs 示例完成开发验收，并回看 SiLU 演示与知识复用规划。

## 7. Abs算子开发示例

### 7.1 规格与输入输出

逐元素计算绝对值：

$$
y_i = |x_i|
$$

| 项目 | 要求 |
| --- | --- |
| 数据类型 | `float16` |
| 输入shape | `[1, 128]`、`[4, 2048]`、`[32, 4096]` |
| 输出shape | 与输入一致 |
| 精度要求 | 误差小于`1e-3`，需进一步约定具体误差判据 |
| 性能目标 | 根据目标设备和基线另行明确 |

```text
x = [-1.5,  2.0, -3.5, 4.0]
y = [ 1.5,  2.0,  3.5, 4.0]
```

四元素示例用于说明语义，完整验证仍须覆盖要求的三个shape。

### 7.2 提交开发需求

在已初始化的OpenCode会话中输入：

```text
帮我开发一个 Abs 算子，计算输入张量各元素的绝对值。
支持 float16，输入 shape 为 [1,128]、[4,2048]、[32,4096]，
输出 shape 与输入一致，精度要求小于 1e-3。
先确认目标芯片、CANN 版本和误差判据，再完成设计、实现、测试与性能分析。
```

需求进入工作流后，架构角色分析Element-wise特征，设计数据块划分、核间并行和UB缓冲区，开发角色生成Kernel、Tiling、Host代码及构建运行脚本。

核心计算使用Abs API：

```cpp
Abs(zUB, xUB, size);
```

选择核数和tile大小时需要考虑工作量。很小的shape不一定适合启动很多核，启动、调度与分块开销可能超过并行收益。

### 7.3 检视、构建与验收

生成代码后，检查访存范围、分块边界、对齐、同步及API约束，再构建并测试：

```bash
cd ops/abs
bash build.sh
bash run.sh
```

验收需要分别确认：

1. 三个目标shape均可运行，输入输出dtype和shape符合规格。
2. 与参考结果比较，满足明确的误差标准。
3. 必要的零值、正负值及边界输入得到覆盖。
4. 在目标设备上采集性能，与约定基线比较。
5. 代码、设计、测试与性能报告完整归档。

**一次示例输出正确，只能证明该次输入通过；完整算子交付需要规格范围内的测试和独立性能证据。**

### 7.4 SiLU实战演示附件

[打开SiLU算子实战演示视频](.assets/CANNBot/SiLU算子实战演示.mp4)

## 8. 能力演进与知识复用

更细的角色规划将开发链划分为规格、环境、参考实现、Kernel、性能、验证与知识沉淀：

| 角色 | 工作对象与产出方向 |
| --- | --- |
| Spec Agent | 将shape、dtype、layout、归约语义、动态shape与边界要求组织为`spec.yaml` |
| Environment Agent | 检查芯片、NPU设备和CANN环境 |
| Reference Agent | 形成CPU参考实现`reference.py`和测试集`test_cases.yaml` |
| Kernel Agent | 面向Ascend C等技术栈生成NPU算子实现 |
| Performance Agent | 分析Profiling、分块、并行和融合机会，形成优化计划 |
| Validation Agent | 组织编译、边界及动态shape测试，反馈验证问题 |
| Knowledge Agent | 归档高性能模板、失败案例、反模式和最佳实践，支持相似算子检索 |

这套规划强调把一次开发留下的证据转化为下次可以利用的资产。复用模板时仍需重新核对数学语义、shape、dtype、硬件及版本条件。

相关笔记：[CMake与Ascend C编译入门](CMake与Ascend%20C编译入门.md)、[Ascend C接入PyTorch单算子](Ascend%20C接入PyTorch单算子.md)、[Ascend C算子入图与图执行](Ascend%20C算子入图与图执行.md)、[大模型推理优化](大模型推理优化.md)。
