MLOps 1일차

한량·2022년 3월 29일
0

MLOps

목록 보기
1/1

가짜연구소에서 MLOps 스터디 'ml-with-the-flow'를 진행하며 공부하고 익힌 것을 정리해볼 예정
오늘은 첫날이니까 https://mlops-for-all.github.io/를 보며 쿠버네티스 세팅하는 것까지가 목표!

MLOps란?

내가 이해하기로 mlops란 데이터 수집 및 전처리, 모델을 학습하고 학습한 결과를 반영해 다시 학습하는 등 DL 학습 관련 전반적인 일을 자동화시켜주는 것? 정도로 생각하고 있었음
이하는 모두의 mlops를 읽으며 정리한 내용

DevOps

MLOps는 DevOps라는 개발방법론에서 파생

  • DevOps: 소프트웨어의 개발(Development)과 운영(Operations)의 합성어
    • 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화
    • 소프트웨어 개발 조직과 운영 조직간의 상호 의존적 대응이며 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적
  • 회사의 규모가 커지면 개발-운영 간 괴리가 심해지고 소통의 부재로 각 조직부서간 이익만 추구하는 Silos Effect가 발생 --> 서비스 품질의 저하
  • 이를 해결하기 위해 Continuous Integration(CI) 와 Continuous Delivery (CD)가 등장

MLOps

MLOps는 머신러닝팀과 운영팀의 문제를 해결하기 위한 방법

  • 서비스에 필요한 모델의 성능이 높아질수록 이를 맞추기 위해 모델의 복잡도가 증가함
  • 관리할 모델이 많아지다보면 (배포에 문제가 생겨) silos effect가 발생할 수 있음 --> MLOps의 목표는 ML팀에서 개발한 모델이 정상적으로 배포될 수 있는지 확인하는 것
  • 또한 모델이 주어진 태스크를 해결할 수 있는지 검증(POC)하기 위해 MLOps를 사용하기도 함(ML팀 자체적으로는 해결하기 어렵기 때문에)

MLOps의 단계

구글은 'Hidden Technical Debt in Machine Learning Systems'라는 논문을 통해 2015년부터 MLOps의 중요성을 강조

ML 코드는 전체 시스템 중 아주 일부라는 것이 핵심

0단계: 수동 프로세스

ML팀은 데이터로 모델을 학습 후 전달하고 운영팀은 전달받은 모델을 배포함

학습된 ML모델이 동작하기 위해서는
1. 파이썬 코드
2. 학습된 weight
3. 환경(패키지, 버전 등)
이 필요함. 이 중 1가지라도 잘못 전달된다면 모델이 동작하지 않거나 다른 결과값이 나옴

1단계: ML 파이프라인 자동화

Pipeline

이러한 문제를 방지하기 위해 MLOps의 파이프라인은 도커와 같은 컨테이너를 이용해 ML 엔지니어가 모델 개발에 사용한 것과 같은 환경을 보장

Continuous Training

  • Auto Retrain
    • 현실에서는 데이터의 분포가 계속해서 변하는 data shift가 일어나 학습한 모델이 시간이 지나면 성능이 감소함
    • 이를 해결하기 위해 변화된 데이터 분포에 맞춰 모델을 재학습
  • Auto Deploy
    • Blind spot을 해결하기 위해 메타 데이터를 이용해 모델을 자동으로 변환해주는것
    • Blind spot: 충분한 양의 데이터를 모으기 위해 모델이 동작하지 않는 구간

2단계: CI/CD 파이프라인의 자동화

  • MLOps에서 CI/CD의 대상은 학습 파이프라인
  • 모델을 학습하는데 있어서 영향이 있는 변화에 대해서 실제로 모델이 정상적으로 학습이 되는지(CI), 학습된 모델이 정상적으로 동작하는지(CD)를 확인해야 함
  • 오픈소스 패키지, 파이썬의 버전 변경도 CI/CD의 대상

