Giới thiệu Khi một ứng dụng cần chạy nhiều mô hình cùng lúc — ví dụ: phân loại văn bản, phát hiện đối tượng và sinh văn bản — việc triển khai từng mô hình trên một container riêng biệt sẽ tốn tài nguyên và khó quản lý. NVIDIA Triton Inference Server giải quyết bài toán này bằng cách cho phép host nhiều mô hình (TensorRT, ONNX, PyTorch, TensorFlow, …) trong một tiến trình duy nhất, chia sẻ GPU và cung cấp API gRPC/HTTP thống nhất. Tại sao chọn Triton? - Hỗ trợ model pipeline (ensemble) và business logic tùy chỉnh qua backend Python. - Quản lý phiên bản mô hình tự động (model version policy). - Dynamic batching và concurrent execution giúp tối ưu throughput. - Tích hợp sẵn với Prometheus/Grafana để giám sát latency, GPU utilization, queue length. Quy trình triển khai thực chiến 1. Chuẩn bị Model Repository - Tạo thư mục cấu trúc: <model_name>/<version>/model.<ext> (ví dụ: resnet50/1/model.onnx). - Viết file config.pbtxt cho từng mô hình: chỉ định input/output, max_batch_size, instance_group (GPU count). 2. Build Docker image - Sử dụng base image nvcr.io/nvidia/tritonserver:<tag>-py3. - COPY model_repository vào /models. - EXPOSE 8000 (HTTP), 8001 (gRPC), 8002 (metrics). 3. Chạy container với GPU docker run --gpus all -p 8000:8000 -p 8001:8001 -p 8002:8002 \ -v $(pwd)/model_repository:/models \ triton-custom \ tritonserver --model-repository=/models --model-control-mode=explicit 4. Kiểm tra health & inference - curl localhost:8000/v2/health/ready - Gửi request qua Python client (tritonclient.http) để đo latency. 5. Cấu hình Dynamic Batching & Instance Group - Trong config.pbtxt: dynamic_batching { preferred_batch_size: [4,8,16] } - instance_group { count: 2 kind: KIND_GPU } để chạy 2 replica song song trên cùng GPU. 6. Giám sát và Alerting - Mở port 8002, scrape bằng Prometheus. - Dashboard Grafana theo dõi: request latency p99, GPU memory, queue time, model load/unload events. - Thiết lập alert khi p99 > 200ms hoặc GPU utilization > 90% trong 5 phút. Mẹo thực tế - Sử dụng model version policy "latest" cho môi trường dev, "specific" cho production để tránh rolling update không mong muốn. - Tách model repository theo team (namespace) và mount read‑only để tăng bảo mật. - Kết hợp với Kubernetes (Triton Operator) để autoscaling dựa trên custom metrics (queue length). - Log request/response payload chỉ khi debug; bật sampling để tránh I/O bottleneck. Kết luận Việc tập trung nhiều mô hình vào một Triton server giúp giảm chi phí phần cứng, đơn giản hóa CI/CD và cung cấp khả năng quan sát thống nhất. Áp dụng các bước trên sẽ cho bạn một hệ thống serving ổn định, mở rộng dễ dàng khi số lượng mô hình tăng lên.