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

CANN/CATLASS性能调优指南

在CATLASS样例工程进行性能调优

【免费下载链接】catlass本项目是CANN的算子模板库,提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass

CANN对算子开发的两个场景——单算子与整网开发,分别提供了对应的性能调优工具:msProfProfiling

性能调优工具简介

msProf简介

msProf是单算子性能分析工具,对应的指令为msprof opmsopprof

msProf工具用于采集和分析运行在昇腾AI处理器上算子的关键性能指标,用户可根据输出的性能数据,快速定位算子的软、硬件性能瓶颈,提升算子性能的分析效率。

当前支持基于不同运行模式(上板或仿真)和不同文件形式(可执行文件或算子二进制.o文件)进行性能数据的采集和自动解析。

Profiling简介

Profiling是整网性能分析工具,对应的指令为msprof

Profiling工具提供了AI任务运行性能数据、昇腾AI处理器系统数据等性能数据的采集和解析能力。

其中,msprof采集通用命令是性能数据采集的基础,用于提供性能数据采集时的基本信息,包括参数说明、AI任务文件、数据存放路径、自定义环境变量等。

msProf进行单算子性能分析

00_basic_matmul为例,演示基于msProf的性能分析过程。

上板性能采集

通过上板性能采集,可以直接测定算子在NPU卡上的运行时间,可判断性能是否初步达到预期标准。

msprof op使用示例
  1. 参考快速上手,编译算子样例。
  2. 使用msprof op *可选参数* app [arguments]格式调用msProf工具。
msprof op --application="./00_basic_matmul 256 512 1024 0"

常用参数如下:

参数是否必选说明取值配套参数/注意事项
--application必选(二选一)指定可执行文件/执行指令有效路径或命令--config互斥
--config必选(二选一)指定二进制文件.o有效路径--application互斥
--kernel-name可选指定采集的算子名称(支持模糊匹配和多个采集)例:"conv*""add\|mul"需配合--launch-count使用
--launch-count可选设置最大采集算子数量1~100 整数(默认 1)需配合--kernel-name使用
--warm-up可选预热次数(解决芯片未提频问题)整数(默认 5)小 shape 场景建议提高到 30
--output可选指定数据输出路径有效路径(默认当前目录)需确保路径可写

更多参数可参考msProf工具概述。

  • ⚠ 注意事项
    • 工具默认会读取第一个算子的性能,使用example进行调测时可直接获取到结果;若接入其他工程,工程中可能存在其他算子(虽然只跑某一个算子的用例),如果性能分析时未通过--kernel-name指定算子名称,则可能读取不到结果。
    • 可设置环境变量ASCEND_RT_VISIBLE_DEVICES指定上板调测的Device Id号
# 指定当前进程仅可使用Device Id为0,1,2,3的Device export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 msprof op ./00_basic_matmul 256 512 1024 0
性能数据说明

性能数据文件夹结构示例:

├──dump # 原始的性能数据,用户无需关注 ├──ArithmeticUtilization.csv # cube/vector指令cycle占比,建议优化算子逻辑,减少冗余计算指令 ├──L2Cache.csv # L2 Cache命中率,影响MTE2,建议合理规划数据搬运逻辑,增加命中率 ├──Memory.csv # UB,L1和主存储器读写带宽速率,单位GB/s ├──MemoryL0.csv # L0A,L0B,和L0C读写带宽速率,单位GB/s ├──MemoryUB.csv # Vector和Scalar到UB的读写带宽速率,单位GB/s ├──OpBasicInfo.csv # 算子基础信息 ├──PipeUtilization.csv # pipe类指令耗时和占比,建议优化数据搬运逻辑,提高带宽利用率 └──ResourceConflictRatio.csv # UB上的 bank group、bank conflict和资源冲突率在所有指令中的占比, 建议减少/避免对于同一个bank读写冲突或bank group的读读冲突

性能流水仿真

通过仿真,可以获得流水图指令与代码行映射代码热点图内存热点图等可视化数据,以便进一步分析优化算子计算瓶颈。

msprof op simulator使用示例
  1. 编译脚本增加选项--simulator, 以simulator模式编译算子。
bash scripts/build.sh --simulator 00_basic_matmul
  • 这个选项实际不会改变编译的二进制程序,区别为是否输出第2步的仿真器路径提示。
  1. 编译完成后,根据提示,加载仿真器二进制路径。
# 根据第1步的实际输出执行 export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/tools/simulator/Ascendxxxyy/lib:$LD_LIBRARY_PATH export LD_PRELOAD=/usr/local/Ascend/ascend-toolkit/latest/tools/simulator/Ascendxxxyy/lib/libruntime_camodel.so:/usr/local/Ascend/ascend-toolkit/latest/tools/simulator/Ascendxxxyy/lib/libnpu_drv_camodel.so
  1. 切换到可执行文件的编译目录output/bin下, 使用msprof op simulator执行算子样例程序。
