开发者
资源
[object Object][object Object]

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

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

本文档介绍msOpProf运行模式的使用方法。

功能特性

通过MindStudio Insight展示计算内存热力图、Roofline瓶颈分析图、Cache热力图、通算流水图(通算融合算子)、Pipe流水图、算子代码热点图以及性能数据文件等单算子调优能力,具体请参考

表 1 msOpProf模式功能特性[object Object][object Object]

[object Object]undefined

调用场景

[object Object]undefined
[object Object]

环境准备

  • 请参考,完成相关环境变量的配置。

  • 若要使用MindStudio Insight进行查看时,需要单独安装MindStudio Insight软件包,具体下载链接请参见

使用约束

  • 性能数据采集时间建议在5min以内,同时推荐用户设置的内存大小在20G以上(例如容器配置:docker run --memory=20g 容器名)。
  • 请确保性能数据保存在不含软链接的当前用户目录下,否则可能引起安全问题。
[object Object]
  • msOpProf工具的使用依赖CANN包中的msOpProf可执行文件,该文件中的接口使用和msOpProf一致,该文件为CANN包自带,无需单独安装。
  • 通过键盘输入“CTRL+C”后,算子执行将会被停止,工具会根据当前已有信息生成性能数据文件。若不需要生成该文件,可再次键盘输入“CTRL+C”指令。
  • 若未指定--output参数,需确保其他用户不具备当前路径的上一级目录的写入权限。
  • 使用msOpProf之前,用户需保证app功能正常。
  • 不支持在同一个Device侧同时拉起多个性能采集任务。
  • 用户需自行保证可执行文件或用户程序(application)执行的安全性。
    • 建议限制对可执行文件或用户程序(application)的操作权限,避免提权风险。
    • 不建议进行高危操作(删除文件、删除目录、修改密码及提权命令等),避免安全风险。
[object Object]

登录运行环境,使用[object Object]格式调用,可选参数的具体情况请参考。具体命令示例如下:

[object Object]

表 1 msOpProf可选参数表[object Object][object Object]

[object Object]undefined
[object Object]

msOpProf工具协助用户定位算子内存、算子代码以及算子指令的异常,实现全方位的算子调优。使用方式的详细说明请参考

表 1 msOpProf模式功能说明表[object Object][object Object]

[object Object]undefined

msOpProf分段调优原则

  1. 使用--launch-skip-before-match命令筛选算子调优范围,筛选原则如下:[object Object][object Object]

    • 若已配置--launch-skip-before-match,从第一个算子开始到指定数目的算子不进行采集,仅对指定数目之后的算子开始采集。
    • 若未配置,不进行筛选。
  2. 的基础上,使用--mstx命令筛选算子调优范围,筛选原则如下:[object Object][object Object]

    • 若已配置--mstx,只采集mstxRangeStartA和mstxRangeEnd接口使能范围内的算子。
    • 若未配置,不进行筛选。
  3. 的基础上,使用--kernel-name命令筛选算子调优范围,筛选原则如下:[object Object][object Object]

    • 若已配置--kernel-name,只采集--kernel-name范围内的算子。
    • 若未配置--kernel-name,则只对程序运行过程中调度的第一个算子进行采集。
  4. 的基础上,使用--aic-metrics命令筛选算子调优数据的采集项,筛选原则如下:[object Object][object Object]

    • 若已配置--aic-metrics,选择算子性能指标的采集项。
    • 若未配置--aic-metrics,默认采集Default部分的算子性能指标,KernelScale、TimelineDetail、Roofline、Occupancy部分的算子性能指标将无法采集。
  5. 通过逐层过滤,可获得实际的调优算子数量以及性能指标的采集范围。

  6. 使能--kill=on功能的情况下,将实际调优的算子数量与--launch-count值进行对比,从而决定是否需要自动停止程序。[object Object]若实际已调优算子数量小于等于--launch-count值,则继续执行。否则,实际已调优算子数量达到--launch-count设置的算子数值时,会自动停止程序。

msOpProf配置

若要实现功能,需要执行以下操作:

  1. 在编译算子时添加[object Object]编译选项,具体操作请参见
  2. --aic-metrics参数使能Source选项。

启动工具

