news 2026/6/12 17:54:56

CANN/cannbot-skills:TileLang性能优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/cannbot-skills:TileLang性能优化

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

name: tilelang-perf-optimization description: TileLang 算子性能调优与潜在性能劣化模式检查。提供性能数据采集、瓶颈诊断、优化实施、效果验证能力;也用于生成或评审算子时对照常见性能劣化模式示例检查当前 kernel 代码。触发:算子精度通过后需要优化性能、性能不及预期时。

TileLang 性能优化

工作流程

Step 1: 精度校验(强制前置)→ Step 2: 性能数据采集 → Step 3: 算子类型判断 ↓ Step 4: 优化实施 → Step 5: 精度再验证 → Step 6: 效果验证

核心约束

  • 精度优先:精度未通过禁止性能优化;每次优化后必须重新验证精度
  • 迭代验证:每次只修改一个参数/配置,修改后立即验证,性能回退则回退
  • 记录可追溯:中间文件保存在examples/{op_name}/perf_tuning/目录

执行步骤

Step 1: 精度校验(强制前置)

  • 运行命令:python examples/{op_name}/<script_name>.py
  • <script_name>获取:在examples/{op_name}/目录下查找包含@tilelang.jit装饰器的 Python 脚本。若存在多个,询问用户确认使用哪一个,后续步骤自动复用该选择。
  • 算子必须包含与参考实现的精度对比逻辑
  • 精度未通过 → 禁止进入后续步骤

Step 2: 性能数据采集

msprof op --kernel-name="main_kernel" --output=./msprof_output ./examples/{op_name}/<script_name>.py

Step 3: 算子类型判断

生成翻译后的 Ascend C 代码

在算子脚本中,JIT 编译返回的函数对象调用get_kernel_source()可获取翻译后的 Ascend C 代码:

func = jit_func(batch=B, seq_len=S, ...) print(func.get_kernel_source())

运行脚本后,从输出中搜索关键字判断算子类型:

判断依据类型典型算子
IS_ASCEND_AIC出现Cube 型GEMM、MatMul、Linear
IS_ASCEND_AIV出现Vector 型RoPE、Softmax、Add
两者均出现混合型FlashAttention、SparseFlashAttention

Step 4: 优化实施

根据算子类型选择优化手段(详见 optimization-guide):

生成/改写算子前的性能关注项检查

  • 若正在生成、改写或评审 kernel,先阅读 performance-antipatterns,对照其中的常见性能劣化模式示例检查当前代码是否存在类似 pattern
  • 文档中的 pattern 不是正确性错误,而是需要重点关注的性能风险点;确需临时保留时,在optimization_log.md中记录 shape、dtype、保留原因和后续替换方案
优化方向说明典型手段
pass_configs 调优调整编译器 pass 行为关闭自动同步、关闭内存规划
核内优化提升单核内指令并行度Double Buffer、L1 常驻、指令向量化、Split-K pipelined GEMM
核间优化优化 Cube/Vector 核间协作num_stages 调优、同步优化、Fixed Core 模式
流水线优化计算与访存重叠T.Pipelined(核内/核间流水)、T.Persistent(数据块调度)
Fixed Core按物理核数 launch,减少冗余初始化和显存膨胀T.Kernel(core_num, is_npu=True)、Workspace 按物理核分配
指令融合减少指令下发次数AXPY 融合指令、broadcast 向量化
稀疏访存优化离散数据高效搬运双 vector 核访存、Gather + 连续搬出、异步拷贝

编程模式选择

优先使用Developer 模式(自动内存规划、自动同步、编译器自动分离 Cube/Vector),参考 tilelang-programming-model-guide。

如无法满足性能要求,再使用Expert 模式手动控制(显式指定 L1/UB/L0 层级、手动同步、细粒度调度),参考同一文档。

  • 调用/tilelang-api-best-practices查阅相关 API 用法
最佳实践案例参考

参考以下算子的优化实践文档,学习具体优化技巧:

算子类型最佳实践文档核心优化技术
Vector 型RoPE 优化实践NPU 内动态生成 Mask、Tile API 向量化、参数简化
Cube 型GEMM Intrinsic 优化多缓冲流水线、细粒度 Flag 同步、MMA intrinsic、L0 分块、负载均衡
CV 融合型Flash Attention 优化num_stages 流水线、批量 Softmax、Cross-core Semaphore、数据布局优化

