---
tags: [CANN]
doc_type: knowledge-note
返回目录: "[[计算机系/昇腾与CANN/大模型与算子专题学习导航|大模型与算子专题学习导航]]"
上一篇: "[[计算机系/昇腾与CANN/CANNBot智能体与算子开发工作流|CANNBot智能体与算子开发工作流]]"
---

# Skill 驱动的模型推理优化工作流

模型优化往往跨越结构适配、性能诊断、并行、缓存、融合、量化与图模式。Skill 的价值是把每类任务的前提、步骤、检查方法和已有经验组织起来，使 Agent 能有依据地推进工作，而不是连续尝试没有基线的修改。

Agent 与算子开发的基础见[CANNBot 智能体与算子开发工作流](CANNBot智能体与算子开发工作流.md)。这里侧重完整模型的优化组织。

## 1. 观察、决策、行动、反馈

优化闭环首先收集可观察事实：模型结构、硬件配置、运行参数、错误日志和性能时间线。随后提出假设，选择一个可验证的修改，执行后重新检查质量与性能。

“Decode 慢”不是充分诊断；“当前批量下权重读取占主导，且设备利用率偏低”才足以支持量化、批处理或投机解码等候选方向。一个 Skill 应解释怎样识别这种条件，以及怎样判断行动是否有效。

## 2. Skill 如何组织知识

简短元数据用于说明适用范围；正文描述流程和判断规则；参考文件保存详细知识；脚本承载可重复操作；资源文件保存模板和必要素材。按需加载可以避免把所有文档一次性塞进上下文。

![Skill 与任务编排](.assets/CANN推理专题/agent-10.png)

Skill 需要有清晰边界。例如，模型迁移负责让结构和权重正确运行，并行分析负责决定切分方式，并行实现负责落地通信与分片。边界清楚才能减少不同阶段反复修改同一基础问题。

## 3. 角色分工与可检查的产物

一种协作设计可以设置工作流编排者、分析者、实现者和评审者。分析者提出带证据的方案，实现者修改代码，评审者检查正确性、范围和结果。角色的权限、可调用工具及是否允许进一步委派，属于具体项目的规则。

Hooks 可以在覆盖到的工具入口检查命令、文件或流程条件，但它们的约束范围取决于部署方式，不能仅凭名称就认为所有外部行为都被拦截。

![分析、实现与评审流程](.assets/CANN推理专题/agent-12.png)

持久记录可以使用 `progress.md` 等文件，保存当前模型、环境、基线、待验证假设、已完成改动与结果。它的作用是让后续步骤接续真实状态，而不是只保留一段笼统的“已优化”描述。

| 记录项 | 应保存的内容 |
| --- | --- |
| 基线 | 模型版本、硬件、输入长度、并发、精度 |
| 假设 | 哪个阶段受什么资源限制，证据在哪里 |
| 改动 | 配置或代码变化、影响范围 |
| 质量 | 中间张量、任务指标、容差与异常 |
| 性能 | 端到端指标、关键路径、显存 |
| 决策 | 保留、回退或继续验证的理由 |

## 4. 把优化拆成有依赖的阶段

一个常见顺序为：建立正确基线，完成并行，再优化 KV/Attention、算子融合、量化与图模式。这个顺序不是固定教条，而是为了避免基础数据布局不断变化，使后续改动失效。

![模型优化技能链路](.assets/CANN推理专题/agent-16.png)

| 阶段 | 核心问题 | 通过条件 |
| --- | --- | --- |
| Migrator | 结构和权重能否正确迁移 | 单卡结果与参考一致到约定容差 |
| Parallel Analysis | 如何满足容量与通信要求 | 分组、切分轴和通信有明确依据 |
| Parallel Implementation | 分片如何落地 | 多卡数值、边界与通信正确 |
| KV Cache / FA | 缓存与注意力如何高效执行 | 变长、分页、位置和掩码正确 |
| Fusion | 哪些中间写回和调度可消除 | 融合后质量与关键路径改善 |
| Quantization | 哪些模块适合低精度 | 配置、质量与部署核一致 |
| Graph Mode | 如何降低重复调度 | 重放状态正确且端到端受益 |

精度诊断和运行时诊断贯穿所有阶段。若错误来自权重映射，就不应继续堆叠量化与图模式来掩盖问题。

## 5. 容易被自动修改破坏的接口约定

### KV 与注意力元数据

`block_table` 表达逻辑块到物理块的映射；`slot_mapping` 常用于定位新 Token 写入位置；`actual_seq_lengths`、`kv_len` 等字段表达当前有效长度。不同算子可能使用逐序列长度或累积长度，必须按接口核对。

Q 头数与 KV 头数不一定相同，分页布局、量化布局和位置编码也可能改变核函数输入约定。自动生成代码时，变量名相似不能替代形状、单位与语义检查。

### 量化配置

量化目标与排除列表是方案的一部分。若把难处理的模块全部退回高精度，即使程序通过，也已改变原定量化方案。修改配置时应重新报告显存、质量与性能，不得只保留“测试通过”。

### 图模式状态

图重放需要管理输入地址、形状、KV 更新、位置和动态分支。可变请求可能通过分桶或其他受支持机制处理。Prefill 是否适合图模式，需要按实际方案判断，不能套用一律禁止的规则。

## 6. 怎样判断自动优化是否完成

完成标准应同时包含正确运行、质量达标、性能收益、配置可复现与失败可定位。单个案例的加速倍数受到设备数、芯片、模型与基线影响，不能直接作为另一项目的预期收益。

优先保存可比较的实验，再积累案例库。对于没有收益的尝试，记录失效条件同样有价值，例如通信成本超过节省的计算、预取挤占缓存、图捕获成本无法摊销等。

相关项目入口：[cann-recipes-infer](https://gitcode.com/cann/cann-recipes-infer)、[cannbot-skills](https://gitcode.com/cann/cannbot-skills)。选择具体 Skill 时，应按当前瓶颈和开发路径加载，而不是同时启用所有领域的流程。
