본문 바로가기
Python/환경 설정

Triton Server 환경 구축하기

by beeny-ds 2024. 2. 20.
Triton Server 는 Deep Learning Model 을 Inference 하는데 GPU 자원을 최적으로 할당하여 서비스를 구축하기 편하게 해주는 환경이다. Torch, Tensorflow 와 같은 다양한 framework 를 지원하기 때문에 여러 종류의 모델을 하나의 Docker container 기반으로 배포할 수 있다. 즉, Triton Server 는 Docker container 기반의 Open-source inference serving software 라 할 수 있다.

본 포스팅에서는 실무자의 입장을 고려하여 Triton Server 환경을 구축하는 방법을 다룬다.
실무자의 상황을 고려하며 Docker Image 관리 및 Container 를 편하게 관리하는 노하우에 대해 소개하겠다.

타겟 독자 : Triton Server 를 활용해서 Deep Learning Model 을 배포하고자 하는 실무자


목차

1. Docker Image 선택

2. Docker Image 관리 노하우

3. Docker container 생성 노하우

4. Docker container 재시작의 필요성 및 노하우


 

1. Docker Image 선택

Docker Image version 은 아래 링크에서 선택하면 된다. (링크에서 Table of Contents 참고)

version 을 선택할 때는 내가 사용하는 서버의 스펙을 확인해야 한다.

어떤 GPU 를 쓰는지, CUDA 버전은 어떠한지, 우분투 버전은 어떤지 등 꼭 확인한 뒤 선택하도록 하자.

 

Docker image 를 선택했다면 아래의 코드로 가져온다.

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

<xx.yy> 는 가져오고 싶은 triton 의 버전을 의미한다.

이미지를 선택했다면 Container 로 구성하면 된다.

 

하지만 이대로 끝나면 다른 블로그 글과 다를 게 없다. 노하우를 제공하겠다.


 

2. Docker Image 관리 노하우

필자가 Docker Image 를 관리하는 이유와 노하우에 대해 공유하겠다.

필자는 bash 파일로 Docker Image 를 관리한다.

 

아래와 같은 bash 파일을 저장하는 방식이다.

# Base image
FROM nvcr.io/nvidia/tritonserver:<xx.yy>-py3

RUN apt-get update

# Python packages for NLP models
RUN pip install --upgrade pip
RUN pip install torch==<x.yy.z>+cu<vvv> torchvision==<x.yy.z>+cu<vvv> torchaudio==<x.yy.z> --extra-index-url https://download.pytorch.org/whl/cu<vvv>
RUN pip install transformers==<x.yy.z> scikit-learn==<x.y.z> sentencepiece==<x.y.zz>

 

이렇게 Docker Image 를 관리하면 협업하는 팀원이나 다른 서버에서 모델을 배포해야 할 일이 생겼을 때 간편하게 Docker Image 를 생성할 수 있다.

가장 중요한 python package 의 버전도 명시하면 버전 충돌 없이 누구나 쉽게 확인하고 구동할 수 있다.

 

Docker Image 를 bulid 할 때도 기존 사용자가 어떤 파일명으로 Image 를 저장했는지 알 수 있다.

docker build -t <image-name>:<version> .

 

물론 Server 간 스펙이 동일해야 하지만 말이다..


 

3. Docker container 생성 노하우

Docker Image 를 저장했다면 다음 Step 은 Docker container 를 생성하는 단계다.

단순히 Image 를 run 해서 Container 를 구동시켜도 된다.

이런 방식으로 말이다.

docker run --gpu=n -p8000:8000 -p8001:8001 -p8002:8002 -v <model_path>:/models <docker image name> --model-repository=/models

 

하지만 SSH 에서 이렇게 바로 Container 를 만들면 다른 사람이 참고할 수 없다.

 

그래서 필자는 이 또한 bash 파일로 구성하여 협업하는 인력과 공유할 수 있도록 구성하였다.

MODEL_REPOSITORY_PATH=`pwd`/repository
MODEL_SOURCE_PATH=`pwd`/modeling

TRITON_MODEL_REPOSITORY_PATH=/models
TRITON_MODEL_SOURCE_PATH=/modeling

docker run \
    --gpus '"device=n"' \
    -p 8000:8000 \
    -p 8001:8001 \
    -p 8002:8002 \
    --name <container-name> \
    -v $MODEL_REPOSITORY_PATH:$TRITON_MODEL_REPOSITORY_PATH \
    -v $MODEL_SOURCE_PATH:$TRITON_MODEL_SOURCE_PATH \
    <image-name>:<version> tritonserver \
    --model-repository=/models

이렇게 구성하면 협업하는 사람에게 공유뿐만 아니라 기술 이전하기에도 용이하다.

 

추가적으로 Triton Server 에서는 repository 에 있는 특정 Deep Learning 모델만 업로드할 수 있는 기능도 있다.

docker run 안에

--model-control-mode=explicit
--load-model=<model folder name 1>
--load-model=<model folder name 2>
...
--load-model=<model folder name n>

 과 같은 방식으로 내가 구동하고자 하는 모델만 업로드 할 수 있다.

 

또한 container 를 생성할 때 shm-size, restart unless-stopped 등 여러 기능을 사용하면 모델 서빙에 용이하다.

 

그렇게 업로드하고 container 를 시작한다.

그리고 log 를 찍어보면 아래 사진과 같이 내가 지정한 모델이 구동되는지 확인할 수 있다.

버전 별로 구동하고 있는 Deep Learning 모델 리스트

log 관련 커멘드 : docker logs -f <container-name>


 

4. Docker container 재시작의 필요성 및 노하우

Docker container 를 재시작해야 할 때가 있다.

  • 새로운 모델을 업로드하고자 할때
  • 업로드된 모델의 version 을 업데이트하고자 할 때
  • 업로드할 모델을 수정하고자 할 때

이때도 bash 파일로 restart 커멘드를 사용하면 편하다.

docker restart <container-name>

 

매번 SSH 에 docker restart 치기 귀찮지 않은가...

이렇게 관리하니까 정말 편하다.

내부 공유 및 기술이전도 차암 좋다. 아주 추천한다.


 

마무리,,

지금까지 Triton Server 를 활용해서 Deep Learning 모델을 Inference 하기 위한 방법을 알아봤다.

다른 블로그 글과의 차이점은 실무자의 입장에서 코드를 어떻게 관리해야 하는지, 왜 그렇게 관리해야 하는지를 명시했다는 점에 있다.

우리 모두는 혼자 일하는 사람이 아니다.

함께 협업해야 하기 때문에 항상 코드 공유, 기술 이전에 신경을 쓰며 일해야 한다.

 

다음 포스팅에서는 Triton Server 를 실무자 입장에서 효율적으로 활용할 수 있는 방법에 대해 다루어보도록 하겠다.

반응형

'Python > 환경 설정' 카테고리의 다른 글

NVIDIA Triton 에 대한 고찰  (1) 2023.10.29
[Setting] jupyter notebook 원격 접속  (0) 2022.08.19

댓글