【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skillsname: 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 作为优化技术之一可与其他优化技术多流并行、融合算子等组合使用重要提醒必须完成所有四个步骤分析模型结构确定 Scope 范围代码编写性能测试验证必须执行不可跳过最终产出优化后的代码文件config.yaml、modeling_*.pySuperKernel 优化文档superkernel_optimization_report.md工作流程第一步分析模型结构目标理解模型架构识别可以应用 SuperKernel 的部分读取模型代码找到模型实现文件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识别模型架构特征是否有 Attention 层Self-Attention、Cross-Attention是否有 MoE 层专家路由、专家计算是否有其他计算密集型模块FFN、LayerNorm 等Prefill 和 Decode 是否已分离检查当前配置exe_mode是否为ge_graph必须enable_superkernel当前状态硬件是否为 Atlas A3是否已启用图模式torch.compile识别潜在问题动态 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, labeldecode_layers, # 或 attention_only, moe_only optionstream-fusion1 # 编译选项 ): for decoder_layer in self.layers: # 运算逻辑 hidden_states decoder_layer( hidden_states, attention_maskattention_mask, ... ) return hidden_statesScope 标记位置示例仅 Attention在 Attention 模块的 forward 方法中仅 MoE在 MoE 层的 forward 方法中全 Decoder 层在整个 Decoder 层循环外层产出修改后的代码文件config.yaml、modeling_*.py 等第四步性能测试验证必须执行目标验证 SuperKernel 适配的正确性和性能提升重要这一步必须执行不可跳过。完成代码修改后立即进行性能测试。4.1 建立性能基线临时禁用 SuperKernelcd cann-recipes-infer/models/{model_name} # 备份当前配置 cp config.yaml config.yaml.superkernel # 禁用 SuperKernel sed -i s/enable_superkernel: True/enable_superkernel: False/ config.yaml运行基线测试bash infer.sh 21 | tee baseline.log记录基线性能Decode 单步耗时ms吞吐量tokens/s从日志中提取关键性能指标4.2 测试优化版本恢复 SuperKernel 配置# 恢复 SuperKernel 配置 cp config.yaml.superkernel config.yaml运行优化测试bash infer.sh 21 | tee optimized.log记录优化性能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.logSuperKernel 优化报告superkernel_optimization_report.md详细的性能基线建立方法见references/performance-baseline-guide.md最终交付物完成所有四个步骤后必须提供优化后的代码文件cann-recipes-infer/models/{model_name}/config.yaml已启用 SuperKernelcann-recipes-infer/models/{model_name}/models/modeling_*.py已添加 Scope 标记SuperKernel 优化报告superkernel_optimization_report.md包含完整的性能对比数据和优化说明不需要输出中间分析文档superkernel_analysis.mdScope 规划文档superkernel_scope_plan.md其他临时文件Scope 选择指南快速决策树模型类型 ├─ MoE 模型 → 优先选择仅 MoE 模块 ├─ 标准 Transformer → 优先选择仅 Attention 模块 └─ 简单模型 有成功案例 → 可选择全 Decoder 层 首次尝试 └─ 是 → 选择仅 Attention 模块风险最小 追求最优性能 └─ 是 → 选择使用自动分析工具 已知最优配置 └─ 是 → 选择自定义 ScopeScope 模板详细的 Scope 模板见resources/scope-templates/目录attention-only.md- 仅 Attention 的 Scope 模板moe-only.md- 仅 MoE 的 Scope 模板full-model.md- 全模型 Scope 模板配置检查清单启用 SuperKernel 前请确保exe_mode设置为ge_graph不能是eager或aclgraph硬件为 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 易用性指南最佳实践首次尝试选择仅 Attention 模块风险最小逐步扩大验证成功后再扩大 Scope 范围性能对比每次修改后都进行性能对比文档记录记录每次尝试的配置和结果问题排查遇到问题先查看检查清单和常见问题寻求帮助复杂问题可以调用其他 skill 或查阅详细文档【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考