[object Object]
  1. 登录运行环境,使用[object Object]格式开启算子上板调优,可选参数的具体情况请参考。具体命令示例如下:

    [object Object]
  2. 通过以下两种方式执行算子调优:

    • 基于可执行文件

      • 单算子场景,以test为例。

        [object Object]

        示例一:

        [object Object]

        示例二:

        [object Object]
      • 多算子场景。

        若test中有Add,MatlMul,Sub算子,可配合--launch-count和--kernel-name使用,可以指定采集Add和Sub算子。

        [object Object]
    • 基于输入算子二进制文件*.o的配置文件.json,具体请参见

      [object Object]
  3. 命令完成后,会在默认路径或指定的“--output”目录下生成以“OPPROF_{timestamp}_XXX”命名的文件夹,在“--aic-metrics”全部开启时,结构示例如下:

    • 采集多卡多算子的场景。

      [object Object]
      [object Object]
    • 采集单卡多算子场景。

      [object Object]
    • 采集单卡单算子场景。

      [object Object]

    表 2 msOpProf模式文件介绍

    [object Object]undefined
    [object Object]
  4. 将visualize_data.bin文件导入MindStudio Insight后,将会展示

  5. 将trace.json文件导入Chrome浏览器或MindStudio Insight后,将会展示

[object Object][object Object]

通过msOpProf运行模式生成的visualize_data.bin文件可通过MindStudio Insight进行可视化呈现,界面将会以资源维度展示算子基础信息、计算负载分析和内存负载分析的数据,协助开发者以全局视角识别资源瓶颈。

MindStudio Insight具体操作请参考《MindStudio Insight算子调优》的“”章节。

[object Object]

visualize_data.bin文件通过MindStudio Insight工具展示的界面如下。

图 1 详情界面1

  • 提供核间负载分析图(Core Occupancy),以数据窗格的方式呈现各物理单核的耗时、总数据吞吐量及Cache命中率,帮助开发人员提升物理核的使用效率。

    [object Object]
  • Roofline瓶颈分析图(Roofline),具体介绍请参见

  • 提供计算负载分析(Compute Workload Analysis),以柱状图和数据表格的方式呈现计算负载数据,帮助开发人员分析Cube/Vector计算资源是否得到了充分利用。

  • 提供内存负载分析(Memory Workload Analysis),支持展示MTE各通路的活跃带宽值(未开启MemoryDetail不显示Cube上的MTE1和MTE2通路的活跃带宽)。通过内存热力图和数据窗格,直观呈现各通路的请求数、搬运带宽与利用率。帮助开发人员分析可能存在瓶颈的通路。

    [object Object]
[object Object][object Object]

通过msOpProf运行模式生成的visualize_data.bin文件可通过MindStudio Insight进行可视化呈现,Roofline瓶颈分析图可构建出处理器的性能模型,然后利用该性能模型快速评估出算子的理论性能极限,协助开发者快速识别瓶颈类型。

MindStudio Insight具体操作请参考《MindStudio Insight算子调优》的“”章节。

[object Object]

界面介绍

生成的visualize_data.bin文件可导入MindStudio Insight进行可视化呈现,并针对不同的硬件以及算子类型会生成不同的Roofline分析视图。

  • [object Object]Atlas 推理系列产品[object Object]的Roofline瓶颈分析图中仅有内存单元视图。

    图 1 [object Object]Atlas 推理系列产品[object Object] Roofline瓶颈分析图

  • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]和[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]根据算子类型不同而产生不同的视图,具体请参见

    图 2 [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]和[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object] Roofline瓶颈分析图

    表 1 [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]和[object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]支持Roofline视图情况列表[object Object][object Object]

    [object Object]
  • Atlas 350 加速卡根据算子类型不同而产生不同的视图,具体请参见

    图 3 Atlas 350 加速卡Roofline瓶颈分析图

    表 2 Atlas 350 加速卡支持Roofline视图情况列表[object Object][object Object]

    [object Object]
    [object Object]

使用说明

每个单元/通路的Roofline性能分析结果由横轴、纵轴、屋顶线、带宽斜线和实际运行坐标点组成,具体请参见

