tensorrt

Par mkurman · zorai

NVIDIA TensorRT — optimiseur d'inférence pour le deep learning. Quantification FP16/INT8/INT4, auto-tuning des kernels, fusion de couches et formes dynamiques. Débit maximal sur GPU NVIDIA pour l'inférence en production.

npx skills add https://github.com/mkurman/zorai --skill tensorrt

Aperçu

TensorRT est l'optimiseur d'inférence haute performance et le runtime d'NVIDIA pour déployer des modèles de deep learning sur les GPU NVIDIA. Utilisez-le quand vous avez besoin d'une latence plus faible, d'un débit plus élevé, d'optimisations FP16/INT8, ou d'un serveur GPU de production à partir d'exports ONNX ou TensorFlow/PyTorch.

Quand l'utiliser

Utilisez cette skill quand :

  • un modèle fonctionne déjà en PyTorch/TensorFlow mais l'inférence est trop lente,
  • vous avez besoin d'un déploiement FP16 ou INT8 sur des GPU NVIDIA,
  • vous déployez des modèles de vision, NLP ou embedding en production,
  • vous voulez servir des engines optimisés via Triton Inference Server,
  • ou vous avez besoin de benchmarker l'inférence GPU correctement plutôt que de deviner.

Installation / Environnement

TensorRT s'installe généralement via les paquets NVIDIA, les images Docker, ou les conteneurs NGC plutôt que via pip classique.

Chemins typiques :

# À l'intérieur des écosystèmes de conteneurs NVIDIA
# Utilisez un conteneur NGC PyTorch ou TensorRT

# La simplification du graphe ONNX aide souvent avant la conversion
uv pip install onnx onnxruntime onnxsim polygraphy

Workflow le plus rapide : ONNX -> TensorRT Engine

  1. Exporter le modèle en ONNX.
  2. Valider ONNX avec ONNX Runtime.
  3. Construire l'engine TensorRT avec trtexec.
  4. Benchmarker la latence/débit.
  5. Intégrer l'engine dans l'app ou Triton.

Exporter de PyTorch vers ONNX

import torch

dummy = torch.randn(1, 3, 224, 224, device='cuda')
model.eval()

torch.onnx.export(
    model,
    dummy,
    'model.onnx',
    input_names=['input'],
    output_names=['logits'],
    dynamic_axes={'input': {0: 'batch'}, 'logits': {0: 'batch'}},
    opset_version=17,
)

Valider d'abord le modèle ONNX

python - <<'PY'
import onnx
m = onnx.load('model.onnx')
onnx.checker.check_model(m)
print('ONNX OK')
PY

Construire un engine FP16

trtexec   --onnx=model.onnx   --saveEngine=model_fp16.plan   --fp16   --workspace=4096   --minShapes=input:1x3x224x224   --optShapes=input:8x3x224x224   --maxShapes=input:32x3x224x224

Optimisation INT8

Utilisez INT8 seulement quand vous avez :

  • de bonnes données de calibration, ou
  • un graphe préparé/exporté pour la quantization-aware.
trtexec   --onnx=model.onnx   --saveEngine=model_int8.plan   --int8   --fp16

Benchmarking

trtexec --loadEngine=model_fp16.plan --shapes=input:8x3x224x224

Vérifiez :

  • la latence moyenne
  • le débit
  • la mémoire GPU
  • si les kernels utilisent réellement les Tensor Cores

Déploiement Triton

Layout de production recommandé :

model_repository/
  my_model/
    1/
      model.plan
    config.pbtxt

config.pbtxt minimal :

name: "my_model"
platform: "tensorrt_plan"
max_batch_size: 32
input [
  {
    name: "input"
    data_type: TYPE_FP32
    dims: [ 3, 224, 224 ]
  }
]
output [
  {
    name: "logits"
    data_type: TYPE_FP32
    dims: [ 1000 ]
  }
]

Modes de défaillance courants

  • ONNX exporte des ops non supportées -> simplifiez le graphe ou changez le chemin d'export
  • formes dynamiques manquantes -> l'engine ne fonctionne que pour un batch/une forme
  • effondrement de précision INT8 -> calibrez correctement ou restez sur FP16
  • mauvaise correspondance du prétraitement -> le modèle semble cassé mais la normalisation d'entrée est incorrecte
  • engine construit sur une architecture GPU et réutilisé sur une cible incompatible

Checklist de vérification

  • comparez la sortie TensorRT vs PyTorch sur le même batch de test
  • mesurez la métrique top-1/top-k ou task après conversion
  • benchmarkez plusieurs tailles de batch, pas seulement batch=1
  • testez les exécutions chaudes et froides séparément
  • sauvegardez les commandes de construction avec l'artefact engine

Skills similaires