性能分析工具

hb_analyzer工具是地平线提供的支持对模型或perf文件进行性能分析的工具,支持以模型和算子维度通过html形态提供性能分析报告,也支持对*.onnx、*.bc和*.hbm模型的结构进行可视化查看。

支持范围

支持原始浮点onnx模型、ptq.onnx模型、各阶段hbir模型和hbm模型。

使用方法

# 性能分析场景
Usage: hb_analyzer analyze [OPTIONS]

  Analyze a model or JSON file

Options:
  -m, --model TEXT                Path to the model file
  --march [nash-b-lite|nash-b|nash-b-plus|nash-e|nash-h|nash-m|nash-p]
                                  Target architecture
  --perf TEXT                     Path to the performance JSON file
  --ip TEXT                       Board ip
  --username TEXT                 Board username
  --password TEXT                 Board password
  --port INTEGER                  Board ssh port
  --help                          Show this message and exit.
  
# 可视化场景
Usage: hb_analyzer visualize [OPTIONS]

  Visualize a model

Options:
  -m, --model TEXT  Path to the model file  [required]
  --help            Show this message and exit.

命令行参数

hb_analyzer工具需要按需指定场景,目前支持analyze(模型或文件分析)和visualize(模型可视化)两种场景,请根据实际使用指定场景并对应配置场景相关参数。

工具参数必选/可选/默认值参数说明
--model模型分析场景必选模型路径
--perf文件分析场景必选perf.json路径
--march非定点模型必选指定计算平台
--ip可选指定板端IP
1. 未指定IP:通过hbm_perf获取预估性能
2. 指定IP:通过hbm_perf获取实测性能
--port可选,默认22指定端口
--username可选,默认root指定板端用户名
--password可选指定板端密码

使用示例

model.onnx为例,onnx模型分析场景命令行示例:

hb_analyzer analyze --model model.onnx --march nash-p

model.bc为例,bc模型分析场景命令行示例:

hb_analyzer analyze --model model.bc --march nash-p

model.hbm为例,hbm模型且上板实测分析场景命令行示例:

hb_analyzer analyze --model model.hbm --ip xx.xx.xx.xx

perf.json为例,json分析场景命令行示例:

hb_analyzer analyze --perf perf.json

可视化场景命令行示例:

hb_analyzer visualize --model model.onnx/bc/hbm

产出物包括log文件输出及html报告输出两部分,log文件包含格式化的性能分析报告信息,而html是通过图表、表格等提升可读性的另一种形态,信息范围并没有区别。

HTML报告说明

本报告以可视化页面的形式,对模型的计算特性、量化配置以及运行性能进行系统化展示,帮助您从整体到细节逐步分析模型性能,并为后续优化提供数据依据。

Overview页面

Overview页面用于从整体视角对模型进行快速分析,是报告中用于“全局感知”的核心入口。 该页面主要围绕模型规模、量化配置、后端执行特性以及性能热点等维度,对模型的整体特征进行集中展示。

通过Overview页面,您可以在不深入算子细节的情况下:

  • 快速了解模型的计算复杂度与资源消耗水平。

  • 判断模型在当前部署场景下的整体性能表现。

  • 初步识别潜在的性能瓶颈方向(如计算密集或 IO 密集)。

在以下场景中,建议重点关注该页面:

  • 模型首次分析或结果快速检查。

  • 不同模型或不同量化方案之间的整体对比。

  • 在进入详细算子分析前,对模型性能进行宏观判断。

Overview 页面用于快速了解模型的整体情况。页面顶部首先展示了一组关键指标,包括模型计算量、Latency、内存相关信息等。

image

通过这些指标,您可以在不展开具体算子细节的情况下,快速掌握模型在当前场景下的整体性能特征与资源消耗水平。

页面中部展示了两个核心图表:

image

  • Model Quantization Configuration:模型量化配置分布

    该图表以算子类型为维度,统计并展示了 ConvConvTransposeLinearMatMul 四类典型算子在不同量化配置(双int8、单int16、双int16)下的数量分布情况。

    通过该图表,您可以直观了解模型中不同算子采用的量化策略构成,为分析性能和精度权衡提供参考。

  • Backend Proportion:后端耗时分布

    该图表以计算部件为维度,对模型在不同后端计算单元上的执行耗时进行可视化展示。 需要注意的是,这里的不同计算部件通常是并行执行的,因此该图表主要用于观察各计算单元的相对耗时分布,而非简单的串行时间累加。

