rueki

Week11 Deployment & Monitoring part1 본문

MLOPS/full stack deep learning review

Week11 Deployment & Monitoring part1

륵기 2021. 11. 18. 19:48
728x90
반응형

1. 모델 배포

모델 배포에는 세 가지 종류의 배포 방식이 있다.

- Client-side : 로컬 검퓨터에서 모델을 올려 동작하는 방식 (ex. 임베디드 시스템)

- Server-side : 모델을 서버단에 올려서 배포하는 방식

                   재사용성이 좋지만, 모델의 유지보수 및 서버와의 호환성과 같은 문제로 다루기 어려운 점들이 있다.-

                   모델이 큰 경우에는 서버 리소스까지 잡아먹을 수가 있다.

- Database : 데이터베이스에 직접적으로 연결해서 데이터를 다루기엔 용이함. 상대적으로 input이 작을 때 사용하기

                 적절함.

 

 

Model-as-service 

: Server side에서 연장된 개념으로, 서버 안에 모델을 관리하는 것이 아니라 분리해서 독립적으로 관리하게 된다.

그렇게 되면 클라이언트, 서버 둘다 모델에 상호작용이 가능하게 된다. 이 서비스를 통해서 위의 3가지 배포 방식의 단점들을 어느정도 다 커버할 수 있다.

 

2. 모델 서비스 구축

- Rest API

Representational State transfer의 약자로서, Resource의 상태를 주고 받는 것으로 요약할 수가 있다.

HTTP URI로 자원 명시하고, 해당 자원에 대해서 CRUD(create, read, update, delete)를 할 수 있는 API이다.

웹에는 보통 어느정도 정해진 규약 및 포멧이 있는데 아직 ML 시스템에는 표준화가 되지는 않았따.

 

- Dependency Management

ML product에는 code와 모델 가중치가 서로 호환이 되어야 동작하게 되는데, 서버에 올릴 때 이게 맞지 않게 되면

에러를 내뱉을 것이다. dependency에 따라 성능이 다르게 나올 수도 있기에 지속적으로 업데이트를 하거나 관리를 해줘야하는데 이러한 부분때문에 컨테이너를 통해서 종속성을 맞추곤 한다.

컨테이너에 대해서 대표적으로 많이 쓰는게 Docker이다. 도커 컨테이너는 하나의 독립된 application으로 동작한다는 것이 가장 큰 특징인데 하나의 host에서도 독립된 여러개의 컨테이너를 사용할 수 있기에 통합된 시스템에서 각 중요 부분을 컨테이너화 해서 관리함으로써 dependency 관리 뿐만 아니라 resource 관리까지 용이하다.

다수의 컨테이너를 관리하는 것은 Container Orchestration을 통해 하게 되는데 주로 많이 쓰는 것이 쿠버네티스 + 도커조합이다.

 

- Performance optimization

single machine에서 모델 서비스를 제공할 때 고려할 포인트 몇 가지가 있다.

 

* GPU : GPU가 있으면 연산 성능이 훨씬 좋기에 고성능의 서비스를 제공할 수 있으나 이를 사용하는 데에 필요한 cost가 높다는 단점이 있다.

 

* Concurrency : 서로 다른 CPU 코어에 모델을 복사해서 따로 실행하는 방법

 

* Model distillation : 큰 모델로부터 학습된 것들을 작은 모델로 transfer하는 것

                            흔히 Teacher - student로 일컫음

                           실제로 아주 좋은 성능을 내는 모델이라도 할지라도, 큰 사이즈로 인하여 실제 서비스에는

                            적합하지 않을 수 있기에 이와 같은 방법을 사용.

 

* Quantization : 모델 연산 할 때의 값 표현을 바꿔서 연산 실행하는 방법 (ex. float32 -> float16)

 

* Caching : input에 대해서 캐싱을 함에 따라 자주 사용되는 입력에 대한 캐시값을 확인해서 호출함.

                모든 데이터를 계속해서 호출할 필요가 없어짐.

 

* Batching : 데이터를 병렬로 처리할 때 성능이 더 좋을 때가 있다.

 

* Sharing the GPU : 단일 GPU를 사용하는 것보다 여러개의 GPU를 사용함에 따라 연산이 더 좋을 수가 있음.

 

 

- Edge prediction

모델 weight를 client device로 보내서 사용함에 따라 client가 모델을 직접적으로 사용 가능.

그러나 resource 제한이 있으며, 모델을 지속적으로 관리하기 힘들다.

 

 

 

 

 

 

 

 

728x90
반응형
Comments