TorchServe는 PyTorch 모델을 프로덕션 환경에 배포하기 위한 툴이다. 이를 통해 모델을 REST API 형태로 제공할 수 있으며, 모델 추론을 위한 서버를 쉽게 구성할 수 있다. TorchServe는 확장성이 뛰어나고, 다양한 모델 서빙 기능을 지원하며, 실시간 추론과 배치 추론 모두를 처리할 수 있다.
우선 TorchSerrve 상세한 사용법은 아래 공식 git 링크에 잘 나와 있다.
환경셋팅과 간단한 모델로 배포까지 해보자.
1. 가상환경 생성
윈도우 wsl 활용하여 가상환경을 생성
python3 -m serveTest venv
생성 후 가상환경 접속
source serveTest/bin/activate
2. TorchServe 설치
우선 맨위에 git 링크에서 그대로 clone 을 진행 후 아래와 같이 설치하면 된다.
# Install dependencies
# cuda is optional
python ./ts_scripts/install_dependencies.py --cuda=cu121
# Latest release
pip install torchserve torch-model-archiver torch-workflow-archiver
# Nightly build
pip install torchserve-nightly torch-model-archiver-nightly torch-workflow-archiver-nightly
TorchServe 버전 확인
torchserve --version
3. pt 파일을 mar 파일로 생성
TorchServe에서 모델을 배포하려면 .mar 형식의 모델 아카이브 파일이 필요하다.
모델 파일 준비 먼저, PyTorch 모델 파일(.pt 또는 .pth)과 handler 파일을 준비한다. handler는 모델을 어떻게 추론할지 정의하는 코드다.
resnet18.pth 파일 다운로드
wget https://download.pytorch.org/models/resnet18-f37072fd.pth -O resnet18.pth
index.json 파일 다운로드
wget https://raw.githubusercontent.com/pytorch/serve/master/examples/image_classifier/index_to_name.json
모델 아카이브 파일(.mark) 생성
torch-model-archiver \
--model-name resnet18 \
--version 1.0 \
--serialized-file resnet18.pth \
--handler image_classifier \
--extra-files index_to_name.json
4. mar 파일을 torch serve로 스타트
TorchServe를 사용해 .mar 파일을 실행하려면 아래와 같은 단계를 따라야 한다. 특히 --disable-token-auth 옵션은 토큰 인증을 비활성화하는 데 사용되며, 로컬 개발 환경에서 편리하게 활용할 수 있다. 자세히 설명하면 다음과 같다.
1) model_store 디렉토리 생성 후 이동
model_store는 .mar 파일을 저장하는 디렉토리이다. TorchServe는 모델을 로드할 때 이 디렉토리를 참조한다.
mkdir model_store
mv resnet18.mar model_store/
2) TorchServe 실행 명령어
다음 명령어로 TorchServe를 시작한다.
torchserve --start --model-store model_store --models resnet18=resnet18.mar --disable-token-auth
명령어의 각 옵션에 대한 설명은 다음과 같다.
- --start : TorchServe 서버를 시작하는 옵션이다.
- --model-store model_store : model_store 디렉토리를 TorchServe가 모델을 검색하는 경로로 지정한다.
- --models resnet18=resnet18.mar : resnet18이라는 이름으로 resnet18.mar 모델을 로드한다. resnet18은 모델을 호출할 때 사용할 이름이다.
- --disable-token-auth: 토큰 인증을 비활성화한다. 이 옵션은 인증 없이도 서버에 요청을 보낼 수 있도록 설정하며, 주로 로컬 개발 환경에서 사용된다.
5. 정상 실행 확인
TorchServe가 시작되면, 모델이 정상적으로 로드되었는지 확인할 수 있다.
서버 상태를 확인하려면 다음 명령어를 사용한다.
curl http://127.0.0.1:8080/ping
6. TorchServe로 이미지 테스트하기
TorchServe로 모델을 서빙한 후, 실제 이미지를 입력으로 테스트하여 모델의 추론 결과를 확인할 수 있다. 이번에는 샘플 이미지를 사용해 모델이 해당 이미지를 어떻게 분류하는지 살펴보자.
1) 이미지 다운로드
테스트에 사용할 이미지를 다운로드한다. PyTorch Hub에서 제공하는 샘플 이미지를 활용한다.
wget https://raw.githubusercontent.com/pytorch/hub/master/images/dog.jpg
2) 모델에 추론 요청
이미지를 모델에 입력으로 제공하여 추론 결과를 확인한다.
TorchServe 서버가 실행 중이어야 하며, 서버 엔드포인트는 기본적으로 http://127.0.0.1:8080이다.
아래 명령어로 이미지를 POST 요청으로 모델에 전송한다.
curl -X POST http://127.0.0.1:8080/predictions/resnet18 -T dog.jpg
3) 예측 결과 확인
위 명령어를 실행하면 모델의 추론 결과가 JSON 형식으로 출력된다. 아래는 예측 결과의 예시이다.
{
"Samoyed": 0.8847898840904236,
"Arctic_fox": 0.045727893710136414,
"white_wolf": 0.04419652372598648,
"Pomeranian": 0.005627333652228117,
"Great_Pyrenees": 0.004654731135815382
}
- Samoyed: 모델은 입력 이미지가 Samoyed(사모예드)일 확률이 88.47%라고 예측하였다.
- Arctic_fox, white_wolf: 그 외 북극여우, 흰늑대와 같은 다른 클래스의 확률도 낮게 계산되었다.
이처럼 모델은 가장 높은 확률값을 가지는 클래스를 최종 예측값으로 반환한다.
위 과정을 통해 TorchServe로 서빙된 모델을 사용해 이미지를 테스트할 수 있다.
추론 결과는 JSON 형태로 반환되며, 이를 기반으로 모델의 성능을 평가하거나 프로덕션에 활용할 수 있다. TorchServe를 활용하면 간단한 명령어로 추론 결과를 확인할 수 있어 배포 및 테스트 과정이 매우 편리하다.
모델 확장자가 여러가지 있는데, .mar, .pt, .pth, .onnx 차이점에 대해서 다음에 알아보자!
감사합니다.
끝.
'딥러닝 (Deep Learning) > [07] - Serving' 카테고리의 다른 글
딥러닝 파일 확장자의 차이점 *.mar, *.pt, *.pth, *.onnx (3) | 2024.12.19 |
---|---|
Model Serving 패턴 종류 (3) | 2024.12.09 |
Model Serving 이란?? (2) | 2024.12.09 |