当前位置: 首页 > news >正文

CANN/cannbot-skills SuperKernel适配技能


【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

name: model-infer-superkernel description: 基于 PyTorch 框架的昇腾 NPU 模型推理 SuperKernel 适配技能。当用户需要启用 SuperKernel 算子二进制融合技术优化昇腾 NPU 推理性能时使用此技能。触发场景包括:用户询问 SuperKernel、算子融合、二进制融合、启用 superkernel、superkernel_scope、减少任务调度开销、优化 decode 性能等。SuperKernel 仅支持 ge_graph 模式、Atlas A3 硬件,且仅在 decode 阶段生效。

SuperKernel 适配技能

提供 SuperKernel 算子二进制融合技术的完整适配流程,包括模型分析、Scope 范围确定、代码实施和性能验证。


重要原则

  • 前置条件:必须满足exe_mode: "ge_graph"、Atlas A3 硬件、PyTorch 框架
  • 仅 Decode 阶段生效:Prefill 阶段输入长度动态变化,SuperKernel 自动禁用
  • 手动标记 Scope:需要使用superkernel_scope上下文管理器标记融合范围
  • 配置互斥:不支持eager模式和aclgraph模式
  • 先理解再行动:分析模型结构后再确定 Scope 范围,避免盲目复制其他模型配置
  • 组合使用:SuperKernel 作为优化技术之一,可与其他优化技术(多流并行、融合算子等)组合使用

重要提醒

必须完成所有四个步骤

  1. 分析模型结构
  2. 确定 Scope 范围
  3. 代码编写
  4. 性能测试验证(必须执行,不可跳过)