MLOps의 구성요소

출처: 구글의 white paper : Practitioners guide to MLOps: A framework for continuous delivery and automation of machine learning

1. Experimentation

머신러닝 엔지니어들이 데이터를 분석하고, 프로토타입 모델을 만들며 학습 기능을 구현할 수 있도록 기능을 제공

  • 깃(Git)과 같은 버전 컨트롤 도구와 통합된 노트북(Jupyter Notebook) 환경 제공
  • 사용한 데이터, 하이퍼 파라미터, 평가 지표를 포함한 실험 추적 기능 제공 --> W&B 같은?
  • 데이터와 모델에 대한 분석 및 시각화 기능 제공

2. Data Processing

머신러닝 모델 개발 단계, 지속적인 학습(Continuous Training) 단계, 그리고 API 배포(API Deployment) 단계에서 많은 양의 데이터를 사용할 수 있게 해 주는 기능을 제공

  • 다양한 데이터 소스와 서비스에 호환되는 데이터 커넥터(connector) 기능 제공
  • 다양한 형태의 데이터와 호환되는 데이터 인코더(encoder) & 디코더(decoder) 기능 제공
  • 다양한 형태의 데이터에 대한 데이터 변환과 피처 엔지니어링(feature engineering) 기능 제공
  • 학습과 서빙을 위한 확장 가능한 배치, 스트림 데이터 처리 기능 제공

3. Model training

모델 학습을 위한 알고리즘을 효율적으로 실행시켜주는 기능을 제공

  • ML 프레임워크의 실행을 위한 환경 제공
  • 다수의 GPU / 분산 학습 사용을 위한 분산 학습 환경 제공
  • 하이퍼 파라미터 튜닝과 최적화 기능 제공

4. Model evaluation

실험 환경과 상용 환경에서 동작하는 모델의 성능을 관찰할 수 있는 기능을 제공

  • 평가 데이터에 대한 모델 성능 평가 기능
  • 서로 다른 지속 학습 실행 결과에 대한 예측 성능 추적
  • 서로 다른 모델의 성능 비교와 시각화
  • 해석할 수 있는 AI 기술을 이용한 모델 출력 해석 기능 제공 --> GradCAM 같은?

5. Model serving

상용 환경에 모델을 배포하고 서빙하기 위한 기능들을 제공

  • 저 지연 추론과 고가용성 추론 기능 제공
  • 다양한 ML 모델 서빙 프레임워크 지원(Tensorflow Serving, TorchServe, NVIDIA Triton, Scikit-learn, XGGoost. etc)
  • 복잡한 형태의 추론 루틴 기능 제공, 예를 들어 전처리(preprocess) 또는 후처리(postprocess) 기능과 최종 결과를 위해 다수의 모델이 사용되는 경우
  • 순간적으로 치솟는 추론 요청을 처리하기 위한 오토 스케일링(autoscaling) 기능 제공
  • 추론 요청과 추론 결과에 대한 로깅 기능 제공

6. Online experimentation

새로운 모델이 생성되었을 때, 이 모델을 배포하면 어느 정도의 성능을 보일 것인지 검증하는 기능을 제공
이 기능은 새 모델을 배포하는 것까지 연동하기 위해 모델 저장소(Model Registry)와 연동되어야함

  • 카나리(canary) & 섀도(shadow) 배포 기능 제공
  • A/B 테스트 기능 제공
  • 멀티 암드 밴딧(Multi-armed bandit) 테스트 기능 제공

7. Model Monitoring

상용 환경에 배포된 모델이 정상적으로 동작하고 있는지를 모니터링하는 기능을 제공
예를 들어 모델의 성능이 떨어져 업데이트가 필요한지에 대한 정보 등을 제공

8. ML Pipeline

