본문 바로가기
Dev Notes/ML

Torchserve 사용 방법과 경로 설정

by yooonlp 2023. 4. 20.

 

Torchserve는 프로덕션 환경에서 Pytorch 모델을 쉽고 빠르게 서빙하고 최적화하기 위한 툴이다. 본 포스트에서는 도커나 아나콘다 등의 환경은 배제하고 torchserve라는 툴의 원론적인 사용 방법과 문제가 생겼었던 경로 설정에 대해서 정리해보고자 한다. 

 

 

 

1. 준비물

  • Model artifacts
    • .bin,.pt,.pth 등의 모델 가중치 파일
    • config.json와 같은 형태의 모델 아키텍쳐 정보
    • model.save_pretrained('pytorch_model.bin'), torch.save(model.state_dict(), PATH) 등의 방법으로 저장한다.
  • Tokenizer artifacts
    • tokenizer_config.json, vocab.json, merge.txt,.. 등의 토크나이저 관련 파일들
    • tokenizer.save_pretrained(PATH) 등의 방법으로 저장하면 발생하는 파일들이다.
  • handler file (*.py)
    • torchserve에서 커스텀한 inference logic을 다루는 파일
    • 토치서브 공홈에서 제공되는 샘플 핸들러들이 있다.

 

 

2. 패키지 설치

pip install torchserve torch-model-archiver torch-workflow-archiver

 

 

 

3. MAR file 만들기

Torchserve의 중요한 기능은 모든 모델의 결과물(체크포인트 파일, 모델 정의 파일, 모델을 돌리는 데 필요한 여타 부산물들)을 한 개의 모델 아카이브 파일(*.mar)로 만드는 것이다. 만들어진 .mar 파일은 Torchserve 서버의 CLI에서 모델을 서빙할 때 사용한다.

torch-model-archiver --model-name model1 --version 1.0 \
		     --serialized-file ./model_and_tokenizer/pytorch_model.bin \
		     --extra-files ./model_and_tokenizer/ \ # 디렉토리 OR 파일 상관없음 
		     --handler ./model_and_tokenizer/model1_handler.py  \
		     --export-path ./model-store -f

뒤에서 torchserve를 실행하면 CLI의 $TEMP 경로로 지정된 곳에 models 폴더를 만든다. 또한, 각 옵션으로 넣었던 것들을 모두 복사해서 models/[임의숫자] 폴더 밑에 넣고, 서빙 종료 시 해당 폴더가 삭제된다. 다른 옵션들은 비교적 명확한데, 헷갈렸던 것은 extra-files 옵션이었다. extra-files에는 모델 서빙에 필요한 artifact들(모델 아키텍쳐, 토크나이저, infer에 필요한 모든 파일들)의 경로를 넣어주어야한다. 

 

뒤에서 Torchserve를 실행하면 tmp 폴더 밑에 위와 같이 폴더가 생기게 된다. 

models
└── xxxxxxxxxxxxxx
    ├── MAR-INF
    │   └── MANIFEST.json
    ├── pytorch_model.bin
    ├── [new_path 밑에 있던 파일들]
    └── model1_handler.py

extra-files 옵션에 디렉토리를 넣는다면 디렉토리 자체가 들어가는 것이 아닌 디렉토리 하위의 파일들을 모두 복사해서 serialized-file, handler.py와 같은 곳에 위치시키기 때문에 이를 주의해야 한다. 본인은 handler에서 import 해오는 디렉토리가 있었기 때문에, 해당 디렉토리를 new_path로 감싸주고, 이를 extra-files의 옵션으로 넣었다. 

 

torch-model-archiver 를 실행하면, export-path 밑에 .mar 파일이 생긴다. 

 

 

 

3. torchserve 실행

*config.properties 파일이 있어야 한다.

export TEMP=[원하는 TEMP 경로]
torchserve --start --model-store ./model-store --models model1=model1.mar >> serve.log&

본인은 현재 폴더 밑에 tmp를 생성해주었다. 

 

 

 

 

※ 참고 자료