Мир искусственного интеллекта в 2026 году напоминает Kubernetes-кластер после пятницы релиза: всё горит, масштабируется, жужжит видеокартами и требует "ещё чуть-чуть VRAM".
Модели становятся больше, запросов больше, GPU дороже, а разработчики всё ещё иногда запускают inference через Flask + torch.load() внутри одного контейнера.
И вот тут на сцену выходит NVIDIA Triton Inference Server.
Это не просто "сервер для моделей". Это полноценная промышленная платформа для запуска inference-нагрузки:
-
TensorRT
-
ONNX
-
PyTorch
-
TensorFlow
-
Python backend
-
ансамбли моделей
-
batching
-
GPU scheduling
-
streaming
-
Kubernetes
-
multi-model serving
-
горячая загрузка моделей
И всё это с ощущением, будто NVIDIA однажды посмотрела на хаос ML production и сказала:
"Ладно. Давайте уже сделаем это нормально. Надоел этот цирк с понями!"
Что вообще такое Triton Inference Server
Если очень грубо:
Triton - это nginx для нейросетей.
Только вместо HTML:
-
тензоры
-
CUDA
-
batching
-
gRPC
-
inference pipeline
-
GPU memory management
Он умеет:
-
загружать модели
-
автоматически их обновлять
-
распределять нагрузку
-
делать batching запросов
-
использовать GPU эффективно
-
отдавать inference через HTTP/gRPC
И самое главное:
Triton превращает зоопарк моделей в нормальный production runtime.
Почему все начинают использовать Triton
До Triton инфраструктура ML выглядела так:
python server.py
А внутри:
-
Flask
-
torch.load()
-
multiprocessing
-
костыли
-
ручной batching
-
CUDA out of memory
-
"почему GPU загружен на 12%?"
-
"кто опять убил контейнер"
С Triton появляется:
-
нормальный inference lifecycle
-
модельный репозиторий
-
health checks
-
metrics
-
Prometheus
-
GPU telemetry
-
Kubernetes scaling
-
model versioning
Архитектура Triton
У Triton простая архитектура.
Client
|
HTTP/gRPC
|
Triton Server
|
Model Repository
|
Backend
|
GPU/CPU
Backends:
-
TensorRT
-
ONNX Runtime
-
PyTorch
-
TensorFlow
-
Python
-
OpenVINO
-
FIL
-
vLLM backend
-
TensorRT-LLM
Установка Triton через Docker
Самый нормальный путь.
Проверяем NVIDIA runtime
На сервере должны быть:
-
Docker
-
NVIDIA Driver
-
NVIDIA Container Toolkit
Проверяем GPU:
nvidia-smi
Если всё хорошо:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 575.xx |
+-----------------------------------------------------------------------------+
Установка NVIDIA Container Toolkit
Для Ubuntu:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit
Перезапускаем Docker:
sudo systemctl restart docker
Первый запуск Triton
docker run --gpus=all --rm -it \
-p 8000:8000 \
-p 8001:8001 \
-p 8002:8002 \
nvcr.io/nvidia/tritonserver:25.04-py3 \
tritonserver --model-repository=/models
Порты:
-
8000 - HTTP API
-
8001 - gRPC
-
8002 - Prometheus metrics
И вот тут начинается магия production AI.
Структура model repository
Triton живёт вокруг model repository.
Пример:
models/
└── sentiment_model/
├── config.pbtxt
└── 1/
└── model.onnx
Где:
-
sentiment_model - имя модели
-
1 - версия модели
-
config.pbtxt - конфигурация
Запускаем ONNX модель
Конвертация модели
Допустим у нас есть PyTorch модель.
torch.onnx.export(
model,
dummy_input,
"model.onnx",
input_names=["input"],
output_names=["output"]
)
config.pbtxt
Вот сердце Triton.
name: "sentiment_model"
platform: "onnxruntime_onnx"
max_batch_size: 32
input [
{
name: "input"
data_type: TYPE_FP32
dims: [768]
}
]
output [
{
name: "output"
data_type: TYPE_FP32
dims: [2]
}
]
instance_group [
{
kind: KIND_GPU
count: 1
}
]
Запуск сервера
docker run --gpus=all --rm \
-p8000:8000 \
-v $(pwd)/models:/models \
nvcr.io/nvidia/tritonserver:25.04-py3 \
tritonserver --model-repository=/models
Проверяем что сервер жив
curl localhost:8000/v2/health/ready
Ответ:
OK
Иногда это самый приятный "OK" за всю неделю.
Список моделей
curl localhost:8000/v2/models
Делаем inference
Python клиент
Устанавливаем:
pip install tritonclient[http]
Пример запроса
import numpy as np
import tritonclient.http as httpclient
client = httpclient.InferenceServerClient(
url="localhost:8000"
)
input_data = np.random.rand(1, 768).astype(np.float32)
inputs = []
infer_input = httpclient.InferInput(
"input",
input_data.shape,
"FP32"
)
infer_input.set_data_from_numpy(input_data)
inputs.append(infer_input)
outputs = [
httpclient.InferRequestedOutput("output")
]
result = client.infer(
model_name="sentiment_model",
inputs=inputs,
outputs=outputs
)
print(result.as_numpy("output"))
Dynamic batching - та самая магия производительности
Вот где Triton начинает окупать GPU.
Обычный inference:
-
1 запрос
-
1 GPU execution
-
куча простаивания
Triton умеет:
-
собирать запросы
-
объединять в batch
-
запускать пачкой
GPU начинает работать как GPU, а не как дорогой RGB-обогреватель.
Настройка batching
dynamic_batching {
preferred_batch_size: [4, 8, 16]
max_queue_delay_microseconds: 100
}
Что это даёт
Без batching:
GPU utilization: 15%
С batching:
GPU utilization: 90%
Финансовый директор внезапно перестаёт смотреть на тебя как на человека, который арендует суперкомпьютер ради калькулятора.
TensorRT backend
Если ONNX - это хорошо, то TensorRT - это "мы хотим squeeze every last FLOP из GPU".
TensorRT:
-
оптимизирует граф
-
делает kernel fusion
-
уменьшает latency
-
ускоряет inference
Иногда:
-
x2
-
x5
-
x10 ускорение
Конвертация в TensorRT
trtexec \
--onnx=model.onnx \
--saveEngine=model.plan
Конфиг TensorRT
platform: "tensorrt_plan"
Всё. Иногда production optimization выглядит подозрительно просто.
Python backend
Вот это уже очень интересно. Triton умеет запускать Python-код как backend.
То есть:
-
preprocessing
-
postprocessing
-
custom logic
-
tokenizer
-
бизнес-логика
Можно делать прямо внутри Triton.
Структура Python backend
models/
└── tokenizer/
├── config.pbtxt
└── 1/
└── model.py
model.py
import numpy as np
import triton_python_backend_utils as pb_utils
class TritonPythonModel:
def initialize(self, args):
print("Model initialized")
def execute(self, requests):
responses = []
for request in requests:
input_tensor = pb_utils.get_input_tensor_by_name(
request,
"text"
)
data = input_tensor.as_numpy()
result = np.array([len(x) for x in data])
output_tensor = pb_utils.Tensor(
"length",
result.astype(np.int32)
)
responses.append(
pb_utils.InferenceResponse(
output_tensors=[output_tensor]
)
)
return responses
Ensemble models
Вот тут Triton начинает напоминать mini-Kubeflow.
Можно собирать pipeline:
Tokenizer
↓
Embedding
↓
LLM
↓
Postprocess
И всё это будет одним inference endpoint.
Пример ensemble
ensemble_scheduling {
step [
{
model_name: "tokenizer"
model_version: -1
},
{
model_name: "llm"
model_version: -1
}
]
}
Triton + Kubernetes
Ну и конечно самое вкусное. Triton идеально живёт в Kubernetes.
Особенно если:
-
много GPU
-
много моделей
-
autoscaling
-
multi-tenant AI platform
Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: triton
spec:
replicas: 1
selector:
matchLabels:
app: triton
template:
metadata:
labels:
app: triton
spec:
containers:
- name: triton
image: nvcr.io/nvidia/tritonserver:25.04-py3
args:
- tritonserver
- --model-repository=/models
ports:
- containerPort: 8000
- containerPort: 8001
- containerPort: 8002
resources:
limits:
nvidia.com/gpu: 1
volumeMounts:
- name: models
mountPath: /models
volumes:
- name: models
persistentVolumeClaim:
claimName: triton-models
Service
apiVersion: v1
kind: Service
metadata:
name: triton
spec:
selector:
app: triton
ports:
- name: http
port: 8000
- name: grpc
port: 8001
- name: metrics
port: 8002
GPU Operator
В Kubernetes почти всегда используют:
-
NVIDIA GPU Operator
-
Node Feature Discovery
-
DCGM Exporter
Без этого Kubernetes с GPU быстро превращается в шаманизм.
Метрики и мониторинг
Triton умеет:
-
Prometheus metrics
-
GPU telemetry
-
latency
-
queue time
-
batch stats
-
model load time
Метрики:
curl localhost:8002/metrics
Пример метрик
nv_inference_request_success
nv_inference_queue_duration_us
nv_gpu_utilization
nv_inference_execution_count
И вот тут DevOps-инженер начинает чувствовать себя дома.
Horizontal scaling
Обычная схема:
Ingress
↓
Service
↓
Triton Pods
Можно:
-
масштабировать pod'ы
-
разделять модели
-
делать model sharding
-
использовать MIG
MIG - Multi Instance GPU
Это когда один GPU режется на части.
Например:
H100
├── 10GB
├── 10GB
├── 20GB
И Kubernetes видит это как разные GPU.
В multi-tenant окружениях это буквально спасение бюджета.
Triton и большие языковые модели
В 2026 году большинство ставит Triton ради:
-
Llama
-
DeepSeek
-
Qwen
-
Mistral
-
Gemma
Особенно вместе с:
-
TensorRT-LLM
-
vLLM
-
KV cache
-
paged attention
Triton + vLLM
Сейчас это одна из самых популярных схем.
Почему:
-
Triton даёт production infrastructure
-
vLLM даёт быстрый inference LLM
Получается:
-
batching
-
streaming
-
token scheduling
-
API gateway
-
metrics
-
scaling
Пример docker-compose
version: "3.9"
services:
triton:
image: nvcr.io/nvidia/tritonserver:25.04-py3
command:
- tritonserver
- --model-repository=/models
ports:
- "8000:8000"
- "8001:8001"
- "8002:8002"
volumes:
- ./models:/models
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities: [gpu]
Частые проблемы
CUDA mismatch
Самая популярная.
CUDA driver version is insufficient
Потому что:
-
драйвер старый
-
контейнер новый
-
NVIDIA как обычно решила "слегка обновить совместимость"
OOM
CUDA out of memory
Лечится:
-
batching tuning
-
fp16
-
quantization
-
TensorRT
-
MIG
-
уменьшением context window
Медленный inference
Почти всегда:
-
batching выключен
-
CPU preprocessing
-
маленькие batch size
-
PCIe bottleneck
-
tokenizer тормозит
Когда Triton не нужен
Иногда люди пытаются запускать Triton:
-
для одной модели
-
с 5 запросами в день
-
на CPU
-
на VPS за 10 евро
Это как ставить Kubernetes ради nginx и котика на главной странице.
Когда Triton действительно раскрывается
Triton великолепен если:
-
много inference
-
дорогие GPU
-
high load
-
LLM
-
Kubernetes
-
multi-model serving
-
latency optimization
Плюсы Triton
Очень высокая производительность
Triton реально умеет загружать GPU эффективно.
Production-ready
Не "pet project ready".
А именно:
-
enterprise
-
observability
-
scaling
-
monitoring
-
HA
Огромное количество backend'ов
Можно запускать почти всё.
Dynamic batching
Это killer feature.
Kubernetes friendly
NVIDIA явно проектировала его под k8s.
Минусы Triton
Сложность
Triton - не игрушка. Иногда config.pbtxt напоминает древний ритуал вызова CUDA-демона.
Документация NVIDIA
Она:
-
огромная
-
местами прекрасная
-
местами как будто написана видеокартой
Отладка
Иногда inference pipeline дебажится через:
-
логи
-
молитвы
-
nvidia-smi
-
"а давайте перезапустим pod"
Итог
NVIDIA Triton Inference Server сегодня - это практически стандарт де-факто для серьёзного AI inference в инфраструктуре.
Особенно если у вас:
-
Kubernetes
-
GPU-кластеры
-
LLM
-
production-нагрузка
-
много моделей
-
дорогие ускорители
И самое приятное - Triton наконец-то приносит в мир ML ту самую инженерную дисциплину, к которой инфраструктурщики привыкли уже много лет.
Потому что когда AI перестаёт быть "магическим Python-скриптом" и становится обычным production-сервисом - жизнь всей команды внезапно становится гораздо спокойнее.