Tutorial 19: Triton Inference Server - Penyajian Model Berperforma Tinggi
Daftar Isi
Pendahuluan
NVIDIA Triton Inference Server adalah perangkat lunak serving inferensi open-source yang memungkinkan tim men-deploy model AI dari framework apa pun pada infrastruktur GPU atau CPU. Server ini mendukung berbagai format model secara bersamaan — TensorFlow, PyTorch, ONNX Runtime, TensorRT, dan backend Python kustom — semuanya dari satu instance server tunggal.
Triton menangani masalah-masalah sulit dalam penyajian model produksi: dynamic batching untuk memaksimalkan pemanfaatan GPU, ensemble model untuk pipeline multi-tahap, eksekusi model secara bersamaan, versioning model, pemantauan kesehatan, dan ekspor metrik. Tutorial ini membahas semuanya mulai dari pengaturan awal hingga deploy Kubernetes tingkat produksi.
Prasyarat
- Docker terinstal dengan NVIDIA Container Toolkit
- GPU NVIDIA dengan CUDA 12.0+ (untuk serving GPU)
- Python 3.9+ dengan library tritonclient
- Pemahaman dasar konsep model serving
- kubectl dan helm (untuk bagian Kubernetes)
# Instal library klien Triton
pip install tritonclient[all] grpcio numpy
import tritonclient.grpc as grpcclient
import tritonclient.http as httpclient
import numpy as np
Menyiapkan Triton Inference Server
Mengunduh dan Menjalankan Triton
# Unduh kontainer Triton Inference Server
docker pull nvcr.io/nvidia/tritonserver:24.01-py3
Buat direktori repository model
mkdir -p /opt/triton/repositorymodel
Jalankan Triton dengan dukungan GPU
docker run --gpus all \
--rm -p 8000:8000 -p 8001:8001 -p 8002:8002 \
-v /opt/triton/repositorymodel:/models \
nvcr.io/nvidia/tritonserver:24.01-py3 \
tritonserver --model-repository=/models \
--log-verbose=1
Port:
8000 - Endpoint HTTP/REST
8001 - Endpoint gRPC
8002 - Endpoint Metrik (format Prometheus)
Memverifikasi Server
import tritonclient.http as httpclient
Periksa kesehatan server
client = httpclient.InferenceServerClient(url="localhost:8000")
print(f"Server hidup: {client.isserverlive()}")
print(f"Server siap: {client.isserverready()}")
Daftar model yang dimuat
indeksrepository = client.getmodelrepositoryindex()
for model in indeksrepository:
print(f"Model: {model['name']}, Versi: {model.get('version', 'N/A')}, "
f"Status: {model.get('state', 'N/A')}")
Struktur Repository Model
Triton menggunakan struktur direktori tertentu untuk repository modelnya. Setiap model memiliki direktorinya sendiri dengan file konfigurasi dan subdirektori versi bernomor.
repositorymodel/
├── pengklasifikasigambar/
│ ├── config.pbtxt
│ ├── 1/
│ │ └── model.onnx
│ └── 2/
│ └── model.onnx
├── encoderteks/
│ ├── config.pbtxt
│ └── 1/
│ └── model.pt
├── ekstraktorfitur/
│ ├── config.pbtxt
│ └── 1/
│ └── model.savedmodel/
│ ├── savedmodel.pb
│ └── variables/
└── praprosesor/
├── config.pbtxt
└── 1/
└── model.py
Konfigurasi Model (config.pbtxt)
# config.pbtxt untuk pengklasifikasi gambar ONNX
name: "pengklasifikasigambar"
platform: "onnxruntimeonnx"
maxbatchsize: 32
input [
{
name: "input"
datatype: TYPEFP32
dims: [ 3, 224, 224 ]