Triton Inferentieserver met Ultralytics YOLOv8
De Triton Inference Server (voorheen bekend als TensorRT Inference Server) is een open-source softwareoplossing ontwikkeld door NVIDIA. Het biedt een cloud-inferentieoplossing die is geoptimaliseerd voor NVIDIA GPU's. Triton vereenvoudigt de inzet van AI-modellen op schaal in productie. Door Ultralytics YOLOv8 te integreren met Triton Inference Server kun je schaalbare, krachtige deep learning inferentiewerklasten implementeren. Deze handleiding bevat stappen om de integratie op te zetten en te testen.
Kijken: Aan de slag met NVIDIA Triton Inference Server.
Wat is Triton Inferentieserver?
Triton Inference Server is ontworpen om verschillende AI-modellen in productie te nemen. Het ondersteunt een breed scala aan deep learning en machine learning frameworks, waaronder TensorFlow, PyTorch, ONNX Runtime en vele andere. De primaire gebruikssituaties zijn:
- Meerdere modellen serveren vanaf een enkele serverinstantie.
- Dynamisch laden en ontladen van modellen zonder de server opnieuw op te starten.
- Ensemble-inferentie, waardoor meerdere modellen samen kunnen worden gebruikt om resultaten te bereiken.
- Modelversie voor A/B-testen en doorlopende updates.
Vereisten
Zorg ervoor dat je aan de volgende voorwaarden voldoet voordat je verder gaat:
- Docker geïnstalleerd op je machine.
- Installeer
tritonclient
:
YOLOv8 exporteren naar ONNX
Voordat het model wordt ingezet op Triton, moet het worden geëxporteerd naar het ONNX formaat. ONNX (Open Neural Network Exchange) is een formaat waarmee modellen kunnen worden overgedragen tussen verschillende deep learning frameworks. Gebruik de export
functie van de YOLO
klasse:
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8n.pt') # load an official model
# Export the model
onnx_file = model.export(format='onnx', dynamic=True)
Triton Modelrepository instellen
De Triton Model Repository is een opslaglocatie waar Triton modellen kan openen en laden.
-
Maak de benodigde mappenstructuur:
-
Verplaats het geëxporteerde ONNX model naar het Triton archief:
Triton Inferentieserver uitvoeren
Voer de Triton Inference Server uit met Docker:
import subprocess
import time
from tritonclient.http import InferenceServerClient
# Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver
tag = 'nvcr.io/nvidia/tritonserver:23.09-py3' # 6.4 GB
# Pull the image
subprocess.call(f'docker pull {tag}', shell=True)
# Run the Triton server and capture the container ID
container_id = subprocess.check_output(
f'docker run -d --rm -v {triton_repo_path}:/models -p 8000:8000 {tag} tritonserver --model-repository=/models',
shell=True).decode('utf-8').strip()
# Wait for the Triton server to start
triton_client = InferenceServerClient(url='localhost:8000', verbose=False, ssl=False)
# Wait until model is ready
for _ in range(10):
with contextlib.suppress(Exception):
assert triton_client.is_model_ready(model_name)
break
time.sleep(1)
Voer dan inferentie uit met het Triton Server model:
from ultralytics import YOLO
# Load the Triton Server model
model = YOLO(f'http://localhost:8000/yolo', task='detect')
# Run inference on the server
results = model('path/to/image.jpg')
Ruim de container op:
# Kill and remove the container at the end of the test
subprocess.call(f'docker kill {container_id}', shell=True)
Door de bovenstaande stappen te volgen, kun je Ultralytics YOLOv8 modellen efficiënt implementeren en uitvoeren op Triton Inference Server, wat een schaalbare en krachtige oplossing biedt voor deep learning inferentietaken. Als je tegen problemen aanloopt of nog vragen hebt, raadpleeg dan de officiële Triton documentatie of neem contact op met de Ultralytics community voor ondersteuning.