[TorchServe / Docker] Pytorch serving : Docker로 시작하기 1편

반응형

Pytorch로 개발된 모델을 Deploy 하기 위해서는 TorchServe, ONNX Runtime, TensorRT, Amazon SageMaker, Kubeflow 등의 도구들이 있습니다. 오늘은 Torchserve로 pytorch 모델을 Deploy 하는 방법을 소개하고자 합니다.

 

Torchserve를 사용할 때, ‘conda’와 같은 가상 환경(virtual environments)에서 진행하거나, Docker를 사용할 수 있는데, 저는 Docker를 사용하기로 했습니다. Docker를 사용하면 어플리케이션 환경에 구애받지 않고 모델을 배포할 수 있기 때문에 편리합니다.

 

먼저 간단하게 Docker로 Torchserve를 설치하고 Torchserve에서 제공하는 예제 스크립트를 서빙해 보는 실습을 해보겠습니다. 모든 실습은 linux에서 이루어집니다.

 

1. Docker 설치하기

1) 이전 버전이 있다면 이전 버전을 Unistall
$ sudo apt-get remove docker docker-engine docker.io containerd runc
2) apt package Update
$ sudo apt-get update
3) Docker Engine, containerd, Docker Compose Install
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4) Docker가 잘 설치되었는지 hello-word image를 가져와 확인하기
$ sudo docker run hello-world

 

2. Torchserve 설치하기 with Docker

Docker를 성공적으로 설치했으면, torchserve image를 가져오고, torchserve와 torch-model-archiver를 설치합니다.

 

1) Docker로 torchserve 가져오기
sudo docker pull pytorch/torchserve:latest

Torchserve와 Torch-model-archiver를 설치합니다. github에서 clone하거나 pip install를 통해 설치할 수 있습니다.

 

2) Torchserve git clone / pip install
git clone https://github.com/pytorch/serve.git

# or
pip install torchserve

 

3) Torch-model-archiver git clone / pip install
cd serve/model-archiver
pip install .

# or
pip install torch-model-archiver torch-workflow-archiver

 

3. Serving Pytorch model with Docker

Docker를 run 하기 전에 'mar file'을 만들어야 합니다. 'mar file'이란 MAR(Model Archive)의 약자로 Torchserve는 이 형식을 사용하여 모델을 패키지화하고 model store 안에서 versioning을 진행합니다. 따라서 훈련한 모델을 Torchserve에서 액세스 하기 위해서는 모델 체크포인트와 핸들러를 torch-model-archiver를 통해 'mar file'형식으로 변환해야 합니다.

 

https://github.com/pytorch/serve/tree/master/examples 링크에 들어가면 torchserve github에서 제공하는 다양한 examples가 있습니다. 원하는 예시 모델을 다운로드 받아 Handler.py 파일과 체크포인트 파일을 이용해 ‘mar file’을 만들어줍니다.

 

나는 'resnet34'이라는 모델을 사용해 동물 이미지를 classification 하는 예제를 실행했습니다.

 

1) 'mar file' 만들기
torch-model-archiver --model-name resnet34 \                                 
--version 1.0 \
--serialized-file ./resnet34.pt \
--extra-files ./index_to_name.json,./MyHandler.py \
--handler my_handler.py  \
--export-path [내 경로]/model-store -f

 

< 파라미터 정의>

* -- model-name : 모델 이름 정의

* -- version : 버전 정보

* -- serialized-file : 모델 체크포인트 경로

* -- extra-files : 모델을 실행할 때 필요한 모든 파일 경로

* -- export-path : 'mar file'이 저장될 경로

 

'mar file'이 만들어지면 docker로 model serving을 실행합니다.

 

2) docker로 model serve
sudo docker run --rm -it \
-p 3000:8080 -p 3001:8081 \
-v $(pwd)/model-store:[mar file 경로] pytorch/torchserve:latest \
torchserve --start --model-store [mar file 경로] --models resnet34=resnet34.mar

 

3) Prediction
curl -X POST http://127.0.0.1:3000/predictions/resnet34 -T dat.jpg

 

4) Response 확인
{
  "label": "tiger_cat",
  "index": 282
}

 

참고:
https://docs.docker.com/engine/install/ubuntu/

https://github.com/pytorch/serve

반응형

'MLOps' 카테고리의 다른 글

[TorchServe / Docker] Pytorch serving : Docker로 시작하기 2편  (0) 2023.05.22