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
- Exporter le modèle en ONNX.
- Valider ONNX avec ONNX Runtime.
- Construire l'engine TensorRT avec
trtexec. - Benchmarker la latence/débit.
- 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