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

【征程 6 工具链性能分析与优化-1】编译器预估 perf 解读与性能分析

01 引言

本篇文章中,我们将首先介绍 layerdetails 中的参数信息,然后将结合实例分析如何利用 layerdetails 来分析模型的性能瓶颈,进而对模型的性能进行优化。

02 layerdetails 中信息解读

征程 6 工具链目前提供了两种方式生成性能评估报告:

  • 使用hb_compile工具编译模型时会自动生成性能评估报告;
  • 编译出 hbm 模型后,使用编译器提供的 python API hbm_perf生成性能评估报告,这里需要注意,调用 compile 接口编译模型时需要开启 debug 后才能生成 layerdetails。

性能预估报告包括 html 和 json 两个版本,通常看 html 即可。

html 中包括 Summary、Temporal Statistics 和 Layer Details 这 3 个部分,下面将逐一介绍。

2.1 Summary

图片

  1. FPS**( 1 core)**
  2. 在 1 个 BPU 内核上运行时的估计 FPS。
  3. Latency
  4. 编译后的模型推理一次的时间,编译的模型可能包含 batch。
  5. BPU conv original OPs per frame
  6. 原始模型卷积层的计算量。卷积变体(deconv、dilated conv、deformable conv 等)也被计算在内。

2.2 Temporal Statistics

图片

  1. Loaded bytes per frame
  2. 每帧推理 BPU 需要读取 DDR 的字节数。(编译时可能有batch,每帧推理不一定等于每次推理)
  3. Stored bytes per frame
  4. 每帧推理 BPU 需要写入 DDR 的字节数。(编译时可能有batch,每帧推理不一定等于每次推理)
  5. DDR (loaded + stored) bytes per frame:
  6. 每帧推理 BPU 需要读写 DDR 的字节数
  7. DDR bytes per second (for xxx FPS):
  8. 每秒BPU需要读写 DDR 的字节数。

2.3 Layer Details

图片

  1. layer
  2. 原始模型的 layer name。torch 模型没有 layer name,torch 转 hbir 时会自动命名
  3. original ops
  4. 原始 layer 的计算量(包含卷积及其变种)
  5. computing cost( no DDR**)**
  6. 编译后 layer 的时间开销,不包括 DDR 相关的时间开销,但会包含 reorder(数据重排)的开销
  7. load/store cost
  8. 编译后 layer 的 DDR 访问时间开销。对于非模型输入输出的 feature,DDR 访问可能被优化掉。
  9. active period of time
  10. 编译后 layer 活跃时间段。不代表该 layer 的执行时间,通常都是多个 layer 交替/并行执行。

03 性能分析实例

3.1 通用流程

  1. 首先观察 Temporal Statistics 统计图中的曲线:
  2. 观察 computing 曲线是否有波动,带宽瓶颈会引起它的波动
  3. 观察 load&store 柱状图,配合 computing 曲线,判断是否有带宽瓶颈
  4. 然后根据时态统计图中的时间轴,观察在某区间的 layer detail

3.2 实例分析

分析过程

1.观察 computing 曲线是否有波动,带宽瓶颈会引起它的波动:

图片

如上图,此模型的 computing 曲线波动较大,模型可能存在带宽瓶颈。

2.进一步观察 load&store 柱状图,并配合 computing 曲线:

图片

可以看到,图中由多处的 load&store 柱状图高于 computing 曲线,这些地方可能存在了带宽瓶颈。

3.根据时态统计图中的时间轴,观察在某区间的 layer detail:

图片

如上图,标记了 6 处 load&store 柱状图高于 computing 的地方,对应的时间为:

图片

然后根据 layerdetails 的 active period of time 查看以上时间点的对应算子:

  • 标记点 1&标记 2

图片

可以看到引起带宽瓶颈的算子的 Softmax_458_mul、MatMul_459,onnx 模型中对应的子结构为:

图片

  • 标记点 3

图片

可以看到引起带宽瓶颈的算子的 Softmax_765_mul、MatMul_766,onnx 模型中对应的子结构为:

图片

  • 标记点 4

图片

可以看到引起带宽瓶颈的算子的 Softmax_968_mul、MatMul_969,onnx 模型中对应的子结构为:

图片

  • 标记点 5

图片

可以看到引起带宽瓶颈的算子的 Softmax_1171、MatMul_1172,onnx 模型中对应的子结构为:

图片

  • 标记点 6

图片

可以看到引起带宽瓶颈的算子的 Softmax_1374、MatMul_1375,onnx 模型中对应的子结构为:

图片

04 初步结论

综合以上分析结果可知,此模型中引起性能问题的是 Softmax 和 MatMul 算子组成的子结构,在下一篇文章中,我们将介绍模型性能相关的优化策略。


http://www.mrgr.cn/news/61761.html

相关文章:

  • C语言教程——数组(2)
  • G2 基于生成对抗网络(GAN)人脸图像生成
  • Spring Boot集成Milvus和deeplearning4j实现图搜图功能
  • IFC模型文本的含义
  • php伪协议和move_uploaded_file、rename、copy等文件操作
  • 【HarmonyOS】判断应用是否已安装
  • 矩阵压缩格式转换:COO转换CSC(C++)
  • Python世界:自动化办公Word之批量替换文本生成副本
  • nginx[新手用][模块化][高效]配置
  • 使用命令行上传 ipa 到 App Store(iTMSTransporter 3.3)
  • [JAVAEE] 面试题(二) - CAS 和 原子类
  • 计算机组成原理之高级语言程序与机器级代码之间的对应、高级语言和机器级代码的具体示例
  • 优化云成本,打造卓越体验,他们有话说
  • 微信小程序 - 获取汉字拼音首字母(汉字英文首字母)根据汉字查拼音,实现汉字拼音首字母获取,在小程序上实现汉字的拼音提取首字母!
  • [专有网络VPC]管理VPC配额
  • 智慧园区 | 数智引领,让智慧触手可及
  • String的长度有限,而我对你的思念却无限延伸
  • IDEA 打包首个java项目为jar包
  • 开箱即用!智能文档处理“百宝箱”
  • Faces in Things数据集: 由麻省理工学院、微软等联合发布,探索人类视觉错觉的新里程碑
  • Ollama运行本地LLM大模型简单教程:大显存很重要
  • 【Golang】Golang的数组和slice切片的区别
  • 数据集(Dataset)是指为特定目的而收集、整理、存储的数据集合
  • 雷池社区版配置同步试用
  • 最长公共子串问题
  • 【Linux系统编程】第三十九弹---探索信号处理的奥秘:阻塞信号与sigset_t的深入剖析及实战