cd output/bin # 可执行文件名 |矩阵m轴|n轴|k轴|Device ID(可选) msprof op simulator ./00_basic_matmul 256 512 1024 0
  • ⚠ 注意事项
    • 若需要查看代码热点图,需要在examples/CMakeLists.txt中增加add_compile_options("SHELL:$<$<COMPILE_LANGUAGE:ASCEND>:-Xaicore-start -g -Xaicore-end")
    • 性能结果中有大量明显Vector操作(如AddDiv)映射为Scalar操作导致性能结果明显异常(vector_ratio<10%scalar>90%),这是编译优化等级造成的,可在examples/CMakeLists.txt中增加add_compile_options($<$<COMPILE_LANGUAGE:ASCEND>:"-Xaicore-start -O3 -Xaicore-end">)
    • 仿真只能在0卡运行,不能指定NPU卡号。
仿真数据说明
├──dump # 原始的性能数据,用户无需关注 └──simulator # 算子基础信息 ├──core0.cubecore0 ├──... ├──core23.cubecore0 ├──trace.json # Edge/Chrome Trace Viewer/Perfetto呈现文件 └──visualize_data.bin # MindStudio Insight呈现文件
性能数据可视化查看
  • 数据可视化依赖MindStudio Insight工具,需要提前下载安装。
代码热点图

获取仿真输出文件夹simulator下的visualize_data.bin,通过MindStudio Insight工具加载bin文件查看代码热点图。

指令流水图
使用Edge/Chrome Trace Viewer/Perfetto呈现

根据浏览器,选择以下工具:

  • Edge Trace Viewer(Edge浏览器)
  • Chrome Trace Viewer(Chrome浏览器/基于Chrome内核的浏览器)
  • Perfetto(通用)

导入trace.json即可查看仿真指令流水图。

使用MindStudio Insight呈现

获取仿真输出文件夹simulator/下的visualize_data.bin。通过MindStudio Insight工具加载bin文件查看仿真流水图。

用MindStudio Insight查看更多可视化数据

msProf工具采集到的数据,可导入可视化工具MindStudio Insight中,以便进一步分析算子计算瓶颈。将visualize_data.bin导入工具内,即可可视化地分析算子性能。

用Profiling进行整网性能分析

虽然CATLASS只提供单算子的调用示例,但单算子调用示例也可使用Profiling工具进行性能分析。

下面以00_basic_matmul为例进行演示分析。

msProf使用示例

  1. 基于快速上手,打开工具的编译开关--enable_profiling, 使能Profiling API编译算子样例。
bash scripts/build.sh --enable_profiling 00_basic_matmul
  1. 切换到可执行文件的编译目录output/bin下,用msProf执行算子样例程序。
cd output/bin # 可执行文件名 |矩阵m轴|n轴|k轴|Device ID(可选) msprof ./00_basic_matmul 256 512 1024 0

可参考msProf性能数据文件参考了解性能数据各文件的功能。

【免费下载链接】catlass本项目是CANN的算子模板库,提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass

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

http://www.jsqmd.com/news/785522/

相关文章:

  • Ubuntu20.04下PX4 v1.13与XTDrone联调避坑实录:从源码编译到Gazebo黑屏全解决
  • FPGA SPI驱动设计避坑指南:以DAC8830为例,聊聊时钟分频与数据对齐的那些事儿
  • 量子计算硬件封装技术:低温适配与材料挑战
  • CANN/graph-autofusion安全声明
  • Python声明式数据抓取:openclaw-py工具库的设计理念与实战应用
  • AI编程助手Cursor开源生态实践:智能体配置与自动化工作流
  • ESP32+合宙1.8寸屏保姆级教程:MicroPython驱动ST7735显示中文(附固件与字体)
  • CANN/metadef Build函数API文档
  • 20个AI/ML创意项目实践:从建构主义学习到核心技能掌握
  • CANN/hcomm 通信引擎
  • Shadow Hand灵巧手维修日记:手指PST传感器更换全记录(附肌腱线处理技巧)
  • 测试90测试90测试90测试90测试90
  • 从零构建Llama 3:深入理解大语言模型架构与训练全流程
  • EXPLAIN-从入门到精通-数据库优化必备神器
  • Positive AI:从功能驱动到福祉驱动的AI设计范式与实践
  • CANN/tensorflow安全声明
  • 别再喊 PG 完爆 MySQL 了:阿里京东美团业务库都用 MySQL,不是他们没看 PG
  • ESP32-S3驱动ST7735彩屏:从零到亮的保姆级配置指南(附完整接线图)
  • CANN/sip交换向量示例
  • 第 4 章:模块与包管理
  • 量子计算动态解耦技术:原理、实现与应用
  • 基于Playwright的浏览器自动化技能库:从模块化封装到实战应用
  • 开源OSINT工具iGotcha:模块化数字痕迹追踪与信息聚合实战
  • 大模型评测中的多样性挑战:从标准化基准到公平评估的实践路径
  • AI技术博客实战:从资讯编译到深度文章的全流程解析
  • 告别点灯调试:用Arduino和TM1629A快速搭建一个多功能显示仪表盘
  • C++学习(26_05_09)
  • 对比自行维护Taotoken在稳定性与成本上的优势感知
  • 港风滤镜下的郑斯仁,在复古里寻找演员的多面性
  • 快速学Python编程-免费|零基础入门好处多多