본문 바로가기
딥러닝/Deploy

[DL] Model Serving in PyTorch

by Sangwook.Aaron.Kim 2020. 2. 2.

Model Serving in PyTorch

 

이 포스트는 PyTorch 공식 블로그의 내용을 해석한 것입니다.

https://pytorch.org/blog/model-serving-in-pyorch/

 

PyTorch

An open source deep learning platform that provides a seamless path from research prototyping to production deployment.

pytorch.org

 

PyTorch 는 연구에서 많이 사용되지만 많은 사람들이 파이토치가 생산단계까지 얼마나 잘 적용되는지에 대해서는 잘 알지 못한다. 이 포스트에서 사람들이 혼란스러워 하는 PyTorch production 에 대해서 명확하게 설명하고자 한다. 대개 사람들이 "생산 단계" 까지 모델을 가져가는 것을 말할 때는 inference 을 의미한다 ( 때로는 evaluation, prediction, serving ). PyTorch 에서 inference 는 다음과 같이 보인다.

 

Python

 

module(input)

 

C ++

 

at::Tensor output = module->forward(inputs).toTensor();

 

우리 Facebook 에서는 PyTorch 로 수백 수십건의 inference 를 매일 수행하기 때문에 가능한 효율적으로 만들려고 많은 노력을 기울였다.

Serving Strategies

자세히 보면 model 을 inference 할 때 단순히 inference 를 하는 것이 전체 이야기가 아니다. 실제 기계 학습 시스템을 동작시킬때는 REPL ( read-eval-print loop ) 이나 Jupyter notebook 에서 작동을 시키는 것 대신에 더 큰 application 에 통합하여 사용하여야 한다. 당신의 목적에 따라서 다음 방법 중 하나를 취하면 된다.

Direct Embedding

모바일과 같은 애플리케이션 환경에서는 모델보다 더 커다란 프로그램의 한 부분으로서 모델을 동작시킨다. 이건 단순히 애플리케이션 뿐만 아니라 robotics 나 dedicated devices 에서도 이와 같이 동작한다. Code 단에서의 model inference 는 위에서 적어 놓은 코드와 정확하게 같은 방식으로 동작한다. 가장 큰 우려는 이와 같은 환경들에서는 python interpreter 가 없다는 것이다. 이러한 이유 때문에 PyTorch 로Python 이 아닌 C++ 로 model 을 실어서 동작시키는 것이 가능하다.

Model microservices

PyTorch 모델을 서버 단에서 사용하거나 여러 개의 모델을 관리할 경우, 각각 모델을 개별적으로 분리하여 서비스를 제공하거나, Docker 와 같이 packaging mechanism 을 활용하여도 된다. 이렇게 되면 몇몇 서비스를 통해 network 로 접근 가능하게 되는데 이 때 HTTP 를 통한 JSON 이나 gRPC 같은 RPC 기술이 사용된다. 이 접근법의 특징은 단일 endpoint 를 정의하여 model 을 불러온다는 점이다. 이렇게 되면 어떠한 시스템이든 상관없이 이미 사용하고 있는 관리 방법으로 모델 관리가 가능하다.

Model servers

또 다른 방법으로는 model 서버를 이용하는 것이다. 모델을 관리하고 옮기는 전용 애플리케이션이다. 이 방식은 여러 개의 모델을 업로드 하고 서로 다른 endpoint 를 설정하여 서로 다른 prediction 을 할 수 있다. 보통 이러한 시스템들은 모델을 관리하거나 옮기는데 필요한 다른 기능들을 포함한다. 평가 지표, 시각화, 데이터 전처리 등등의 것들을 포함한다.

Evolving Patterns

Model Serving 을 위한 시스템의 Design pattern 들은 끊임없이 진화하고 있다. 더 많은 내용은 아래의 링크를 참조하면 된다. https://www.manning.com/books/machine-learning-systems

Serving PyTorch Models

PyTorch 사용자라면, 모델의 production 을 위해서 어떠한 방식을 사용해야 할까?

 

Mobile 이나 robot 을 활용한 embedded system 환경이라면 애플리케이션에 직접적으로 embedding 하는 것이 좋은 선택이다. Mobile 에 한정해서 말하면, ONNX export functionality 을 활용할 수 있다. ONNX 는 하지만 더 큰 PyTorch 프로젝트의 모든 기능을 제공하지 않는다는 한계가 있다. 다음과 같은 튜토리얼 링크를 활용하여 mobile 에서 ONNX 를 활용하여 PyTorch model 을 서빙하는 방식을 확인할 수 있다.

 

[ 링크 : https://pytorch.org/tutorials/advanced/super_resolution_with_caffe2.html ]

 

로봇과 같은 또 다른 embedded 시스템은 C++ API 를 활용한 model inference 방법을 확인하여야 한다. [ Link ]

 

댓글