图 4 Roofline示意图[object Object] [object Object]

  • 横轴:代表算术强度(Arithmetic Intensity),即某一单元或通路中总的浮点运算次数与总的访存数据量之比,单位为Ops/Byte。

  • 纵轴:表示计算性能(Performance),即每秒可执行的浮点操作数,单位为TOps/s。

  • 屋顶线:指图中顶部的水平线,代表NPU的理论最大计算性能。无论算术强度如何提高,应用的实际性能都不可能超过硬件上限。

  • 带宽斜线:指图中与屋顶线相交的斜线,其与纵轴的交点取决于理论最大带宽。当理论最大带宽乘以算术强度小于NPU理论最大计算性能时,能达到的最大算力随算术强度的增加而线性增长。

    [object Object]
  • 实际运行坐标点的参数构成请参见

    表 3 实际运行坐标点说明[object Object][object Object]

    [object Object]undefined

Roofline分析视图分析算子的性能百分比,并提供以下客观分析结果:

  • 算子性能百分比大于80%时,按照所在区域进行提示,有以下两种情况。

    • Compute Bound:计算瓶颈。
    • Memory Bound:内存瓶颈。
  • 算子性能百分比小于80%,Bound类型为Latency Bound,有以下三种情况:

    • 若最大的pipeline ratio小于80%,提示latency bound:pipeline caused。
    • 若最大的pipeline ratio大于80%,需识别最大pipeline ratio的类型。
      • 若最大pipeline ratio的类型是compute pipeline (cube ratio、vector ratio、scalar ratio),提示latency bound:compute caused。

        [object Object]
      • 若最大pipeline ratio的类型是memory pipeline(MTE1 ratio、MTE2 ratio、MTE3 ratio),提示latency bound:memory caused。

[object Object][object Object]

针对用户程序Kernel函数内的L2 Cache访问情况,msOpProf工具可以记录并通过MindStudio Insight工具进行可视化呈现Cache热力图,该热力图可显示对应指令信息,以便用户优化L2Cache命中率,从而优化算子程序。

注意事项

  • MindStudio Insight具体操作和详细字段解释请参考《MindStudio Insight算子调优》的“”章节。
  • 添加[object Object]编译选项会在生成的二进制文件中附带调试信息,建议限制带有调试信息的用户程序的访问权限,确保只有授权人员可以访问该二进制文件。
  • 若不使用[object Object]组件提供的相关功能,输入msOpProf的程序编译时不包含-g即可,msOpProf工具则不会调用[object Object]组件的相关功能。
  • Cache热力图功能不适用于[object Object]Atlas 推理系列产品[object Object]。
  • MC2算子和LCCL算子均不支持生成Cache热力图。
[object Object]

Cache热力图界面显示如下。

图 1 Cache热力图

  • Hit展示Cacheline的命中情况,Miss展示Cacheline未命中情况,以便用户分析L2Cache的使用情况,

  • 在缓存(Cache)界面,选择命中和未命中事件图,单击放大,在放大的事件图中右键单击所选内存单元格,选择“显示指令”,可跳转至源码(Source)界面,并高亮显示相关指令行。

    图 2 Cacheline对应的算子代码热点图

    [object Object]
[object Object][object Object]

通过msOpProf运行模式对通算融合算子进行调优后,生成的trace.json和visualize_data.bin文件可通过MindStudio Insight进行可视化呈现,能够直观看到通算运行情况、指令耗时等信息,协助开发者识别通算瓶颈。支持通过AscendC API进行性能打点,采集代码在算子block上的实际耗时情况,用于通算算子性能的分析和优化。当前仅支持MC2和LCCL类型的通算融合算子以及ASC通算算子。

注意事项

  • MindStudio Insight具体操作和详细字段解释请参考《MindStudio Insight算子调优》的“”章节。
  • 添加[object Object]编译选项会在生成的二进制文件中附带调试信息,建议限制带有调试信息的用户程序的访问权限,确保只有授权人员可以访问该二进制文件。
  • 上板流水图功能在KFC场景中使用时,需要注意遵循相关接口使用规则,部分场景下Cube侧的数据无法呈现,需要结合KFC相关接口原理查看算子打点数据。
[object Object]

