MLOps

머신러닝? ops? 이제는 MLOps 다!

Y's. 2023. 12. 10. 15:31

안녕하세요! 이번 포스팅에서는 MLOps 에 대한 짧은 소개와 함께, 앞으로 진행할 MLOps 토이 프로젝트의 흥미로운 WorkFlow를 소개해 드리려고 합니다. 🚀

머신러닝 운영(MLOps) 은 머신러닝 모델의 개발부터 배포, 모니터링까지의 전체 프로세스를 체계적으로 관리하는 방법을 말합니다. 여기서는 이 MLOps가 어떤 개념인지에 대해 간단하게 살펴보고, 이를 실제 프로젝트에 적용하는 흥미로운 WorkFlow를 함께 살펴보겠습니다.

 

자, 함께 흥미로운 MLOps 세계로 빠져들어볼까요? 🌟

 

1. MLOps란?


00. 개요

본격적으로 MLOps에 대해 설명해 드리기에 앞서 한 가지 짚고 넘어갈 게 있는데요.

우리가 알 고 있는 많은 머신러닝 모델들이 기존 소프트웨어 시스템만큼도 효용을 내지 못하는 경우가 많이 있다는
사실을 알고 계신가요?

 

여기에는 많은 요소들이 원인이 될 수 있기에 그중 몇 가지만 적어보려 해요.

 

1. 머신러닝 시스템에서 문제를 일으키는 요소는 머신러닝 모델링이 아니다!

➡️ 해당 테스크가 머신러닝을 꼭 이용해서 문제를 해결해야 하는 것인지를 시작으로 비즈니스 문제를 정의하고 데이터를 처리하는 방식까지 모든 요소들이 영향을 미치기 때문에 머신러닝 모델을 적용하기 전에 우선적으로 해당 문제를 해결하기 위한 방법론에 관해 합리적인 생각을 먼저 해야 합니다.

 

 

2. 머신러닝 기술의 초점이 어디에 있는가?

➡️ 머신러닝 기술을 왜 도입하려 했는지에 대해 끊임없이 피드백하지 않으면 생기는 문제입니다. 처음 비즈니스 문제를 해결하기 위해 도입하던 머신러닝 기술이 개발자 혹은 연구자가 개인의 욕심, 열정과 같은 이유들로 비즈니스 문제보다 세부적인 기술로 관심이 옮겨가며 초점이 바뀌게 되면서 문제가 될 수 있습니다.

 

 

3. 클라우드 환경에 적용이 가능한가?

➡️ 개발된 머신러닝 모델이 클라우드 환경에서 구동할 수 있는 구조로 개발되었는가에 대한 물음에 "예" 라고 말할 수 있어야 한다. 결국 서비스를 위해선 측정 및 관리가 되어야 하는데 이는 클라우드 서비스 없이는 관리하기 어려운 측면들이 존재하기 때문이다.

 

 

이 밖에도 다양한 이유들이 존재하겠지만, 결국 이러한 요소들로 인해 머신러닝 모델이 원하는 효용을 내지 못하게 될 수 있다!

 

 

01. MLOps의 등장 배경


: 위와 같은 이유들 혹은 데이터 드리프트와 같은 현상문제들 때문에 머신러닝 모델이 실제 서비스를 통해 문제를 해결하는 단계로 넘어가는 것이 어렵게 된 것이 여러 업계에서 MLOps의 필요성을 요구하게 된 계기가 되었다고 합니다.

 

➡️ 이러한 MLOps의 필요성에 앞서, DevOps철학이 자동화를 중요하게 여긴다는 측면에서 볼 때, MLOps 또한 자동화를 중요시 여기기 때문에 DevOps의 계보를 이어간다라고 말할 수 있습니다!

 

 

02. MLOps.. 왜 필요한가?


