먼저 도커 설치가 필요하다면 아래 글 참고
2023.05.22 - [Dev] - [Linux] Docker 설치하기 - 도커에서 TorchServe 모델 배포 (1)
이번 글에서는 .mar 파일 생성까지 다룰 예정
순서는 아래와 같다
1. 도커에 TorchServe 설치
2. Handler 작성
3. .mar 파일 생성
0. MAR 파일이란?
Model Archive 의 줄임말로 TorchServe에서는 .mar 파일을 사용하여 파이토치 모델을 배포한다.
.mar 파일은 모델의 가중치, 구조, 메타데이터 등을 포함한 모든 정보를 담고 있다.
1. 도커에 TorchServe 설치
가장 쉬운 방법은 이미지를 pull 하는 방법이다.
docker pull pytorch/torchserve:latest
이 커맨드를 사용해서 가장 최신의 torchserve 이미지를 받아올 수 있다.
만약 별도로 필요한 태그가 있다면 여기에 들어가서 확인하면 된다.
2. Handler 작성
핸들러(Handler)란 HTTP 요청을 받아 모델을 통해 예측을 수행하는 역할을 담당하는 파일이다.
TorchServe에서는 기본으로 4가지의 핸들러를 제공해준다. (다만 batching requests는 지원하지 않음)
1. image_classifier
2. object_detector
3. text_classifier
4. image_segmenter
필요에 맞게 기본 핸들러를 사용하거나 커스텀 핸들러를 작성해서 사용할 수 있다.
커스텀 핸들러는 3가지 function 이 포함된 하나의 Class 이다.
3가지 function은 다음과 같다.
1. preprocess
2. inference
3. postprocess
BaseHandler를 subclassing 하여 커스텀 핸들러를 작성할 수도 있다.
MyHandler.py
from ts.torch_handler.base_handler import BaseHandler
class MyHandler(BaseHandler):
def preprocess(self, requests):
```
requests 받은 데이터의 전처리
```
pass
def inference(self, x):
```
.preprocess에서 받은 데이터로 인퍼런스
```
pass
def postprocess(self, preds):
```
.inference에서 받은 데이터로 결과 후처리 후
array로 반환
```
return ['ok']
여기서 꼭 기억해야 할 점은, Torchserve는 array를 리턴 받는다는 것
이렇게 작성한 커스텀 핸들러를 호출하는 파이썬 파일이 하나 더 필요하다.
my_handler.py

from MyHandler import MyHandler
_service = MyHandler()
def handle(data, context):
if not _service.initialized:
_service.initialize(context)
if data is None:
return None
data = _service.preprocess(data)
data = _service.inference(data)
data = _service.postprocess(data)
return data
3. .mar 파일 생성
먼저 torch-model-archiver를 설치
git clone https://github.com/pytorch/serve.git
cd serve/model-archiver
pip install .
설치 후 아래 명령어를 입력하여 .mar 파일을 생성하면 된다.
torch-model-archiver --model-name {my model name} \
--version {my model version} \
--serialized-file {saved model path} \
--extra-files MyHandler.py, {any necessary files, seperated by commas} \
--handler my_handler.py \
--export-path {where .mar file will be saved}
--model-name : 내가 지정할 모델 명
--version : 모델 버전
--serialized-file : 저장된 모델 .pt 파일 경로
--export-path : .mar 파일을 저장할 경로
--handler : 디폴트 핸들러 또는 커스텀 핸들러 경로
--extra-files : 위 핸들러가 사용하는 모든 파일의 경로
이렇게하면 내가 지정한 모델 이름의 .mar 파일이 생성된다
끝!
'Dev' 카테고리의 다른 글
[Linux] requirements.txt 생성하기 (0) | 2023.06.05 |
---|---|
[Linux] Nvidia-Docker 설치하기 - 도커에서 TorchServe 모델 배포 (3) (0) | 2023.05.31 |
[Linux] Docker 설치하기 - 도커에서 TorchServe 모델 배포 (1) (0) | 2023.05.22 |
[Linux] Ubuntu 22.04 원격 리눅스 서버에서 파일 또는 폴더 가져오기 (0) | 2023.05.10 |
[Linux] Ubuntu 22.04 디렉토리 이름 변경하기 (0) | 2023.05.08 |