Sangmun

deep learning inference 서버 구축하기 - 1 본문

개발/numble 프로젝트

deep learning inference 서버 구축하기 - 1

상상2 2023. 5. 15. 13:01

1.  Intro

넘블에서 진행하는 프로젝트로 FastAPI를 활용하여 딥러닝 모델 추론결과를 return 해주는 서버를 production 기준에 맞추어서 구축해 보는 프로젝트이다.

 

프로젝트에서 주요하게 요구하는 사항은

* FastAPI를 사용할것

* v2 inference protocol의 기준에 맞춰 구현할 것

* Torchserve, Kserve와 같은 딥러닝 서빙 프레임워크를 사용할 것 등이다.

 

그 외 코드의 가독성이 좋은지 CI/CD가 구축되어 있는지도 주요한 평가 사항이다.

위 기준을 충족하여 일정 수준 이상이 되면 프로젝트를 진행하시는 분께서 직접 코드 리뷰를 해주신다고 한다.

기왕 하는 거 코드 리뷰까지 받을 수 있도록 열심히 해봐야겠다.

 

2. torchserve

torchserve는 pytorch 오픈소스 프로젝트의 일환으로 모델 배포 프로세스를 단순화하는 모델 서버이다.

즉, 프로덕션에서 머신러닝 추론을 제공하도록 특별히 설계된 상용 웹 응용 프로그램으로 모델 서버를 사용하면 하나 이상의 모델을 쉽게 로드할 수 있으므로 확장 가능한 웹 서버가 지원하는 추론 API가 자동으로 생성된다.

 

https://github.com/pytorch/serve

 

GitHub - pytorch/serve: Serve, optimize and scale PyTorch models in production

Serve, optimize and scale PyTorch models in production - GitHub - pytorch/serve: Serve, optimize and scale PyTorch models in production

github.com

내가 torchserve를 사용하기로 한 것은 단순히 torchserve document에 huggingface를 이용하는 예제가 잘되어서 있어서였다.

kserve는 kubernetes를 이용해야 되는 것 같은데(자세히는 안 읽어봤다.) 더 복잡해질 것 같아서 우선 torchserve를 택했다.

 

3. v2 inference protocol

이전에 모델 추론 서버를 구축한다면 그냥 단순히 FastAPI 서버를 띄우고 post request로 받은 데이터를 output = model(*input) 하는 형식으로 추론을 한 결과를 return 해주었는데 이런 허접한 방식 말고 좀 더 체계화된 서빙 프로토콜이 있는 것을 처음 알게 되었다.

 

v2 inference protocol은 예측/추론 api로 머신러닝 프레임워크나 모델서버에 제약되지 않은 규약이다. 고성능과 사용하기 편한 유저 케이스를 지원한다고 한다.

v2 inference protocol을 따르기로 한 서버는 아래와 같이 기술된 api들을 구현해서 서버, 모델에 대한 메타데이터 및 추론 결과를 제공해야 한다. HTTP와 GRPC를 둘 다 지원한다.

Health:

GET v2/health/live GET v2/health/ready GET v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/ready

Server Metadata:

GET v2

Model Metadata:

GET v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]

Inference:

POST v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/infer

 

자세한 사항은 아래 사이트에 기술되어 있다.

https://kserve.github.io/website/0.8/modelserving/inference_api/

 

V2 Inference Protocol - KServe Documentation Website

Predict Protocol - Version 2 This document proposes a predict/inference API independent of any specific ML/DL framework and model server. The proposed APIs are able to support both easy-to-use and high-performance use cases. By implementing this protocol b

kserve.github.io

 

4. 아키텍처

나의 이번 프로젝트의 주요한 목적은 모델 서빙 프레임워크를 사용해 보는 것, v2 inference protocol을 따르는 API 서버를 구축하여 dockerize 하는 것임으로 아키텍처는 복잡하게 생각하지 않기로 하였다. API 서버와 모델 서빙 서버가 같은 인스턴스에 있는 형태로 구축하여 네이버 클라우드에서 배포를 하였다.

출처 : https://github.com/mercari/ml-system-design-pattern/blob/master/Serving-patterns/Web-single-pattern/design_ko.md

해당 디자인 패턴의 정식적인 명칭은 Web-single-pattern이라고 한다. 위 부분에서 로드밸런서도 빼고 구현을 하였다.

 

2편에 계속..

'개발 > numble 프로젝트' 카테고리의 다른 글

deep learning inference 서버 구축하기 - 2  (0) 2023.05.15
Comments