Triton 추론 프로토콜 — HTTP·gRPC·Python API

Triton 추론 프로토콜 — HTTP·gRPC·Python API

Triton은 클라이언트가 추론을 요청하는 네트워크 프로토콜로 HTTP/1.1과 gRPC를 기본 제공하고, Python 클라이언트 라이브러리로 편리하게 사용할 수 있어요. 기본 포트는 HTTP 8000, gRPC 8001, 메트릭 8002입니다.

출처: https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/client_guide/instant_client.html

Python 클라이언트

tritonclient 패키지의 InferenceServerClient를 쓰면 추론 요청을 간단히 보낼 수 있어요.

import tritonclient.http as httpclient
import numpy as np

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

results = client.infer(
    model_name="densenet_onnx",
    inputs=[httpclient.InferInput("input", [1, 3, 224, 224], "FP32")],
)
  • InferInput(name, shape, datatype): 입력 텐서를 정의해요. set_data_from_numpy()로 데이터를 넣습니다.
  • infer(): 모델 이름과 입력을 넘겨 추론을 수행해요. 반환된 InferResult에서 as_numpy(name)으로 출력을 가져옵니다.

HTTP 추론 요청

HTTP REST API로도 추론을 보낼 수 있어요. 정규화된 모델명·버전으로 POST /v2/models/{name}[/versions/{version}]/infer에 JSON을 보냅니다.

{
  "inputs": [{"name": "input", "shape": [1, 3, 224, 224], "datatype": "FP32", "data": [ ... ]}],
  "outputs": [{"name": "output", "shape": [1, 1000], "datatype": "FP32"}]
}

gRPC

tritonclient.grpc를 쓰면 gRPC 프로토콜로 더 효율적인 바이너리 직렬화를 이용할 수 있어요. 인터페이스는 HTTP 클라이언트와 거의 동일합니다.

import tritonclient.grpc as grpcclient

client = grpcclient.InferenceServerClient(url="localhost:8001")

서버 준비·메타데이터 확인

클라이언트는 서버가 준비됐는지, 모델이 로드됐는지 확인할 수 있어요.

print(client.is_server_ready())
print(client.get_model_metadata(model_name="densenet_onnx"))
  • is_server_ready(): /v2/health/ready에 대응.
  • get_model_metadata(): 모델 이름·버전·입출력 정보를 반환해요.

더 알아보기