상용 환경에서 복잡한 ML 학습과 추론 작업을 구성하고 제어하고 자동화하기 위한 기능

  • 다양한 이벤트를 소스를 통한 파이프라인 실행 기능
  • 파이프라인 파라미터와 생성되는 산출물 관리를 위한 머신러닝 메타데이터 추적과 연동 기능
  • 일반적인 머신러닝 작업을 위한 내장 컴포넌트 지원과 사용자가 직접 구현한 컴포넌트에 대한 지원 기능
  • 서로 다른 실행 환경 제공 기능

9. Model Registry

머신러닝 모델의 생명 주기(Lifecycle)을 중앙 저장소에서 관리할 수 있게 해 주는 기능

  • 학습된 모델 그리고 배포된 모델에 대한 등록, 추적, 버저닝 기능 제공
  • 배포를 위해 필요한 데이터와 런타임 패키지들에 대한 정보 저장 기능

10. Dataset and Feature Repository

  • 데이터에 대한 공유, 검색, 재사용 그리고 버전 관리 기능
  • 이벤트 스트리밍 및 온라인 추론 작업에 대한 실시간 처리 및 저 지연 서빙 기능
  • 사진, 텍스트, 테이블 형태의 데이터와 같은 다양한 형태의 데이터 지원 기능

11. ML Metadata and Artifact Tracking

ML 메타데이터는 MLOps의 각 단계에서 생성되는 다양한 형태의 산출물을 의미
ML 메타데이터와 산출물 관리는 산출물의 위치, 타입, 속성, 그리고 관련된 실험(experiment)에 대한 정보를 관리하기 위해 기능들을 제공

  • ML 산출물에 대한 히스토리 관리 기능
  • 실험과 파이프라인 파라미터 설정에 대한 추적, 공유 기능
  • ML 산출물에 대한 저장, 접근, 시각화, 다운로드 기능 제공
  • 다른 MLOps 기능과의 통합 기능 제공

쿠버네티스Kubernetes란?

MLOps와 Kubernetes

수많은 머신러닝 모델의 학습 요청을 차례대로 실행하는 것, 다른 작업 공간에서도 같은 실행 환경을 보장해야 하는 것, 배포된 서비스에 장애가 생겼을 때 빠르게 대응해야 하는 것 등의 이슈를 해결하기 위해 컨테이너(Container)와 컨테이너 오케스트레이션 시스템(Container Orchestration System)이 등장함
쿠버네티스 같은 컨테이너 오케스트레이션 시스템을 이용하면 실행 환경의 격리와 관리를 효율적으로 수행 가능

Container

  • Container: 애플리케이션의 표준화된 이식 가능한 패키징
  • Containerization: 머신러닝에 사용된 소스 코드와 함께 종속적인 실행 환경 전체를 하나로 묶어서(패키징해서) 공유하고 실행하는 데 활용할 수 있는 기술
    운영체제나 Python 실행 환경, 패키지 버전 등에 따라 머신러닝 모델들이 다르게 동작하는 것을 방지할 수 있음
  • 도커: 컨테이너를 더욱더 쉽고 유연하게 사용할 수 있는 기능을 제공해주는 도구

Container Orchestration System

수많은 컨테이너의 상태를 지속해서 관리하고 운영하는 과정을 조금이나마 쉽게, 자동으로 할 수 있는 기능을 제공해주는 소프트웨어
쿠버네티스는 사실상 2022년 기준으로 업계 표준
쿠버네티스에 대한 정보는 쿠버네티스 공식 문서, 쿠버네티스 안내서 - 설치부터 배포까지 <실습편>을 참고

  • 특정 컨테이너나 클러스터에 작업이 몰리지 않게 스케줄링(Scheduling)하고 로드 밸런싱(Load Balancing)하며, 스케일링(Scaling)하는 등의 수많은 작업을 담당
  • 모든 서비스가 정상적으로 동작하고 있는지를 계속해서 모니터링(Monitoring)
  • 여러 컨테이너의 로그를 확인해가며 문제를 파악
profile
놀고 먹으면서 개발하기

0개의 댓글