Skip to the content.

Serving template pattern

Usecase

Architecture

Serving template pattern은 예측 서비스의 코드나 인프라 구성, 배포 방식을 모듈화하고 재사용 가능한 템플릿으로 준비하는 패턴입니다. 예측 서비스의 방식을 모듈화 하면 개발 효율성 및 배포, 여러 서빙 간에 지식 공유 등의 이점을 얻을 수 있습니다. 여러 머신러닝 예측 모델이 실행되는 시스템을 개발할 때, 서빙 모델이 각각 다른 아키텍처를 가지면 팀의 생산성이 저하될 수 있습니다. 모든 모델들이 각각의 인터페이스, 라이브러리, OS, 칩셋을 사용하는 경우 이 문제가 발생할 수 있지만 공통화할 수 있는 경우(예를 들어 파이썬 3.x, 우분투 18점대, x84_64 CPU, Nginx 프록시, Rest 서버, scikit-learn, Keras 등) 이런 요소를 재사용 가능한 템플릿으로 만드는 것은 좋은 방법입니다. 추가로, 전처리와 예측을 호출하기 위한 인터페이스를 공통으로 만들면 모델 파일을 예측 서버로 변경하는 것만으로 예측 서버가 되는 이상적인 템플릿을 만들 수 있습니다.

이 패턴을 사용하면 공통 구성 요소를 모듈화하고 재사용할 수 있습니다. JSON 또는 YAML 파일에서 모델별 파라미터를 변경해 모델을 배포하는 것이 이상적인 템플릿입니다. 이렇게 표준화할 수 없는 경우에도 모델별 전처리 및 예측 외의 코드를 모듈화해 코드 양을 줄일 수 있습니다. 또한 모니터링, 경고, 로깅, 권한 부여, 인증 및 보안을 포함한 인프라 계층을 표준화할 수 있습니다. 회사 전체의 공통 템플릿을 제공하는 것은 어려울 수 있지만, 단계별 표준화를 고려할 수 있습니다. 예를 들어, 팀을 위한 전사적 비머신러닝 미들웨어 및 프로젝트 내 모델을 제외한 기타 구성 요소에 대한 인프라를 표준화할 수 있습니다.

프러덕션 서빙용 템플릿 버전 업데이트 정책을 고려해야 합니다. 이전 버전과 호환성을 갖춘 템플릿을 개발해야 합니다. 서비스 수준에 따라 서빙을 업데이트할 수 있습니다. 배치가 실행되지 않는 시간대에 배치 서버를 업데이트할 수 있습니다. Online AB test pattern을 사용해 REST 서버와 같은 온라인 서비스를 업데이트할 수 있습니다. 이전 버전과 호환성을 유지할 수 없는 경우 프러덕션으로 출시하기 전에 전체 통합 테스트를 실행해야 할 수 있습니다.

아래에는 인프라 계층에서 머신러닝 모델에 이르기까지 단계별 템플릿 레벨이 나열되어 있습니다.

Diagram

diagram

Pros

Cons

Needs consideration

Sample

https://github.com/shibuiwilliam/ml-system-in-actions/tree/main/chapter4_serving_patterns/template_pattern