음.. 머신러닝 모델들이  테스크 정의하는 문제부터, 기술의 초점, 자동화 문제 등 여러 요소들을 고려해야 한다. 또 서비스에 적용하다 보니 생긴 문제들로 인해 업계에서도 MLOps의 필요성에 대해 생각하게 되었다... 이 말들이 잘 와닿으시나요?

 

저 또한 잘 와닿지가 않아서 보다 가볍게 MLOps의 필요성에 대해 설명해보려 합니다.

 

프로토 타입을 간단하게 Flask API로 만들어보자

 

위와 같이 간단하게 Flask API로 프로토 타입을 만드는 상황을 가정해볼게요.

처음에는 프로토 타입이니 가벼운 마음으로 구현을 시작했습니다.

 

그런데..

가벼웠던 프로토 타입이 점점 요구사항이 늘어납니다.

하나의 모델을 배포하는 상황에서 두 개, 세 개, 네 개.. 계속 늘어나며 동시에 요청도 많아집니다...

그럼 자연스레 다음과 같은 의문점이 생길 수 있는데요.

 

  • 요청이 많아져서 서버를 늘려야 하는데 세팅을 하나하나씩 다 해줘야 하나..?
  • 관리하는 모델의 종류와 개수들이 점점 많아지는데 나 혼자 해?
  • 지속적으로 모델을 재배포해야 하는데.. 모델 배포를 자동화하는 방법은 없나?

 

이러한 의문점들을 해결하기 위한 방법론 중 하나가 MLOps입니다!

 

 

머신러닝 시스템

 

 

다들 한 번쯤은 보셨을 머신러닝 시스템에 관한 이미지인데요. 실제 ML Project에서 알고리즘과 모델은 극히 일부분입니다.

 

실제 서비스를 위해선 모델 외에도

  • 데이터 버전 관리
  • 학습 모델 파일 관리
  • ML 모델 배포
  • 실험 기록

등의 다양한 요소들이 필수적으로 필요로 하게 되는데요. 이러한 요소들의 필요성과 자동화의 개념 등이 합쳐져 나온 개념이 MLOps라고 생각하시면 좋을 것 같습니다.

 

 

03. 그래서 MLOps 란?


: MLOps는 DevOPs 방법론을 사용하여 머신러닝을 자동화하는 프로세스이다.라고 정의 내릴 수 있을 것 같습니다.

  • 소프트웨어 엔지니어링 프로세스뿐만 아니라 데이터나 모델링까지 자동화하는 행위
  • DevOps 사이클 + 모델 학습, 모델 배포
💡MLOps는 ML시스템 개발(Dev)과 ML 시스템 운영(Ops)을 통합하는 것을 목표로 하는 ML 엔지니어링 문화 및 방식이다.

이를 통해 테스트, 출시, 배포, 인프라 관리 등을 할 수 있으며 ML 시스템을 구성하는 모든 단계에서 자동화 및 모니터링을 지원할 수 있다.

 

 

04. 안정적인 MLOps를 위한 작업들


MLOps를 안정적으로 수행하기 위해선 아래와 같이 필요한 작업들이 있습니다.

  1. 기본적으로 인프라가 구축이 되고 (DevOps)
  2. 데이터 ETL 파이프라인이 설계되고 (DataOps)
  3. 플랫폼 자동화가 되고 (Aws, Azure, GCP, 폐쇄형 클라우드 등)
  4. MLOps(자동학습, 데이터 품질, 서빙) 이 수행되어야 한다.
💡기본적으로 데이터의 흐름이 자동화가  되어야 안정적인 MLOps를 수행할 수 있습니다.

 

 

 

다음으로는 가볍게 각 단계에 대해서 정리해 보도록 하겠습니다.

DevOps


: DevOps는 고품질 소프트웨어를 빠르게 출시하는 것을 목표로 하는 조직에서 사용되는 일련의 기술 및 관리 전반을 일컫는다고 합니다.

 

