Triton Inference Server
Triton Inference Server
Triton Inference Server는 AI 추론(inference) 서빙을 간소화하는 오픈소스 추론 서버 소프트웨어예요. 여러 딥러닝·머신러닝 프레임워크로 만든 AI 모델을 어떤 것이든 배포할 수 있게 해 줘요. TensorRT, PyTorch, ONNX, OpenVINO, Python, RAPIDS FIL 등 다양한 프레임워크를 지원하고, 클라우드·데이터센터·엣지·임베디드 디바이스에서 NVIDIA GPU, x86·ARM CPU, AWS Inferentia까지 폭넓게 추론을 돌릴 수 있어요. 실시간(real-time), 배치(batched), 앙상블(ensemble), 오디오/비디오 스트리밍 등 다양한 쿼리 유형에 대해 최적화된 성능을 제공해요. Triton Inference Server는 NVIDIA AI Enterprise의 일부로, 데이터 사이언스 파이프라인을 가속하고 프로덕션 AI의 개발과 배포를 간소화하는 역할을 해요.
출처: 문서
본문
Triton 아키텍처 (Architecture)
Triton의 고수준 아키텍처를 보면, **모델 저장소(Model Repository)**는 Triton이 추론에 사용할 수 있게 만든 모델들을 담는 파일시스템 기반 저장소예요. 추론 요청은 HTTP/REST, gRPC, 또는 C API를 통해 서버에 도착하고, 각 모델에 맞는 **스케줄러(scheduler)**로 라우팅돼요.
Triton은 여러 스케줄링·배칭 알고리즘을 구현하며, 이를 모델별로 따로 설정할 수 있어요. 각 모델의 스케줄러는 선택적으로 추론 요청을 배칭한 뒤, 해당 모델 유형에 맞는 **백엔드(backend)**로 요청을 넘겨줘요. 백엔드는 배칭된 요청에 담긴 입력을 사용해 추론을 수행하고 요청된 출력을 만들어내요. 이 출력은 다시 요청자에게 반환돼요.
Triton은 서버가 서빙하는 모델을 조회·제어할 수 있는 전용 모델 관리 API(HTTP/REST, gRPC, C API)를 제공하고, readiness·liveness 헬스 엔드포인트와 GPU 사용률·처리량·지연시간 메트릭을 제공해 Kubernetes 같은 배포 프레임워크와의 통합을 쉽게 만들어 줘요.
핵심 개념
주요 기능을 정리하면 다음과 같아요.
- 여러 딥러닝·머신러닝 프레임워크 지원: 딥러닝 프레임워크뿐 아니라 RAPIDS FIL 같은 머신러닝 프레임워크도 지원해요.
- 동시 모델 실행 (Concurrent model execution): 서로 다른 모델이나 같은 모델의 여러 인스턴스를 동시에 실행할 수 있어요.
- 동적 배칭 (Dynamic batching): 여러 추론 요청을 모아서 한 번에 처리해 GPU 활용도와 처리량을 높여요.
- 시퀀스 배칭 (Sequence batching)과 암시적 상태 관리: 상태가 있는(stateful) 모델을 위한 기능이에요.
- 백엔드 API (Backend API): 커스텀 백엔드와 전/후처리(pre/post processing) 연산을 추가할 수 있어요. Python 기반 백엔드도 지원해요.
- 모델 파이프라인: 앙상블(Ensembling)이나 비즈니스 로직 스크립팅(Business Logic Scripting, BLS)으로 모델을 연결해 파이프라인을 구성할 수 있어요.
- HTTP/REST·gRPC 추론 프로토콜: 커뮤니티에서 개발한 KServe 프로토콜 기반이에요.
- C API·Java API: 앱에 직접 연결해 엣지 등 인프로세스(in-process) 사례에서 쓸 수 있어요.
- 메트릭: GPU 사용률, 서버 처리량, 서버 지연시간 등을 나타내는 메트릭을 제공해요.
백엔드 (Backends)
Triton은 여러 실행 엔진을 백엔드로 지원해요. 대표적인 백엔드로는 TensorRT, PyTorch, ONNX Runtime, OpenVINO, Python 등이 있어요. 다만 모든 백엔드가 Triton이 지원하는 모든 플랫폼에서 동작하는 건 아니므로, 목표 플랫폼에서 어떤 백엔드를 쓸 수 있는지 Backend-Platform Support Matrix를 확인하는 게 좋아요. 커스텀 백엔드는 C/C++ 또는 Python으로 직접 만들 수도 있어요.
모델 저장소 (Model Repository)
Triton으로 모델을 서빙하는 첫 단계는 하나 이상의 모델을 모델 저장소에 배치하는 거예요. 모델 유형과 활성화하려는 기능에 따라 **모델 설정(model configuration)**을 만들어 줘야 할 수도 있어요. 모델 불러오기/내리기(load/unload)도 명시적으로 관리할 수 있어요.
서빙 방법: 3단계로 모델 서빙하기
Triton으로 모델을 서빙하는 가장 기본적인 방법을 예시로 보여드릴게요. 이 예시는 예제 모델 저장소를 만들고, NGC Triton 컨테이너로 서버를 띄운 뒤, 이미지 분류 추론 요청을 보내는 흐름이에요.
# Step 1: Create the example model repository
git clone -b r26.08 https://github.com/triton-inference-server/server.git
cd server/docs/examples
./fetch_models.sh
# Step 2: Launch triton from the NGC Triton container
docker run --gpus=1 --rm --net=host -v ${PWD}/model_repository:/models nvcr.io/nvidia/tritonserver:26.08-py3 tritonserver --model-repository=/models --model-control-mode explicit --load-model densenet_onnx
# Step 3: Sending an Inference Request
# In a separate console, launch the image_client example from the NGC Triton SDK container
docker run -it --rm --net=host nvcr.io/nvidia/tritonserver:26.08-py3-sdk /workspace/install/bin/image_client -m densenet_onnx -c 3 -s INCEPTION /workspace/images/mug.jpg
# Inference should return the following
Image '/workspace/images/mug.jpg':
15.346230 (504) = COFFEE MUG
13.224326 (968) = CUP
10.422965 (505) = COFFEEPOT
사용 예시와 도구
- 성능 최적화: Performance Analyzer와 Model Analyzer 도구로 모델 설정을 프로파일링하며 최적화할 수 있어요.
- 클라이언트 지원: Python·C++·Java 클라이언트 라이브러리를 제공하고, HTTP/REST·gRPC 프로토콜로 직접 요청을 보낼 수도 있어요. JPEG 이미지 같은 입력 데이터를 추가 메타데이터 없이 HTTP 요청 본문에 그대로 담아 보낼 수도 있어요.
- 확장: 분리형(decoupled) 백엔드·모델, 모델 로드/언로드 시 동작하는 저장소 에이전트(repository agent), Jetson·JetPack, AWS Inferentia 배포 등을 지원해요.
Triton은 Docker 이미지로 빌드·배포하는 방식이 권장되며, Kubernetes·Helm으로도 배포할 수 있어요.