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 仓库