속도, 안정성, 확장성, 보안 등 다양한 이점들이 있지만 가장 대표적인 특징 4가지에 대해서만 소개하겠습니다. 

 

  • 지속적 통합 (Continuous Integration, CI)
    • 소프트 웨어 프로젝트를 지속적으로 테스트하고, 테스트 결과를 바탕으로 소프트웨어의 품질을 향상시키는 프로세스 
    • 테스트 자동화라고도 불립니다.
    • 오픈 소스, SaaS 빌드 서버(깃랩, 깃허브액션), 클라우드 네이티브 빌드 시스템(AWS 코드 빌드) 등을 이용
💡 지속적 통합, 저장소에 코드를 병합하고, 해당 저장소에서 테스트를 통해 코드 품질을 자동 검사합니다.

 

 

  • 지속적 배포 (Continuous Deployment, CD)
    • 코드형 인프라를 사용하여 코드를 자동으로 배포하는 프로세스
    • 다양한 지속적 배포 방법을 통해 사람 개입 없이 새로운 환경에 코드 전달
💡 자동 테스트를 마친 코드 변경 사항을 스테이지 환경이나 프로덕션 환경에 배포합니다.

 

 

  • 마이크로 서비스(Microservice)
    • 의존성이 거의 없고 독립적 기능을 가진 소프트웨어 서비스
    • 서비스형 함수(FaaS)를 포함한 다양한 기술들이 사용 가능
      • AWS 람다가 클라우드에서 제공되는 다양한 서비스형 함수의 대표 서비스입니다.
    • 컨테이너 환경에서 즉시 실행 가능하도록 구성이 가능
💡 서비스형 컨테이너(CaaS)를 사용해 도커 파일과 함께 애플리케이션을 서비스에 손쉽게 배포가 가능합니다.

 

 

  • 코드형 인프라 (Infrastructure as Code)
    • 인프라를 소스 코드의 형태로 보관하고 배포하는 프로세스
    • 인프라에 변경사항이 있으면 코드를 변경하고 반영
💡자동으로 구성되는 클라우드 환경을 사용하는 것이 대표 사례입니다.(ex. AWS SAM) 

 

 

DataOps


: DataOps는 아파치 에어플로우와 같은 워크플로 예약, 관리, 모니터링 도구들이 있습니다.

이밖에도 AWS Glue, Athena, QuickSight 같은 DataOps 관련 플랫폼들이 있습니다.

💡데이터의 크기, 변경 빈도, 품질 및 정제 수준을 고려해 알맞은 저장소와 제품을 선택하는 것이 중요합니다

 

 

플랫폼 자동화


: 데이터의 흐름을 자동화한 이후에는 머신러닝 솔루션 구축을 위해 조직이 높은 추상화 수준의 플랫폼을 잘 다루고 있는지 점검해야 합니다.

 

대표적인 클라우드 플랫폼들은 다음과 같습니다.

  • AWS - Sagemaker
  • GCP - VertexAI
  • Azure - Azure machine learning studio
  • kubeflow - k8s

 

 

MLOps


: 데이터 수집, 피처 엔지니어링, 모델 평가, 배포, 유지보수 등 전반에 머신러닝 시스템을 구축하는 방법을 머신러닝 엔지니어링이라고 부릅니다.

 

DevOps와 MLOps가 잘 결합되어 있는지 확인하는 방법에는 다음과 같은 것들이 있습니다.

  • 머신러닝 모델의 강력한 패키징이 되어있는지
  • 견고한 모델 검증 및 배포 프로세스가 구축되어 있는지
  • 요소들의 재현 가능성이 높은지
💡 잘 정립되어 있는 MLOps의 모법 사례를 따르면 모델의 성능을 감시하는 데 유리해지고, 설명력이 높아집니다!

 

 

05. MLOps 피드백 루프


마지막으로 피드백 루프에 대해 간략하게 설명하겠습니다.

 

기본적으로 MLOps의 피드백 루프는 다음과 같습니다.

 

