중요한건 꺾이지 않는 맥북
모델 서빙을 하기 위한 필수 요소 및 빅테크 기업들의 기술 본문
2021년 5월에 발표된 구글의 white paper : Practitioners guide to MLOps: A framework for continuous delivery and automation of machine learning에서는 MLOps의 핵심 기능들로 다음과 같은 것들을 언급하였습니다.
1. Experimentation
실험(Experimentation)은 머신러닝 엔지니어들이 데이터를 분석하고, 프로토타입 모델을 만들며 학습 기능을 구현할 수 있도록 하는 다음과 같은 기능을 제공합니다.
- 깃(Git)과 같은 버전 컨트롤 도구와 통합된 노트북(Jupyter Notebook) 환경 제공
- 사용한 데이터, 하이퍼 파라미터, 평가 지표를 포함한 실험 추적 기능 제공
- 데이터와 모델에 대한 분석 및 시각화 기능 제공
2. Data Processing
데이터 처리(Data Processing)는 머신러닝 모델 개발 단계, 지속적인 학습(Continuous Training) 단계, 그리고 API 배포(API Deployment) 단계에서 많은 양의 데이터를 사용할 수 있게 해 주는 다음과 같은 기능을 제공합니다.
- 다양한 데이터 소스와 서비스에 호환되는 데이터 커넥터(connector) 기능 제공
- 다양한 형태의 데이터와 호환되는 데이터 인코더(encoder) & 디코더(decoder) 기능 제공
- 다양한 형태의 데이터에 대한 데이터 변환과 피처 엔지니어링(feature engineering) 기능 제공
- 학습과 서빙을 위한 확장 가능한 배치, 스트림 데이터 처리 기능 제공
3. Model training
모델 학습(Model training)은 모델 학습을 위한 알고리즘을 효율적으로 실행시켜주는 다음과 같은 기능을 제공합니다.
- ML 프레임워크의 실행을 위한 환경 제공
- 다수의 GPU / 분산 학습 사용을 위한 분산 학습 환경 제공
- 하이퍼 파라미터 튜닝과 최적화 기능 제공
4. Model evaluation
모델 평가(Model evaluation)는 실험 환경과 상용 환경에서 동작하는 모델의 성능을 관찰할 수 있는 다음과 같은 기능을 제공합니다.
- 평가 데이터에 대한 모델 성능 평가 기능
- 서로 다른 지속 학습 실행 결과에 대한 예측 성능 추적
- 서로 다른 모델의 성능 비교와 시각화
- 해석할 수 있는 AI 기술을 이용한 모델 출력 해석 기능 제공
5. Model serving
모델 서빙(Model serving)은 상용 환경에 모델을 배포하고 서빙하기 위한 다음과 같은 기능들을 제공합니다.
- 저 지연 추론과 고가용성 추론 기능 제공
- 다양한 ML 모델 서빙 프레임워크 지원(Tensorflow Serving, TorchServe, NVIDIA Triton, Scikit-learn, XGGoost. etc)
- 복잡한 형태의 추론 루틴 기능 제공, 예를 들어 전처리(preprocess) 또는 후처리(postprocess) 기능과 최종 결과를 위해 다수의 모델이 사용되는 경우를 말합니다.
- 순간적으로 치솟는 추론 요청을 처리하기 위한 오토 스케일링(autoscaling) 기능 제공
- 추론 요청과 추론 결과에 대한 로깅 기능 제공
6. Online experimentation
온라인 실험(Online experimentation)은 새로운 모델이 생성되었을 때, 이 모델을 배포하면 어느 정도의 성능을 보일 것인지 검증하는 기능을 제공합니다. 이 기능은 새 모델을 배포하는 것까지 연동하기 위해 모델 저장소(Model Registry)와 연동되어야 합니다.
- 카나리(canary) & 섀도(shadow) 배포 기능 제공
- A/B 테스트 기능 제공
- 멀티 암드 밴딧(Multi-armed bandit) 테스트 기능 제공
7. Model Monitoring
모델 모니터링(Model Monitoring)은 상용 환경에 배포된 모델이 정상적으로 동작하고 있는지를 모니터링하는 기능을 제공합니다.
예를 들어 모델의 성능이 떨어져 업데이트가 필요한지에 대한 정보 등을 제공합니다.
8. ML Pipeline
머신러닝 파이프라인(ML Pipeline)은 상용 환경에서 복잡한 ML 학습과 추론 작업을 구성하고 제어하고 자동화하기 위한 다음과 같은 기능을 제공합니다.
- 다양한 이벤트를 소스를 통한 파이프라인 실행 기능
- 파이프라인 파라미터와 생성되는 산출물 관리를 위한 머신러닝 메타데이터 추적과 연동 기능
- 일반적인 머신러닝 작업을 위한 내장 컴포넌트 지원과 사용자가 직접 구현한 컴포넌트에 대한 지원 기능
- 서로 다른 실행 환경 제공 기능
9. Model Registry
모델 저장소(Model Registry)는 머신러닝 모델의 생명 주기(Lifecycle)을 중앙 저장소에서 관리할 수 있게 해 주는 기능을 제공합니다.
- 학습된 모델 그리고 배포된 모델에 대한 등록, 추적, 버저닝 기능 제공
- 배포를 위해 필요한 데이터와 런타임 패키지들에 대한 정보 저장 기능
10. Dataset and Feature Repository
- 데이터에 대한 공유, 검색, 재사용 그리고 버전 관리 기능
- 이벤트 스트리밍 및 온라인 추론 작업에 대한 실시간 처리 및 저 지연 서빙 기능
- 사진, 텍스트, 테이블 형태의 데이터와 같은 다양한 형태의 데이터 지원 기능
11. ML Metadata and Artifact Tracking
MLOps의 각 단계에서는 다양한 형태의 산출물들이 생성됩니다. ML 메타데이터는 이런 산출물들에 대한 정보를 의미합니다. ML 메타데이터와 산출물 관리는 산출물의 위치, 타입, 속성, 그리고 관련된 실험(experiment)에 대한 정보를 관리하기 위해 다음과 같은 기능들을 제공합니다.
- ML 산출물에 대한 히스토리 관리 기능
- 실험과 파이프라인 파라미터 설정에 대한 추적, 공유 기능
- ML 산출물에 대한 저장, 접근, 시각화, 다운로드 기능 제공
- 다른 MLOps 기능과의 통합 기능 제공
그렇다면 MLOps를 이야기할 때, 쿠버네티스(Kubernetes)라는 단어가 항상 함께 들리는 이유가 무엇일까요?
성공적인 MLOps 시스템을 구축하기 위해서는 MLOps의 구성요소 에서 설명한 것처럼 다양한 구성 요소들이 필요하지만,
각각의 구성 요소들이 유기적으로 운영되기 위해서는 인프라 레벨에서 수많은 이슈를 해결해야 합니다
간단하게는 수많은 머신러닝 모델의 학습 요청을 차례대로 실행하는 것, 다른 작업 공간에서도 같은 실행 환경을 보장해야 하는 것,
배포된 서비스에 장애가 생겼을 때 빠르게 대응해야 하는 것 등의 이슈 등을 생각해볼 수 있습니다.
여기서 컨테이너(Container)와 컨테이너 오케스트레이션 시스템(Container Orchestration System)의 필요성이 등장합니다.
컨테이너 오케스트레이션 시스템을 도입한다면, 머신러닝 모델을 개발하고 배포하는 과정에서 다수의 개발자가 소수의 클러스터를 공유하면서 ‘1번 클러스터 사용 중이신가요?’, ‘GPU 사용 중이던 제 프로세스 누가 죽였나요?’, ‘누가 클러스터에 x 패키지 업데이트했나요?' 와 같은 상황을 방지할 수 있습니다.
Container Orchestration System
그렇다면 컨테이너 오케스트레이션 시스템은 무엇일까요? 오케스트레이션이라는 단어에서 추측해 볼 수 있듯이, 수많은 컨테이너가 있을 때 컨테이너들이 서로 조화롭게 구동될 수 있도록 지휘하는 시스템에 비유할 수 있습니다.
관리해야 할 컨테이너의 수가 적다면 운영 담당자 한 명이서도 충분히 모든 상황에 대응할 수 있습니다.
하지만, 수백 개 이상의 컨테이너가 수 십 대 이상의 클러스터에서 구동되고 있고 장애를 일으키지 않고 항상 정상 동작해야 한다면, 모든 서비스의 정상 동작 여부를 담당자 한 명이 파악하고 이슈에 대응하는 것은 불가능에 가깝습니다.
예를 들면, 모든 서비스가 정상적으로 동작하고 있는지를 계속해서 모니터링(Monitoring)해야 합니다.
만약, 특정 서비스가 장애를 일으켰다면 여러 컨테이너의 로그를 확인해가며 문제를 파악해야 합니다.
또한, 특정 클러스터나 특정 컨테이너에 작업이 몰리지 않도록 스케줄링(Scheduling)하고 로드 밸런싱(Load Balancing)하며, 스케일링(Scaling)하는 등의 수많은 작업을 담당해야 합니다. 이렇게 수많은 컨테이너의 상태를 지속해서 관리하고 운영하는 과정을 조금이나마 쉽게, 자동으로 할 수 있는 기능을 제공해주는 소프트웨어가 바로 컨테이너 오케스트레이션 시스템입니다.
머신러닝에서는 어떻게 쓰일 수 있을까요?
예를 들어서 GPU가 있어야 하는 딥러닝 학습 코드가 패키징된 컨테이너는 사용 가능한 GPU가 있는 클러스터에서 수행하고, 많은 메모리를 필요로 하는 데이터 전처리 코드가 패키징된 컨테이너는 메모리의 여유가 많은 클러스터에서 수행하고, 학습 중에 클러스터에 문제가 생기면 자동으로 같은 컨테이너를 다른 클러스터로 이동시키고 다시 학습을 진행하는 등의 작업을 사람이 일일이 수행하지 않고, 자동으로 관리하는 시스템을 개발한 뒤 맡기는 것입니다.
MLOps 시스템 구축해보기
모두의 MLops 에서는 우분투가 설치되어있는 데스크탑 하나만 준비되어 있으면 밑바닥부터 구축하고 사용할 수 있는 방법을 나열해놨다.
https://mlops-for-all.github.io/docs/setup-kubernetes/intro/
1. Introduction
Setup Introduction
mlops-for-all.github.io
Google Cloud Platform 에서는 MLops 단계를 다음과 같이 정의하였다.
MLOps 수준 0: 수동 프로세스
- MLOps 수준 0은 사용 사례에 ML을 적용하기 시작하는 많은 비즈니스에서 일반적입니다. 모델이 거의 변경되지 않거나 학습되지 않는 경우에는 이 수동적인 데이터 과학자 기반 프로세스로도 충분할 수 있습니다. 실제로는 실제 환경에 모델이 배포될 때 손상되는 경우가 많습니다. 모델은 환경의 동적인 변화 또는 환경이 설명된 데이터의 변화에 적응하지 못합니다.
이러한 문제를 해결하고 프로덕션 단계에서 모델의 정확성을 유지하려면 다음을 수행해야 합니다.
- 프로덕션 단계에서 적극적으로 모델 품질 모니터링: 품질을 모니터링하면 성능 저하 및 모델 비활성을 감지할 수 있습니다. 이는 새로운 실험 반복 및 새 데이터에 대한 모델 재학습(수동)의 단서 역할을 합니다.
- 프로덕션 모델 자주 재학습: 진화하고 새로운 패턴을 포착하려면 최신 데이터로 모델을 재학습시켜야 합니다. 예를 들어 앱에서 ML을 사용하여 패션 제품을 추천하는 경우 추천은 최신 트렌드와 제품에 맞게 조정되어야 합니다.
- 모델을 생성하기 위한 새로운 구현을 지속적으로 실험: 최신 아이디어와 기술의 발전을 활용하려면 특성 추출, 모델 아키텍처, 초매개변수 등의 새로운 구현을 시도해야 합니다. 예를 들어 얼굴 인식에 컴퓨터 비전을 사용하는 경우 얼굴 패턴은 고정되지만, 더 나은 새로운 기술을 사용하여 감지 정확도를 향상시킬 수 있습니다.
이 수동 프로세스의 도전과제를 해결하려면 CI/CD 및 CT용 MLOps 방식이 도움이 됩니다. ML 학습 파이프라인을 배포하여 CT를 사용 설정할 수 있으며 CI/CD 시스템을 설정하여 ML 파이프라인의 새로운 구현을 빠르게 테스트, 빌드, 배포할 수 있습니다.
MLOps 수준 1: ML 파이프라인 자동화
수준 1의 목표는 ML 파이프라인을 자동화하여 모델을 지속적으로 학습시키는 것입니다. 이를 통해 모델 예측 서비스를 지속적으로 제공할 수 있습니다. 새 데이터를 사용하여 프로덕션 단계에서 모델을 재학습시키는 프로세스를 자동화하려면 파이프라인 트리거 및 메타데이터 관리뿐만 아니라 자동화된 데이터 및 모델 검증 단계를 파이프라인에 도입해야 합니다.
Istio
1. 서비스 메쉬 란
서비스 메쉬는 마이크로서비스아키텍처(MSA) 구조에서 각 서비스들간의 트래픽을 제어하는 역할을 합니다.
https://medium.com/dtevangelist/service-mesh-%EB%9E%80-8dfafb56fc07
Service Mesh 란?
수년간 Enterprise IT환경은 급격하게 변하고 있습니다. 특히 Cloud로 대변되는 시스템 구축 환경의 변화에 따라 이를 잘 활용할 수 있는 다양한 Architecture들이 대두되고 있습니다.
medium.com
https://www.redhat.com/ko/topics/microservices/what-is-a-service-mesh
서비스 메쉬란 무엇일까요?
서비스 메쉬는 애플리케이션에 구축된 인프라 레이어로, 서비스 상호작용을 통해 보다 손쉽게 통신을 최적화하고 다운 타임을 줄이는 방법을 기록합니다.
www.redhat.com
2. istio란?
https://arisu1000.tistory.com/27865
istio란 무엇인가?
2017년 5월에 Google, Lyft, IBM에서 내놓은 서비스 메쉬(Service Mesh) 솔루션입니다. 서비스 메쉬는 마이크로서비스아키텍처(MSA) 구조에서 각 서비스들간의 트래픽을 제어하는 역할을 합니다. 주요 기능
arisu1000.tistory.com
'MLOPS' 카테고리의 다른 글
Minio와 Postgresql를 활용하여 Multi-Tenant MLflow 배포하기 (0) | 2023.05.13 |
---|---|
Kubeflow - Multi Tenancy(user) (0) | 2023.01.27 |
Kubeflow - Kubeadm K8s Single Cluster (0) | 2023.01.08 |
kubeflow (0) | 2023.01.01 |
CLOps-MLOps의 시작 (0) | 2022.08.13 |