trace.json文件可分别通过Chrome浏览器和MindStudio Insight展示,visualize_data.bin文件仅可通过MindStudio Insight展示。通过AscendC API进行性能打点具体用法请参照《Ascend C算子开发接口》中的“调试接口>上板打印>”章节。

  • Chrome浏览器

    在Chrome浏览器中输入“chrome://tracing”地址,并将生成的通算流水图文件(trace.json)拖到空白处打开,键盘上输入快捷键(W:放大,S:缩小,A:左移,D:右移)可进行查看。关键字段说明如

    表 1 关键字段说明[object Object][object Object]

    [object Object]undefined
  • MindStudio Insight

    将生成的trace.json文件或visualize_data.bin文件可导入MindStudio Insight进行可视化呈现。

    图 1 通算流水图

    • 展示算子在AI CPU和AI CORE的耗时掩盖情况,用于评估通算融合算子的性能。

    • 展示算子在AI CPU上的不同通信轮次的流水。

    • 展示算子在各BLOCK上的运行时间及关键接口调用流水。

    • 展示通过HCCL通信的算子在多卡间运行时的集合通信流水及集合通信任务流水。

      [object Object]

    图 2 算子运行耗时情况图

    通过使用同一个descid的打点API,在算子kernel侧进行两次标识,工具会绘制出这两个标识之间,每个block上该算子的运行耗时情况。

[object Object][object Object]

对算子进行调优后,生成的trace.json和visualize_data.bin文件可通过MindStudio Insight进行可视化呈现,能够直观看到算子各个Pipe的运行情况,协助开发者识别算子瓶颈。

MindStudio Insight具体操作和详细字段解释请参考《MindStudio Insight算子调优》的“”章节。

[object Object]
  • 生成的visualize_data.bin文件可导入MindStudio Insight进行可视化呈现,展示算子在各个AI CORE各单元的活跃情况,界面如下。
  • Pipe流水图特性是基于采样实现的,和用户开启的核数没有直接关系。若用户开启全部的核,最终也只会展示6个核的数据。
  • 若使用MarkStamp打点时出现打点数据丢失情况,建议降低打点数目和密集程度。

图 1 Pipe流水图

支持用户通过在算子kernel侧任意代码处进行流水图打点,用以标识流水范围。使用接口在vector打上一个id为13的点,会在图上的scalar单元和vector单元展示MarkStamp13,具体请参见

图 2 自定义打点图[object Object][object Object]

[object Object]
[object Object][object Object]

通过msOpProf运行模式生成的visualize_data.bin文件可通过MindStudio Insight进行可视化呈现。界面支持查看算子源码与指令集的映射关系、耗时情况等功能,可协助开发者识别热点代码分布,并分析热点函数优化的可行性。

注意事项

  • MindStudio Insight具体操作和详细字段解释请参考《MindStudio Insight算子调优》的“”章节。
  • 添加[object Object]编译选项会在生成的二进制文件中附带调试信息,建议限制带有调试信息的用户程序的访问权限,确保只有授权人员可以访问该二进制文件。
  • 算子程序编译时需要包含-g,否则msOpProf不会展示热点图,也不调用llvm-symbolizer组件的相关功能实现代码与PC映射。
  • msOpProf算子代码热点图功能不适用于[object Object]Atlas 推理系列产品[object Object]。
  • MC2算子和LCCL算子均不支持生成算子代码热点图。
[object Object]

算子代码热点图界面如下。

图 1 msOpProf源码界面

  • 在界面顶部,可切换计算单元和核函数文件。

  • 在左侧界面,提供算子核函数各行代码模拟L2Cache命中率、与GM有关的数据搬运量及对应的指令数,帮助开发者快速定位瓶颈代码行。

  • 在右侧界面,提供具体的指令维度模拟L2Cache命中率、与GM有关的数据搬运量、执行次数及与代码相关联,帮助开发者进一步分析代码耗时长的原因。

  • MindStudio Insight时间线和详情页面中L2Cache命中率的差异请参见

    表 1 MindStudio Insight L2Cache命中率对比表[object Object][object Object]

    [object Object]undefined
    [object Object]
  • msOpProf具体特性支持情况请参见

    表 2 msOpProf热点图的功能介绍[object Object][object Object]

    [object Object]undefined

    表 3 stall具体说明[object Object][object Object]

    [object Object]undefined