在图表下方,页面展示了两个Top列表:

image

  • Top Layers by Total Time

    统计总耗时最高的Top 10算子,用于快速定位整体耗时占比最大的部分算子。

  • Top Layers by IO Time

    统计IO耗时最高的Top 10算子,帮助分析模型中潜在的访存瓶颈。

这两个表格可辅助您从不同角度快速识别性能热点算子。

工具也会对TAE的空闲时间进行统计分析,包括空闲数量统计、平均空闲时间及最大空闲时间指标,供您快速识别。

当空闲过长的时间段(>500us)出现,我们也会提供对应的分析表格供您进行分析查看。

image

Overview 页面的最后部分展示了模型的输入与输出信息,分别统计并列出了模型的Name、Shape、Data Type以及Quant Info信息,通过该此部分信息,您可以快速核对模型输入输出的结构与量化信息,确认模型配置是否符合预期。

image

Operator Details页面

Operator Details页面用于从算子粒度对模型进行结构与计算特性分析,是连接整体分析与深入调优之间的重要环节。 该页面以算子为基本分析单元,对模型中每一个算子的类型、输入输出特征以及数据类型进行详细展示,并支持浮点模型与定点模型的对比查看。

通过该页面,您可以:

  • 清晰了解模型的算子构成与执行顺序。

  • 对比量化前后算子结构和数据类型的变化。

  • 辅助定位特定算子在模型中的位置与作用。

该页面通常在以下场景中重点使用:

  • 分析量化对模型结构和算子分布的影响。

  • 定位某一类算子或特定算子的具体信息。

  • 为后续的算子性能分析和调优提供基础参考。

该页面首先展示了浮点模型阶段定点模型阶段的计算量统计信息,用于对比量化前后模型的整体计算规模变化。

image

在统计信息下方,我们以表格形式提供了浮点模型与定点模型的算子信息展示,支持您在两种模型之间进行切换查看。

表格中包含算子的名称(Name)、算子类型(Op Type)、输入 Shape、数据类型(Data Type)及输出 Tensor 名称(Tensor Name)等关键信息,通过该表格,您可以对模型的算子结构有一个清晰、完整的认识。

浮点模型展示信息如下:

image

定点模型展示信息如下:

image

Operator Analysis页面

Operator Analysis页面面向性能分析与调优场景,用于从时间与带宽等维度,对模型执行过程进行深入分析。 该页面重点关注算子执行耗时、计算与访存开销拆解,以及自定义聚合分析能力,帮助您从多个角度理解模型的性能瓶颈来源。

通过该页面,您可以:

  • 在给定设计帧率(Designed FPS)条件下,评估模型对系统带宽资源的需求。

  • 从算子类型和自定义归类维度分析整体时间消耗分布。

  • 通过自定义归类方式,对关注的算子集合进行聚合性能分析。

该页面主要适用于以下场景:

  • 性能瓶颈定位与优化分析。

  • 模型部署前的性能评估。

  • 针对特定业务或算子模式进行定向调优。

在算子分析页面中,您可以通过设置Designed FPS(设计帧率)数值,页面将基于当前模型的DDR数据量,自动推算对应的平均带宽需求

image

该功能可用于在性能调优阶段,评估模型在目标帧率下对带宽资源的需求情况。

在下方,我们提供了算子分析表格,此页面中以算子类型为维度,对模型的执行时间进行统计分析,展示模型中各算子类型的总耗时、计算耗时以及Load/Store耗时,有助于从宏观角度分析不同算子类型对整体性能的影响。

image

此外,该页面内我们还支持了自定义算子归类分析,您可以通过输入关键字,对算子或Block进行自定义分组,系统将根据名称匹配规则,将符合条件的算子归入对应类别,并自动统计各类别的耗时信息。

通过该方式,您可以灵活地从业务或结构视角,对模型中的算子进行聚合分析,更高效地定位性能瓶颈。

image