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를 생성해주었다.
※ 참고 자료
- Torch Model archiver for TorchServe https://github.com/pytorch/serve/tree/master/model-archiver#creating-a-model-archive
- TorchServe 공홈 https://pytorch.org/serve/
'Dev Notes > ML' 카테고리의 다른 글
[debug] tokenizer special token 추가 시 임베딩 사이즈 조절 하기 (0) | 2024.07.30 |
---|---|
Deepspeed 배치 사이즈 관련 파라미터 정리 (0) | 2023.08.20 |
머신러닝 프로덕션 코드를 구성하는 방법 (0) | 2023.06.25 |
C++에서 ONNX runtime 사용하기 (0) | 2023.06.11 |
[MLops 기초] 프로덕션 환경에서의 머신러닝 시스템이란? (0) | 2023.04.18 |