도커로 트리톤 서버 퀵스타트

도커로 트리톤 서버 퀵스타트 (Quickstart)

트리톤 인퍼런스 서버를 처음 배우시는 분이라면, 설치부터 띄우기까지가 사실 궁금한 전부일 텐데요. 가장 쉬운 길은 미리 빌드된 도커 이미지를 쓰는 겁니다. 트리톤은 소스에서 직접 빌드할 수도 있지만(빌드 가이드), 제일 손쉬운 설치·실행 방법은 NVIDIA GPU Cloud(NGC)에서 제공하는 사전 빌드 이미지를 쓰는 거예요. 이 가이드는 모델 레포지토리(model repository)를 만들고, 컨테이너로 트리톤을 띄우고, 실제 추론 요청 하나를 보내기까지 세 단계를 함께 따라 해 봅니다.

  • 모델 레포지토리 만들기
  • 트리톤 실행하기
  • 추론 요청 보내기

출처: 공식문서 - Quickstart

모델 레포지토리 만들기

모델 레포지토리는 트리톤이 서빙할 모델을 놓는 디렉토리예요. 예제 모델 레포지토리가 docs/examples/model_repository에 포함돼 있으니, 이것부터 가져다 쓸게요. 다만 일부 모델 정의 파일은 공개 모델 저장소에 있기 때문에, 제공된 스크립트로 먼저 받아야 해요.

$ cd docs/examples
$ ./fetch_models.sh

트리톤 실행하기

트리톤은 GPU를 사용할 때 최고의 성능을 내도록 최적화되어 있지만, CPU 전용 시스템에서도 동작해요. 두 경우 모두 같은 도커 이미지를 쓰면 됩니다.

GPU가 있는 시스템에서 실행하기

방금 만든 예제 모델 레포지토리로 트리톤을 띄우려면 아래 명령어를 써요. 도커가 GPU를 인식하려면 NVIDIA Container Toolkit이 설치돼 있어야 해요. --gpus=1 플래그는 시스템 GPU 1개를 추론에 쓰도록 트리톤에 제공하라는 뜻입니다.

$ docker run --gpus=1 --rm -p8000:8000 -p8001:8001 -p8002:8002 -v/full/path/to/docs/examples/model_repository:/models nvcr.io/nvidia/tritonserver:<xx.yy>-py3 tritonserver --model-repository=/models

여기서 <xx.yy>는 사용하려는 트리톤 버전이에요(위에서 받은 버전과 맞춰요). 콘솔에는 서버가 시작되며 모델을 로딩하는 로그가 찍히는데, 아래처럼 모델 표가 나오면 트리톤이 추론 요청을 받을 준비가 된 겁니다.

+----------------------+---------+--------+
| Model                | Version | Status |
+----------------------+---------+--------+
| <model_name>         | <v>     | READY  |
| ..                   | .       | ..     |
| ..                   | .       | ..     |
+----------------------+---------+--------+
...
...
...
I1002 21:58:57.891440 62 grpc_server.cc:3914] Started GRPCInferenceService at 0.0.0.0:8001
I1002 21:58:57.893177 62 http_server.cc:2717] Started HTTPService at 0.0.0.0:8000
I1002 21:58:57.935518 62 http_server.cc:2736] Started Metrics Service at 0.0.0.0:8002

모든 모델이 READY 상태면 제대로 로딩된 거예요. 한 모델이라도 로딩에 실패하면 실패 원인이 그 자리에 표시됩니다. 모델이 표에 아예 안 보인다면 모델 레포지토리 경로와 CUDA 드라이버를 확인해 보세요.

CPU 전용 시스템에서 실행하기

GPU가 없는 시스템에서는 --gpus 플래그 없이 실행하면 되고, 나머지는 위와 같아요.

$ docker run --rm -p8000:8000 -p8001:8001 -p8002:8002 -v/full/path/to/docs/examples/model_repository:/models nvcr.io/nvidia/tritonserver:<xx.yy>-py3 tritonserver --model-repository=/models

--gpus를 안 쓰면 GPU가 없으므로, 트리톤은 GPU가 필요한 모델 설정은 로딩할 수 없어요.

트리톤이 잘 돌고 있는지 확인하기

트리톤의 ready 엔드포인트로 서버와 모델이 추론 준비가 됐는지 확인해요. 호스트에서 curl로 서버 상태를 알려주는 HTTP 엔드포인트에 접근하면 됩니다.

$ curl -v localhost:8000/v2/health/ready
...
< HTTP/1.1 200 OK
< Content-Length: 0
< Content-Type: text/plain

HTTP 응답이 200이면 준비 완료, 그 외 코드면 아직 준비가 안 된 상태예요.

추론 요청 보내기

클라이언트 라이브러리와 예제가 든 이미지를 NGC에서 받아요.

$ docker pull nvcr.io/nvidia/tritonserver:<xx.yy>-py3-sdk

<xx.yy>는 받을 버전입니다. 이어서 클라이언트 이미지를 실행해요.

$ docker run -it --rm --net=host nvcr.io/nvidia/tritonserver:<xx.yy>-py3-sdk

그 이미지 안에서 예제 image-client 애플리케이션으로 densenet_onnx 모델을 이용한 이미지 분류를 실행해 보죠. 요청에는 /workspace/images 디렉토리의 이미지를 쓰고, 여기서는 상위 3개 분류를 요청합니다.

$ /workspace/install/bin/image_client -m densenet_onnx -c 3 -s INCEPTION /workspace/images/mug.jpg
Request 0, batch size 1
Image '/workspace/images/mug.jpg':
15.346230 (504) = COFFEE MUG
13.224326 (968) = CUP
10.422965 (505) = COFFEEPOT

더 알아보기 (Learn more)