跳至主要内容

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()
小貼士

構建優化的引擎可能需要幾分鐘。對於生產環境,建議預構建引擎並進行快取,以減少應用啟動時間。