모델 학습과 재학습 → 배포 + 버저닝 → 추적용 로그와 아티팩트 → 모니터링 → 모델 학습과 재학습 → 배포 + 버저닝 →...

 

  • 모델 생성 및 재학습
    • 재사용이 가능한 파이프라인을 구축해야 합니다.
  • 배포 + 버저닝
    • SW의 지속적 배포와 유사합니다.
    • 새로운 환경, 지속적 배포가 가능해야 합니다.
  • MLOps 파이프라인에 대한 추적 로그
    • 파이프라인 전반에 걸친 다양한 사건들을 추적해야 합니다.
    • 머신러닝 시스템의 보안, 편향, 정확성 등에 관해서도 추적이 용이해야 합니다.

 

 

이로써 간단하게 MLOps란 무엇인지에 관하여 작성해 보았는데요.

이론으로만 정리해 보니 아쉬운 부분이 있어서 실제 MLOps 관련하여 토이 프로젝트를 진행해보려 합니다.

 

다음 글은 이 토이프로젝트에 진행 과정에 관하여 작성하게 될 것 같은데요.

글을 마무리하기에 앞서 다음부터 진행해 볼 토이 프로젝트에 관하여 짧게 소개해드리겠습니다!!

 

 

 

2. Toy Project WorkFlow


아래의 이미지는 앞으로 진행할 토이 프로젝트의 워크플로우를 도식화하여 만들어본 이미지인데요.

앞으로 진행할 토이프로젝트는 다음과 같은 워크플로우에 맞춰서 진행해볼 예정입니다.

 

MLOps 토이 프로젝트 WorkFlow

 

 

1. MLFlow로 실험 관리 및 모델 관리를 통해 서비스를 위한 모델 선택

📌 이 과정에서 MLFlow 란 무엇인지, 어떻게 사용하는지 등에 관하여 정리하여 포스팅해볼 예정입니다.

 

2. 선택된 모델을 BentoML로 모델 저장

📌이 과정에서는 BentoML 이란 무엇인지, MLFlow와 어떻게 결합하여 사용하는지 등에 관하여 정리할 예정입니다.

 

3. 배포를 위한 도커 이미지 및 컨테이너 생성

📌 앞 선 단계와 연계하여 벤토 서비스를 도커 이미지 및 컨테이너로 생성하는 과정에 대하여 정리합니다.

 

4. k8s에 배포

📌 실제 벤토서비스를 k8s에 배포하는 과정에 대해 다룰 예정입니다. 그 중 최근 버전에서는 Yatai 를 이용하여 k8s 에 배포하는 것을 권장하고 있기에 해당 방식으로 진행해 볼 예정입니다.

 

5. Prometheus & Grafana로 대시보드 모니터링

📌 모든 배포 과정이 끝나게 되면 대시보드를 통해 모니터링하는 방식에 관하여 정리해 볼 예정입니다.

 

 

Reference

 

 

 

 

글을 마치며..

요즘 핫한 AI 공부를 시작하시는 분들이 많으실텐데요.

공부를 지속적으로 하다보면

내가 공부하여 설계한 머신러닝 혹은 딥러닝 모델이 실제 어떻게 운영되고 배포될 수 있을까?

라는 물음이 자연스레 생기실 것 같습니다!

저 또한 MLOps에 대해 처음 알게되고 공부하게 된 것도 자연스레 이러한 물음이 따라왔었기 때문인데요.

 

이번 글과 앞으로 정리할 포스팅 내용들은 이러한 물음을 해소시키기 위함이라고 생각해주시면 좋을 것 같습니다!

 

내가 설계한 혹은 사용할 모델들이 실제 어떻게 배포되고 관리하여 사용할 수 있을까?  이 궁금증을 해결하고 싶으시다면 앞으로 작성될 제 블로그 글들에 많은 관심 부탁드립니다(?)

 

아직 MLOps에 관하여 부족한 지식이 많지만 하나씩 공부해 가며 지속적으로 정리해 볼 예정이니,

앞으로 많아질 MLOps 포스팅을 기대해 주세요 :)