পাঠ ১৭ · ৩৩-এর মধ্যে · মডিউল ৩
Home / AI Courses / MLOps / Triton

Triton Inference Server

NVIDIA Triton — multi-framework, GPU-optimized
৭ মিনিট পড়া উচ্চ · Advanced Config + Python

এই পাঠে যা শিখবেন

  • Triton model repository structure
  • config.pbtxt — model configuration
  • Dynamic batching — latency vs throughput tuning
  • FastAPI vs Triton — কখন কোনটা

১ · কেন Triton

FastAPI + sklearn ছোট model-এ সরল। কিন্তু GPU-heavy workload (BERT, ResNet, Stable Diffusion)-এ Triton dominant।

  • Multi-framework — TensorRT (fastest), ONNX, PyTorch, TF, OpenVINO।
  • Dynamic batching — multiple incoming requests merge করে GPU efficient।
  • Model ensemble — multi-step pipeline (preprocess → inference → postprocess) single request।
  • Multi-model — same GPU multiple models।
  • Concurrent execution — same model multiple instance parallel।

২ · Model repository structure

Bash · Repo layout
model_repository/
├── bangla-sentiment-onnx/
│   ├── config.pbtxt
│   ├── 1/
│   │   └── model.onnx
│   └── 2/
│       └── model.onnx
├── image-classifier-tensorrt/
│   ├── config.pbtxt
│   ├── labels.txt
│   └── 1/
│       └── model.plan
└── llm-pytorch/
    ├── config.pbtxt
    └── 1/
        └── model.pt

    
Model directory নাম = endpoint। Sub-directory version (1, 2)। config.pbtxt — model metadata + serving config।

৩ · config.pbtxt example

Protobuf · config.pbtxt
name: "bangla-sentiment-onnx"
platform: "onnxruntime_onnx"
max_batch_size: 64

input [
  {
    name: "input_ids"
    data_type: TYPE_INT64
    dims: [ 128 ]
  },
  {
    name: "attention_mask"
    data_type: TYPE_INT64
    dims: [ 128 ]
  }
]

output [
  {
    name: "logits"
    data_type: TYPE_FP32
    dims: [ 3 ]
  }
]

dynamic_batching {
  preferred_batch_size: [ 4, 8, 16, 32 ]
  max_queue_delay_microseconds: 5000
}

instance_group [
  {
    count: 2
    kind: KIND_GPU
    gpus: [ 0 ]
  }
]

version_policy: { specific: { versions: [ 2 ] } }

    
Critical configs: max_batch_size — server batch করার maximum। dynamic_batching.max_queue_delay — wait window। instance_group.count — concurrent execution।

৪ · Dynamic batching impact

GPU inference per-request poor utilization। Batch-এ throughput dramatically up।

  • Batch size 1: GPU ~১০% utilized।
  • Batch size 16: GPU ~৭০% utilized।
  • Throughput: 5-10× higher।

$$ \text{Effective\_latency} = \text{queue\_delay} + \text{batch\_inference\_time} $$

Trade-off: queue_delay বাড়ালে batch বেশি (throughput up), কিন্তু individual request latency up।

৫ · Model ensemble

একটি request-এ multi-step inference: tokenize → BERT → softmax → label। Each step Triton-এ separate model হিসেবে; ensemble একসাথে chain।

৬ · Triton client

Python · Triton client
import tritonclient.http as httpclient
import numpy as np

client = httpclient.InferenceServerClient(url="triton:8000")

# input prepare
input_ids = np.array([[1, 2, 3, ..., 0]], dtype=np.int64)
attention_mask = np.ones_like(input_ids)

inputs = [
    httpclient.InferInput("input_ids", input_ids.shape, "INT64"),
    httpclient.InferInput("attention_mask", attention_mask.shape, "INT64"),
]
inputs[0].set_data_from_numpy(input_ids)
inputs[1].set_data_from_numpy(attention_mask)

outputs = [httpclient.InferRequestedOutput("logits")]

# inference
response = client.infer(
    model_name="bangla-sentiment-onnx",
    inputs=inputs,
    outputs=outputs,
)

logits = response.as_numpy("logits")
predictions = logits.argmax(axis=-1)
print(predictions)

    
Triton HTTP/gRPC দু'টোই support। gRPC binary, lower latency। Python, C++, Java, Go client library available।

৭ · FastAPI vs Triton

  • FastAPI choose when:
    • Single sklearn / lightgbm model।
    • CPU-bound, light load।
    • Heavy preprocessing in Python।
    • Team Python-comfortable, no GPU expertise।
  • Triton choose when:
    • GPU-heavy (BERT, vision)।
    • Multi-model serving।
    • Throughput critical (1000+ RPS)।
    • TensorRT optimization wanted।
  • Hybrid:
    • FastAPI gateway → Triton inference backend।
    • FastAPI handles auth, validation, business logic।
    • Triton handles raw GPU inference।
Triton dynamic batching — throughput multiplier Req 1 Req 2 Req 3 Req 4 Batch queue max_queue_delay = 5ms preferred_batch = 4, 8, 16 Combined batch=4 GPU inference batch=4 once ~25ms inference vs 4× single ~80ms throughput 3× ↑
Dynamic batching — multiple incoming request 5ms-window-এ collected, single GPU inference-এ। GPU utilization ও throughput dramatic boost।
Bangladesh-এ Triton adoption growing — DL-heavy team-এ। Cloud GPU (AWS Mumbai g5 instances)-এ Triton standard। On-prem GPU shop-এ Triton Docker run trivial।

ভাবনার প্রশ্ন