最终产出

  • 优化后的代码文件(config.yaml、modeling_*.py)
  • SuperKernel 优化文档(superkernel_optimization_report.md

工作流程

第一步:分析模型结构

目标:理解模型架构,识别可以应用 SuperKernel 的部分

  1. 读取模型代码

    • 找到模型实现文件(cann-recipes-infer/models/{model_name}/models/modeling_*.py
    • 找到配置文件(cann-recipes-infer/models/{model_name}/config.yaml
    • 找到 runner 文件(cann-recipes-infer/models/{model_name}/models/runner_*.py
  2. 识别模型架构特征

    • 是否有 Attention 层(Self-Attention、Cross-Attention)
    • 是否有 MoE 层(专家路由、专家计算)
    • 是否有其他计算密集型模块(FFN、LayerNorm 等)
    • Prefill 和 Decode 是否已分离
  3. 检查当前配置

    • exe_mode是否为ge_graph(必须)
    • enable_superkernel当前状态
    • 硬件是否为 Atlas A3
    • 是否已启用图模式(torch.compile
  4. 识别潜在问题

    • 动态 shape 问题(KV Cache 是否预分配)
    • 控制流问题(是否有 Python if/for)
    • 不支持的算子(Tiling 下沉算子)

产出

  • 模型结构分析(内部记录,不输出文件)
  • 可应用 SuperKernel 的模块列表
  • 潜在问题清单

第二步:确定 Scope 范围

目标:确定 SuperKernel 的融合范围

使用 AskUserQuestion 提供以下选项:

选项描述适用场景优缺点
仅 Attention 模块只将 Attention 计算纳入 SuperKernel scope首次尝试、模型瓶颈在 Attention风险小、易调试
仅 MoE 模块只将 MoE 专家计算纳入 SuperKernel scopeMoE 架构模型针对性强、效果明显
全模型 Decoder 层将整个 Decoder 层纳入 SuperKernel scope模型结构简单、已有成功案例融合范围最大、性能提升潜力最高、调试难度较大
使用自动分析工具启动 subagent 分析最优 Scope 划分追求最优性能基于性能分析自动推荐、耗时较长(5-10分钟)
自定义 Scope手动指定需要融合的模块有特殊需求或已知最优配置灵活性高

执行内容

  • 根据用户选择,生成对应的 Scope 配置
  • 如果选择"自动分析工具",启动 subagent 执行性能分析
  • 生成 Scope 标记代码片段
  • 确定需要修改的文件和具体位置

产出

  • Scope 配置方案(内部记录,不输出文件)
  • 需要修改的代码位置和具体改动

详细的 Scope 分析方法见references/scope-analysis-guide.md


第三步:代码编写

目标:实施 SuperKernel 适配代码

重要:这一步只修改代码,不输出任何中间文档。

3.1 配置文件修改

修改cann-recipes-infer/models/{model_name}/config.yaml

# 确保以下配置 exe_mode: "ge_graph" # 必须是 ge_graph model_config: enable_superkernel: True # 启用 SuperKernel enable_multi_streams: False # 根据需求配置 enable_cache_compile: False # 根据需求配置
3.2 模型代码修改

cann-recipes-infer/models/{model_name}/models/modeling_*.py中:

# 1. 导入上下文管理器 from executor.utils import superkernel_scope # 2. 在 decode 方法中添加 Scope 标记 class YourModel: def decode(self, input_ids, ...): is_prefill = False # decode 阶段 # 根据选择的 Scope 策略添加 with superkernel_scope( self.enable_superkernel and not is_prefill, label="decode_layers", # 或 "attention_only", "moe_only" option="stream-fusion=1" # 编译选项 ): for decoder_layer in self.layers: # 运算逻辑 hidden_states = decoder_layer( hidden_states, attention_mask=attention_mask, ... ) return hidden_states

Scope 标记位置示例

  • 仅 Attention:在 Attention 模块的 forward 方法中
  • 仅 MoE:在 MoE 层的 forward 方法中
  • 全 Decoder 层:在整个 Decoder 层循环外层

产出

  • 修改后的代码文件(config.yaml、modeling_*.py 等)

第四步:性能测试验证(必须执行)

目标:验证 SuperKernel 适配的正确性和性能提升

重要:这一步必须执行,不可跳过。完成代码修改后立即进行性能测试。

4.1 建立性能基线
  1. 临时禁用 SuperKernel

    cd cann-recipes-infer/models/{model_name} # 备份当前配置 cp config.yaml config.yaml.superkernel # 禁用 SuperKernel sed -i 's/enable_superkernel: True/enable_superkernel: False/' config.yaml
  2. 运行基线测试

    bash infer.sh 2>&1 | tee baseline.log
  3. 记录基线性能

    • Decode 单步耗时(ms)
    • 吞吐量(tokens/s)
    • 从日志中提取关键性能指标
4.2 测试优化版本
  1. 恢复 SuperKernel 配置

    # 恢复 SuperKernel 配置 cp config.yaml.superkernel config.yaml
  2. 运行优化测试

    bash infer.sh 2>&1 | tee optimized.log
  3. 记录优化性能

    • Decode 单步耗时(ms)
    • 吞吐量(tokens/s)
    • 从日志中提取关键性能指标
4.3 性能对比分析

计算性能提升:

性能提升 = (基线耗时 - 优化后耗时) / 基线耗时 × 100% 吞吐量提升 = (优化后吞吐量 - 基线吞吐量) / 基线吞吐量 × 100%
4.4 生成优化报告

必须生成:创建superkernel_optimization_report.md,包含:

# SuperKernel 优化报告 ## 优化配置 - 模型:{model_name} - Scope 策略:{scope_strategy} - 优化日期:{date} ## 代码修改 ### 配置文件修改 - 文件:`config.yaml` - 修改内容:启用 `enable_superkernel: True` ### 模型代码修改 - 文件:`cann-recipes-infer/models/modeling_*.py` - 修改内容:添加 SuperKernel scope 标记 - Scope 范围:{scope_description} ## 性能测试结果 ### 基线性能(SuperKernel 禁用) - Decode 单步耗时:{baseline_latency} ms - 吞吐量:{baseline_throughput} tokens/s ### 优化后性能(SuperKernel 启用) - Decode 单步耗时:{optimized_latency} ms - 吞吐量:{optimized_throughput} tokens/s ### 性能提升 - 延迟降低:{latency_improvement}% - 吞吐量提升:{throughput_improvement}% ## 结论 {conclusion} ## 使用说明 优化后的模型配置已保存,可直接使用: \`\`\`bash cd cann-recipes-infer/models/{model_name} bash infer.sh \`\`\`

产出

  • 性能测试日志(baseline.log、optimized.log)
  • SuperKernel 优化报告superkernel_optimization_report.md

详细的性能基线建立方法见references/performance-baseline-guide.md


最终交付物

完成所有四个步骤后,必须提供:

  1. 优化后的代码文件

    • cann-recipes-infer/models/{model_name}/config.yaml(已启用 SuperKernel)
    • cann-recipes-infer/models/{model_name}/models/modeling_*.py(已添加 Scope 标记)
  2. SuperKernel 优化报告

    • superkernel_optimization_report.md
    • 包含完整的性能对比数据和优化说明

不需要输出

  • 中间分析文档(superkernel_analysis.md)
  • Scope 规划文档(superkernel_scope_plan.md)
  • 其他临时文件

Scope 选择指南

快速决策树

模型类型? ├─ MoE 模型 → 优先选择"仅 MoE 模块" ├─ 标准 Transformer → 优先选择"仅 Attention 模块" └─ 简单模型 + 有成功案例 → 可选择"全 Decoder 层" 首次尝试? └─ 是 → 选择"仅 Attention 模块"(风险最小) 追求最优性能? └─ 是 → 选择"使用自动分析工具" 已知最优配置? └─ 是 → 选择"自定义 Scope"

Scope 模板

详细的 Scope 模板见resources/scope-templates/目录:

  • attention-only.md- 仅 Attention 的 Scope 模板
  • moe-only.md- 仅 MoE 的 Scope 模板
  • full-model.md- 全模型 Scope 模板

配置检查清单

启用 SuperKernel 前,请确保:

  • exe_mode设置为ge_graph(不能是eageraclgraph
  • 硬件为 Atlas A3 系列
  • 框架为 PyTorch
  • 模型已区分 prefill 和 decode 阶段
  • 已正确标记 SuperKernel scope

参考文档

内部文档

  • references/scope-analysis-guide.md- Scope 分析详细指南
  • references/performance-baseline-guide.md- 性能基线建立指南
  • resources/scope-templates/- Scope 模板

外部文档

  • 官方 SuperKernel 开发文档
  • PyTorch 图模式使用指南
  • DeepSeek-R1 decode 性能优化
  • SuperKernel 易用性指南

最佳实践

  1. 首次尝试:选择"仅 Attention 模块",风险最小
  2. 逐步扩大:验证成功后再扩大 Scope 范围
  3. 性能对比:每次修改后都进行性能对比
  4. 文档记录:记录每次尝试的配置和结果
  5. 问题排查:遇到问题先查看检查清单和常见问题
  6. 寻求帮助:复杂问题可以调用其他 skill 或查阅详细文档

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/2478732.html

相关文章:

  • CANN Scatter算子评测
  • CANN/asnumpy随机抽样API
  • wlnmp一键安装包260520更新:多软件版本升级,支持多系统架构快速部署
  • 智能救场答辩,PPT躺平出圈
  • BBDown实用指南:高效下载B站视频的完整解决方案
  • OpCore-Simplify:3步完成黑苹果配置的终极自动化工具
  • 《大营销平台系统设计实现》 - 营销服务 第3节:策略概率装配处理
  • 通过 curl 命令快速测试 Taotoken 大模型接口连通性
  • 3步完成IDM永久免费使用:开源激活脚本完全解析
  • 如何快速将B站缓存视频转换为MP4:m4s-converter完整使用教程
  • IDM激活脚本终极指南:如何免费锁定30天试用期无限使用
  • Buzz语音转文字工具中Faster Whisper模型下载失败的3步解决方案与深度解析
  • 别折腾小米电脑管家了!用这个锤子遗产HandShaker修改版,Win/Mac轻松访问安卓14手机文件
  • 从面积与性能权衡出发:深度解析Tessent MBIST中Bypass/Observation逻辑的配置艺术
  • 智能车竞赛光电组核心技术解析:从图像处理到PID控制实战
  • Cat-Catch资源嗅探工具:5步解锁网页媒体下载新境界
  • 2026四大便利店收银软件深度横评:从参数实测到选型避坑指南
  • 3分钟掌握Blender四边形重拓扑:QRemeshify终极简单指南
  • OpenCATS:如何构建企业级招聘自动化平台
  • CANN/Ascend C矩阵乘法Tiling参数获取接口
  • 深入解析设备树二进制(DTB)格式:从内核启动到驱动绑定的底层原理
  • 3个关键决策:为什么顶级技术团队选择Arco Design Pro构建企业级应用
  • AI Cover技术深度解析:从OpenAI到AWS S3的完整架构实现
  • 告别Eclipse插件!在Maven项目中用antlr4-maven-plugin自动生成解析器代码(附完整pom.xml配置)
  • 基于容器化技术构建安全高效的Linux在线调试环境方案
  • FreeRTOS互斥锁的‘坑’与‘宝’:优先级翻转那些事儿,用ESP32实测给你看
  • 2026年大厂Java面试高频场景题 + 八股文(万字干货,纯手工硬核整理)
  • 如何快速掌握FunASR后端解码:从声学特征到文本的完整指南
  • Qlib量化投资平台:用AI技术打造智能金融分析系统的终极指南
  • 碧蓝航线Alas脚本:告别肝帝生活,让游戏自动化的终极指南