跳到主要内容

TensorRT Engine 文件

.engine.plan 文件格式是由 NVIDIA 的 TensorRT 用于高性能深度学习推理的格式。

功能

TensorRT 引擎文件包含为特定 GPU 硬件和驱动版本优化的序列化执行计划。这些优化带来了:

  • 低延迟:比标准框架更快的推理速度。
  • 高吞吐量:在相同硬件上每秒完成更多的推理任务。

优化技术

技术描述
层融合 (Layer Fusion)将多个操作合并为一个内核(例如:Conv + ReLU)。
精度校准 (Precision Calibration)支持 FP32、FP16 和 INT8 量化以提高效率。
内核自动调優 (Kernel Auto-tuning)为目标硬件选择最佳的内核实现。
内存优化 (Memory Optimization)通过管理中间张量内存来减少内存占用。

创建 Engine 文件

从 ONNX (推荐)

import tensorrt as trt

# 创建构建器
logger = trt.Logger(trt.Logger.INFO)
builder = trt.Builder(logger)
network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
parser = trt.OnnxParser(network, logger)

# 解析 ONNX 模型
with open("model.onnx", "rb") as model:
parser.parse(model.read())

# 构建并序列化引擎
config = builder.create_builder_config()
engine = builder.build_engine(network, config)

with open("model.engine", "wb") as f:
f.write(engine.serialize())

从 PyTorch (Torch-TensorRT)

import torch
import torch_tensorrt

# 编译为 TensorRT 引擎
trt_model = torch_tensorrt.compile(
model,
inputs=[torch_tensorrt.Input((1, 3, 224, 224), dtype=torch.half)],
enabled_precisions={torch.half}, # FP16
workspace_size=1 << 30
)

# 保存引擎
torch.jit.save(trt_model, "model_torchtrt.engine")
硬件绑定

TensorRT 引擎文件与其构建时的特定 GPU 架构绑定。在 Tesla V100 上构建的引擎无法在 GeForce RTX 3090 上运行。

加载和使用 Engine

import tensorrt as trt

# 加载引擎
with open("model.engine", "rb") as f, trt.Runtime(trt.Logger(trt.Logger.INFO)) as runtime:
engine = runtime.deserialize_cuda_engine(f.read())

# 创建推理上下文
context = engine.create_execution_context()
小贴士

构建优化的引擎可能需要几分钟。对于生产环境,建议预构建引擎并进行缓存,以减少应用启动时间。