প্র ০১"Triton vs FastAPI — concrete decision criteria + scenario।"

Decision driven by workload type, not preference।

Triton wins:

  • Single GPU 500-2000 RPS BERT inference: dynamic batching 5-10× advantage।
  • Vision models (ResNet, Yolo) — TensorRT compile possible।
  • Multi-model — GPU memory share efficiency।

FastAPI wins:

  • Single sklearn model, 50 RPS — Triton overkill।
  • Heavy Python preprocessing (text cleaning, custom logic)।
  • Auth, rate limiting, business orchestration।

Hybrid (most common production):

  • FastAPI = API gateway, request validation, feature lookup, postprocess।
  • Triton = pure GPU inference backend।
  • FastAPI internally calls Triton via gRPC।

BD example:

  • Image-based product search Daraz: FastAPI receives upload → Triton (Yolo + ResNet ensemble) → FastAPI postprocess + return।

Cost:

  • Triton free, but GPU cost dominant।
  • Triton image larger (4-5 GB), FastAPI image slim (200 MB)।

মূল উপলব্ধি: Triton DL+GPU specialist। FastAPI generalist। 80% production hybrid। "FastAPI everything" — GPU under-utilized।

প্র ০২"max_queue_delay tuning — কীভাবে?"

This is critical Triton tuning parameter।

What it does:

  • Server waits up to N microseconds for more requests to batch।
  • Batch fills early or timeout — execute।

Effects:

  • Higher delay = bigger batch = higher GPU efficiency = higher throughput।
  • But: individual request latency higher।

Tuning approach:

  • Start: max_queue_delay = your latency budget × 0.1 (e.g., 100ms budget → 10ms wait)।
  • Load test: vary delay, plot throughput vs p99 latency।
  • Sweet spot: max throughput within latency SLA।

Workload-specific:

  • High RPS (1000+): low delay (1-5ms) — batch fills naturally।
  • Medium RPS (100-500): medium delay (5-20ms)।
  • Low RPS: dynamic batching not very useful — just per-request inference।

preferred_batch_size:

  • List of sizes Triton prefers।
  • Common: [4, 8, 16, 32]।
  • Server batches to nearest preferred size।

Common pitfall:

  • Production batch size = max_batch_size — overshoots latency।
  • Ensure max_batch_size accommodates peak, not norm।

মূল উপলব্ধি: max_queue_delay = latency-throughput dial। Load test to find sweet spot। One-size-fits-all does not exist।

প্র ০৩"TensorRT compile করা worth?"

TensorRT — NVIDIA's optimized inference engine।

Benefits:

  • 2-5× faster inference vs PyTorch।
  • FP16/INT8 quantization built-in।
  • Layer fusion, kernel auto-tuning।

Costs:

  • GPU-specific — A100 compiled engine doesn't run on T4।
  • Slow compile (5-30 min)।
  • Some PyTorch ops unsupported।
  • Debugging harder.

When worth:

  • Stable production model — frequent retrain rare।
  • Latency-critical — every ms matters।
  • Cost-critical — GPU hours expensive।

When skip:

  • Frequent model update — recompile overhead।
  • Custom layers — TensorRT support gap।
  • ONNX runtime usually 80% of TensorRT benefit, easier।

Practical workflow:

  • PyTorch → ONNX export।
  • ONNX → TensorRT compile (trtexec or polygraphy)।
  • Triton serve TensorRT engine।

BD context:

  • GPU expensive ($1.5-3/hour) — TensorRT 3× speedup → 3× cost saving।
  • For stable production — strong ROI।

মূল উপলব্ধি: TensorRT — production stable model-এ excellent। Frequent change-এ overhead exceed benefit। ONNX runtime safer middle ground।

প্র ০৪"GPU concurrency — instance_group.count tuning।"

Multiple instance same model parallel — GPU memory + compute share।

What it does:

  • count=2: 2 copies of model on GPU; 2 inferences parallel।
  • Useful: model small, GPU underutilized in single instance।

Trade-offs:

  • Memory: each instance full model copy। Big LLM: maybe 1 instance fits।
  • Compute share: 2 instances share GPU; one slow other slower।
  • Latency variance: contention।

When increase count:

  • Small model (BERT-base 100MB)।
  • Mixed batch sizes — small batches don't saturate GPU।

When count=1:

  • Large LLM (GPT-style)।
  • Big batch saturates GPU fully।

Multi-GPU:

  • instance_group with multiple GPUs — model replicated across GPUs।
  • Triton load-balances across।

Tuning:

  • nvidia-smi monitor utilization।
  • Single instance: GPU 50% util — try count=2।
  • GPU 95% — single is enough।

মূল উপলব্ধি: instance_group.count — GPU utilization tuning dial। Default 1, increase if measure shows underutilization। Memory-aware।

অনুশীলন

  1. Setup: Triton Docker run করুন; sample model serve।

    docker run --gpus=all -p8000:8000 -p8001:8001 -v /path/to/repo:/models nvcr.io/nvidia/tritonserver:24.01-py3 tritonserver --model-repository=/models

  2. Convert: একটি sklearn / PyTorch model ONNX-এ convert; Triton-এ deploy।

    PyTorch: torch.onnx.export(model, ...). sklearn: skl2onnx. Place in repo, write config.pbtxt, restart Triton।

  3. Tune: dynamic batching delay 1ms থেকে 50ms পর্যন্ত sweep — throughput-latency curve plot।

    Triton perf_analyzer tool ideal। perf_analyzer -m model_name --concurrency-range 1:32

আরও পড়ুন

পূর্ববর্তী পাঠ
পাঠ ১৬ · FastAPI serving