笔记:TREX工具-2

TensorRT Engine Explorer (trex) 使用指南-2

TensorRT 引擎报告卡

快速了解 TensorRT 引擎 plan 的结构和特性。

环境设置

python 复制代码
import IPython
from ipywidgets import widgets
from trex import *
from trex.notebook import *
from trex.report_card import *

# 选择一个引擎文件加载
engine_name = "../tests/inputs/mobilenet.qat.onnx.engine"
engine_name = "../tests/inputs/mobilenet_v2_residuals.qat.onnx.engine"
set_wide_display()

加载 JSON 文件

python 复制代码
plan = EnginePlan(
    f"{engine_name}.graph.json",
    f"{engine_name}.profile.json",
    f"{engine_name}.profile.metadata.json"
)

渲染图形

Layer renderer(层渲染器 --- 下拉框)

选项 作用
Minimal 最简化 --- 只显示层名称 + 类型,如 Convolution\nqwtsb
Keras Keras 风格 --- 显示 I/O tensor shape,更接近 Keras/TensorFlow 的可视化风格
Configurable 可配置 --- 生成 HTML 表格,包含更多细节(kernel/stride/padding 等),支持展开/折叠

Layers color(节点颜色 --- 下拉框)

选项 作用
Layer Type 按层类型着色(Convolution→蓝色、ReLU→红色等),用 layer_colormap
Layer Precision 按层精度着色(FP32→绿、FP16→蓝、INT8→橙等),用 precision_colormap

相关术语

术语 含义
Regions TensorRT 引擎的 subgraph 区域,TRT 会把能融合的层划为一个 region,减少 memory bandwidth
Region reuse 同一个 region 被多个分支复用的情况
Forking regions 一个 region 的输出分发到多个后续层的情况
Tactic TensorRT 调度层的具体实现策略(cuDNN kernel、WMMA、TensorRT native 等)
Constants 引擎中的常量输入(如权重),默认不渲染避免图形太密
Edge details 边上显示 tensor shape / precision 等详细信息

简单说:这套控件让你控制引擎图显示的粒度 --- 要极简(Minimal)还是要全量信息(Configurable),颜色按类型(Type)还是按精度(Precision)。

Plan Summary(计划摘要)

太阳图(层级饼图)

把各层延迟按类型分层展示:

元素 含义
外圈(大扇区) Layer type(层类型)
内圈(小扇区) 该类型下各层的 latency.pct_time 分桶
扇区大小 latency.avg_time(平均延迟)
颜色 按 layer type 着色

直观理解:饼图看整体比例,太阳图还能看子层嵌套结构,一眼分辨哪类层是瓶颈以及瓶颈在哪些具体层。

层展示表

表格形式列出每一层的详细信息,与太阳图配合使用。

时间统计

把 trtexec 跑多次推理的每次延迟做成散点图:

  • X 轴 = 第几次推理(Sample 1, 2, 3...)
  • Y 轴 = 该次推理的延迟(ms)

用途:看推理稳不稳定、有没有偶发高延迟(outlier)。

性能分析

选项 图表类型 说明
Latency per layer (%) 水平柱状图 每层延迟占总延迟的百分比
Latency per layer (ms) 水平柱状图 每层延迟的绝对值(毫秒)
Layer latency distribution 直方图 所有层延迟的分布
Precision per layer 柱状图(按精度着色) 每层的计算精度(FP32/FP16/INT8)
Output precision per layer 柱状图(按输出精度着色) 每层输出 tensor 的精度
Count per layer type 水平柱状图 各类型层的数量统计
Latency per layer type (ms) 水平柱状图 每类层的总延迟(毫秒)
Latency per layer type (%) 水平柱状图 每类层的总延迟(百分比)
Precision per layer type 太阳图 按层类型分组,看每类的精度分布
Precision rollup 饼图×2 精度数量占比 + 精度延迟占比

内存占用

选项 图表类型 说明
Weights footprint per layer 柱状图 每层权重(weights)大小
Activation footprint per layer 柱状图 每层激活值(activations)大小
Total footprint per layer 柱状图 每层总内存占用(weights + activations)
Weights footprint distribution 直方图 权重大小的分布
Activations footprint distribution 直方图 激活值大小的分布
Total footprint distribution 直方图 总内存占用的分布

三个关键内存概念

术语 含义
weights_size 层的权重参数体积(filter 权重、bias 等),静态内存,引擎构建时分配
total_io_size_bytes 层的一次 I/O 激活数据量(输入 + 输出),动态内存,推理时分配
total_footprint_bytes 两者之和,该层占用的总显存

用途:

  • 定位内存占用最大的层(通常是 Convolution)
  • 确认是否有层激活值异常大(可能是算法慢、带宽瓶颈来源)
  • 结合延迟分析:大内存层未必慢,但内存带宽瓶颈会反映在 latency 上

策略分析

目的:分析每个层用的 Tactic(TensorRT 调度策略)和延迟占比。

每层延迟图(按 tactic 上色)

柱高 = 各层延迟占比,颜色 = 该层使用的 tactic。直观看出哪层用哪个策略跑的、哪个策略延迟高。

Tactic 使用统计

tactic count
TensorRT 23
sm75_xmma_fprop_implicit_gemm... 8
... ...

实际用途:

  • 定位策略选择是否最优 --- 同类层用了哪些 tactic,延迟差多少
  • 发现低效 tactic --- 某个 tactic 使用次数少但延迟占比高
  • 理解 TensorRT 是怎么跑你的层的(cuDNN / WMMA / native)

Excel 摘要

trex 还支持将引擎分析结果导出为 Excel 文件,方便分享和归档。

生成默认摘要

python 复制代码
from trex.excel_summary import *

summary = ExcelSummary(plan, path="default_summary.xlsx")
summary.generate_default_summary()  # 自动保存文件

生成自定义摘要

python 复制代码
summary = ExcelSummary(plan, path="customized_summary.xlsx")
summary.add_dataframes({"df": plan.df})
summary.add_images({"trex_logo": "../images/trex_logo.png"})
summary.add_dataframes({"clean_df": clean_for_display(plan.df)})
summary.save()  # 需要手动调用 save

也可以使用上下文管理器,自动保存:

python 复制代码
with ExcelSummary(plan, path="customized_summary_with_manager.xlsx") as summary:
    summary.add_dataframes({"df": plan.df})
    summary.add_images({"trex_logo": "../images/trex_logo.png"})
    summary.add_dataframes({"clean_df": clean_for_display(plan.df)})

参考

deepseek

Tensorrt git 仓库

相关推荐
handler012 小时前
【MySQL】常用约束语法总结
linux·运维·数据库·笔记·mysql
chushiyunen2 小时前
golang笔记、go
开发语言·笔记·golang
星恒随风3 小时前
从零开始理解 CNN(上):为什么图像任务需要卷积神经网络?
人工智能·笔记·神经网络·学习·cnn
星恒随风3 小时前
从零开始理解 CNN(下):拆开卷积层、池化层、通道数和训练流程
人工智能·笔记·深度学习·神经网络·学习·cnn
EllinY11 小时前
CF2217E Definitely Larger 题解
c++·笔记·算法·构造
nnsix11 小时前
JIT(即时编译)、 AOT(预先编译)、虚拟机CLR 笔记
笔记
NULL指向我12 小时前
Simplis仿真笔记1:Simplis_V8.4_x64安装过程
笔记
ouliten13 小时前
[Triton笔记6]层标准化
笔记
玄米乌龙茶12315 小时前
思维导图笔记:Prompt工程
笔记·prompt