文档内容涵盖

  • 优化前后对比(代码示例)
  • 性能收益量化分析
  • 关键 API 使用方法
  • 参数配置指南
  • 适用场景说明

Step 5: 精度再验证

  • 运行命令:python examples/{op_name}/<script_name>.py<script_name>examples/{op_name}/目录下的 Python 脚本文件名)
  • 精度失败时:在保持已实施优化手段前提下调试精度,不能为修复精度撤销优化

调试手段

方法用途示例
T.printf(fmt, *args)设备端打印中间值T.printf("val=%d\n", val)
T.dump_tensor(tensor, desc, size, shape_info)转储张量内容到文件T.dump_tensor(acc_o, "acc_o", 128, (128, 128))
查看生成的 Ascend C 代码分析编译器生成逻辑print(func.get_kernel_source())

详细说明参考docs/TileLang-Ascend Programming Guide.md(位于 TileLang-Ascend 仓库根目录)。

Step 6: 效果验证

  • 对比基线性能,记录优化结果
  • 迭代终止条件:
    • 有明确目标:达到目标 OR 连续 3 次无提升 → 中断并上报用户
    • 无明确目标:做完所有可优化手段后输出最终性能值

性能目标要求

  • 用户提出性能需求时,必须明确指定对应的shapedtype
  • 性能标准可以是:
    • 具体的耗时时间(如< 100 us
    • 对应 AscendC 接口的调用脚本(用于对比性能)

pass_configs 参数参考

参数默认值调优建议
TL_ASCEND_AUTO_SYNCTrue关闭可提升性能,手动插入同步避免冗余

优化记录

中间文件统一保存在examples/{op_name}/perf_tuning/目录:

  • baseline.json- 基线性能数据
  • optimization_log.md- 优化记录(每轮详情)
  • final_report.md- 最终优化报告(必须包含验收 shape、dtype 及性能标准对比)

与其他 Skill 的协作

调用时机调用 Skill用途
Step 4 优化实施/tilelang-api-best-practices查阅内存、计算、调度 API 用法

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 17:52:54

Zotero PDF Translate:学术翻译的全能助手使用指南

Zotero PDF Translate&#xff1a;学术翻译的全能助手使用指南 【免费下载链接】zotero-pdf-translate Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20 translate services. 项目地址: https://gitcode.com/gh_mirrors/zo/…

作者头像 李华
网站建设 2026/6/12 17:46:55

深入解析Motorola SANDPOINT X3:模块化PowerPC评估系统的硬件架构与开发实践

1. 项目概述&#xff1a;SANDPOINT X3评估系统的定位与价值在嵌入式系统和通信设备开发的早期阶段&#xff0c;尤其是在21世纪初&#xff0c;一个稳定、开放且功能全面的硬件评估平台对于工程师来说&#xff0c;其价值不亚于一套趁手的调试工具。今天我想和大家深入聊聊一款颇具…

作者头像 李华
网站建设 2026/6/12 17:46:54

深入剖析MCF5213:基于ColdFire V2内核的嵌入式系统设计实战

1. MCF5213系列&#xff1a;一个被低估的嵌入式“多面手”在嵌入式开发的江湖里&#xff0c;选型永远是项目成败的第一步。面对市面上琳琅满目的ARM Cortex-M系列&#xff0c;很多工程师可能已经淡忘了那些曾经在工业控制、汽车电子和消费电子领域立下汗马功劳的经典架构。今天…

作者头像 李华
网站建设 2026/6/12 17:46:00

效率直接起飞!高效论文写作全流程AI论文网站推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;以下AI论文网站按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖免费/付费、通用/垂直场景。一、…

作者头像 李华
网站建设 2026/6/12 17:43:57

激光雕刻从复杂到简单:LaserGRBL如何革新你的创作流程

激光雕刻从复杂到简单&#xff1a;LaserGRBL如何革新你的创作流程 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL 对于激光雕刻爱好者和专业用户来说&#xff0c;面对复杂的G-code编程、繁琐的图像转…

作者头像 李华