2.1 MLOps 시스템 아키텍처 개요
시스템 아키텍처는 조직의 특성과 요구 사항에 따라 변화합니다. 클라우드 및 온프레미스 솔루션은 각각 고유한 장단점을 가지고 있으며, 이로 인해 팀의 생산성, 효율성, 그리고 만족도에 영향을 미칩니다. 확장성, 비용 효율성, 관리 용이성, 보안, 그리고 신속한 프로비저닝이 중요한 시스템의 경우 클라우드가 적절하며, 정교한 제어, 법률적 제약, 온프레미스 컴퓨팅 리소스의 재활용 등이 요구되는 경우에는 온프레미스가 더 적합할 수 있습니다. 특별한 제약 사항이 없다면, 클라우드와 온프레미스 환경을 혼합한 하이브리드 클라우드 접근법이 효율적일 수 있습니다.
현재 대다수의 MLOps 관련 클라우드 서비스는 상대적으로 높은 사용료를 요구 합니다. 비용 최적화를 통해 일정 부분 절감할 수 있지만, 예산이 제한된 조직에는 여전히 경제적 부담이 될 수 있습니다. 특히, 딥러닝 모델 학습 및 서빙을 위해 GPU 리소스를 사용해야 하는 경우, 비용 부담은 더욱 커질 수 있습니다.
AWS의 SageMaker, GCP의 Vertex AI, Azure의 AzureML 등 유명 클라우드 벤더사의 MLOps 솔루션과 많은 MLOps 전문 업체들의 부담스러운 사용 요금이 이 글을 쓰게된 계기가 되었습니다. 이 글은 각종 MLOps 솔루션을 적용하여 머신러닝 프로세스를 고도화하길 원하지만, 부족한 예산으로 클라우드 MLOps 솔루션 활용이 어려운 조직이나, 온프레미스 환경에 MLOps 시스템 직접 구축하는 것을 고려하는 분들을 대상으로 하고 있습니다.
먼저, MLOps 시스템은 어떤 구성 요소들이 있는지 살펴 보겠습니다.
2.2 MLOps 시스템 구성 요소
MLOps 시스템은 머신러닝 개발 프로세스의 여러 단계를 자동화하고 간소화하기 위해 여러 도구들이 포함됩니다. 여기에는 데이터 수집 및 피처 엔지니어링부터 모델 학습 및 서빙에 이르기까지 모든 것이 포함됩니다. <그림 2-1>은 <그림 1-4> MLOps 프로세스와 구성 요소에서 MLOps 시스템 구성 요소에 대한 것만 표현한 것 입니다:
- 피처 스토어 (Feature Store): 피처 스토어는 머신러닝 모델에 사용되는 피처를 저장하고 관리하기 위한 중앙 집중식 저장소입니다. 피처 스토어는 다양한 모델과 데이터 세트에서 피처를 공유하고 재사용할 수 있는 방법을 제공하며, 피처 엔지니어링의 일관성과 재현성을 보장합니다.
- 머신러닝 실험 환경 (ML Experimentation): 머신러닝 실험 환경은 데이터 탐색 및 머신러닝 실험을 실행하는 데 필요한 도구들을 제공 합니다. 데이터 과학자는 Python과 같은 프로그래밍 언어로 이곳에서 머신러닝 실험에 필요한 소스 코드를 작성하고 실행 합니다.
- 소스 코드 리포지토리 (Source code Repository): 소스 코드 리포지토리는 머신러닝 모델의 코드와 관련 스크립트, 노트북, 구성 파일을 저장하는 데 사용됩니다. 소스 코드 버전 관리와 팀원 간의 협업에 사용합니다.
- CI/CD (Continuous Integration/Continuous Deployment): 지속적 통합과 지속적 배포(CI/CD)는 머신러닝 모델을 빌드, 테스트 및 배포하는 프로세스를 자동화하는 관행과 도구입니다. 여기서는 머신러닝 파이프라인 코드가 CI/CD 대상이 됩니다.
- 머신러닝 파이프라인 (Machine Learning Pipeline): 머신러닝 파이프라인은 데이터 추출, 데이터 전처리, 모델 학습, 모델 검증, 모델 배포까지 일련의 과정을 의미 합니다. 머신러닝 파이프라인 도구는 과거 데이터 과학자가 수동으로 수행했었던 이러한 단계들을 파이프라인을 구축하여 시스템에서 자동으로 실행합니다.
- 메타데이터 저장소 (Metadata Store): 메타데이터 스토어는 모델 학습에 사용된 데이터, 사용된 하이퍼파라미터 및 성능 메트릭에 대한 정보를 포함하여 머신러닝 모델에 대한 메타데이터를 저장하는 데이터베이스입니다. 데이터 과학자가 실행한 실험을 더 쉽게 추적하고 관리할 수 있도록 도와 줍니다.
- 모델 레지스트리 (Model Registry): 모델 레지스트리는 머신러닝 모델을 저장하고 관리하기 위한 중앙 집중식 저장소입니다. 모델 버전 관리와 버전별 메타데이터에 대한 정보를 확인 할 수 있습니다.
- 모델 서빙 (Model Serving): 모델 서빙은 모델 레지스트리에 등록된 머신러닝 모델을 프로덕션 환경에 배포하여 새로운 데이터에 대한 예측을 수행 합니다.
- 모니터링 (Monitoring): 모니터링은 프로덕션 환경에서 머신러닝 모델의 성능을 추적하는 프로세스입니다. 여기에는 예측 정확도, 지연 시간 및 리소스 사용량과 같은 메트릭이 포함됩니다.
- 트리거 (Trigger): 트리거는 특정 이벤트나 조건에 대응하여 ML 파이프라인을 실행하여 모델이 최신 상태를 유지하도록 합니다. 다양한 유형의 트리거를 활용하여 지속적인 학습(Continual Learning)을 수행하여 새로운 데이터, 코드 변경 또는 성능 메트릭에 대응하여 최적의 모델 성능을 유지할 수 있도록 해줍니다.
<그림 2-1>은 최신 MLOps 프로세스를 기반으로 하는 단순화된 참조 MLOps 시스템 아키텍처를 보여줍니다. 조직 상황과 머신러닝 프로젝트 요구 사항에 따라 MLOps 시스템을 다르게 구성할 수도 있습니다. 예를 들어, 입력 데이터의 변경이 미미하고 피처 엔지니어링 및 관리가 필요하지 않은 경우, 피처 스토어를 제외하거나 머신러닝 파이프라인을 사용하지 않고 CI/CD에서 모델 레지스트리로 직접 모델을 배포할 수도 있습니다. 하지만, 조직에 머신러닝 모델 개발 팀과 인프라 팀이 분리 되어 있고 MLOps 인프라를 제공할 책임이 있는 경우, 포괄적인 솔루션을 위해 앞서 나열된 구성 요소는 모두 포함하는 것이 좋습니다 (트리거는 제외).
이어지는 장에서 각 구성 요소의 상세한 정보와 관련 도구들에 대해 하나씩 살펴보겠습니다. 이번 장은 MLOps 시스템 전체가 어떻게 구성 되어 있는지 큰 그림에서의 설명과 각 구성 요소가 어떻게 활용되는지 대해서만 간략히 설명하겠습니다.
2.3 컴퓨팅 인프라
컴퓨팅 인프라는 온프레미스 환경의 다수의 물리적(혹은 가상) 서버를 결합한 쿠버네티스 클러스터 입니다. 쿠버네티스 클러스터는 컨테이너화된 애플리케이션을 오케스트레이션하고 관리하는 상호 연결된 노드 그룹입니다. 쿠버네티스는 분산 시스템에 대해 높은 수준의 추상화를 제공하므로 개발자와 시스템 운영자는 애플리케이션 개발과 배포에만 집중하면서 복잡한 분산 시스템에 대한 안정성, 유연성, 관리 용이성을 보장할 수 있습니다.
MLOps 시스템의 대부분의 도구들은 쿠버네티스 클러스터에서 설치되어 운영됩니다. 쿠버네티스 클러스터는 복잡한 컴포넌트들로 구성되어 있으므로, kubeadm, Kops, kubespray, RKE2와 같은 클러스터 생성 도구를 사용하여 클러스터를 구축하는 것이 효율적입니다.
인프라를 코드로 관리하는 대표적인 IaC (Infrastructure as Code) 도구로는 Terraform과 Ansible이 있으며, 쿠버네티스 패키지 관리자인 Helm과 GitOps 도구인 ArgoCD는 인프라 관리를 자동화하고 편리하게 도와줍니다.
3장. 컴퓨팅 인프라 - 쿠버네티스에서 이러한 도구들에 대한 내용과 이를 활용하여 쿠버네티스 클러스터를 구축하고 관리하는 방법에 대해 자세히 알아보겠습니다.
2.4 데이터 관리
데이터 관리는 머신러닝 프로젝트 수명 주기 전반에 걸쳐 데이터의 품질, 일관성, 신뢰성을 보장하는 MLOps 시스템의 필수적인 측면입니다. 주요 구성 요소에는 데이터 라벨링, 데이터 버전 관리, 피처 스토어가 포함됩니다. 효과적인 데이터 관리는 머신러닝 프로세스를 간소화하고 데이터 과학자, 엔지니어 및 기타 이해관계자 간의 협업을 촉진하는 데 기여합니다.
데이터 라벨링은 지도 학습에서 원시 데이터에 라벨을 할당하는 프로세스입니다. MLOps 시스템의 라벨링 도구와 통합하여 능동 학습(Active Learning) 전략을 구현하고, 검토 및 검증 단계를 거쳐 일관된 라벨링 품질을 보장해야 합니다. 여러 라벨링 도구들 중에 Label Studio와 CVAT의 설치 및 사용법에 대해 알아 보겠습니다.
데이터 버전 관리는 여러 데이터 세트 버전을 추적하고 저장하는 관행으로, 재현성 유지와 데이터 계보(Lineage) 추적에 매우 중요합니다. 주요 기능에는 스냅샷 또는 해시 생성, 메타데이터 기록, 필요 시 이전 버전으로의 롤백 등이 포함됩니다. DVC와 Git LFS를 활용하여 데이터 버전 관리 예시를 설명하겠습니다.
피처 스토어는 머신러닝 모델을 위해 사전 처리된 피처를 저장, 관리 및 제공하기 위한 중앙 집중식 저장소입니다. 피처 스토어는 피처에 대한 신뢰할 수 있는 단일 소스를 제공하여 팀원 간의 협업과 일관성을 촉진합니다. 피처 스토어는 피처 버전 관리, 추적 및 계보를 가능하게 할 뿐만 아니라 실시간 예측 및 일괄 학습을 위한 온라인 및 오프라인 피처를 제공합니다. Feast와 Hopsworks라는 두가지 피처 스토어 도구에 대해 알아 보겠습니다.
4장. 데이터 관리에서 데이터 라벨링, 데이터 버전 관리, 피처 스토어 도구들에 대한 내용과 이를 활용하는 방법에 대해 자세히 알아 보겠습니다.
2.5 머신러닝 모델 실험과 개발
2.5.1 머신러닝 실험 환경
MLOps 시스템의 머신러닝 실험 환경은 각종 머신러닝 패키지가 포함된 중앙화된 JupyterLab 환경을 제공 합니다. JupyterLab은 데이터 과학자와 엔지니어가 머신러닝 모델을 개발, 테스트 및 반복할 수 있는 대화형 협업 플랫폼을 제공합니다. 이 환경은 공유 가능한 단일 인터페이스에서 코드 실행, 시각화 및 문서화를 용이하게 합니다. 다음은 MLOps 시스템에서 JupyterLab의 5가지 주요 특징 입니다:
- 대화형 개발: JupyterLab은 반복적인 모델 개발을 위한 실시간 코드 실행 및 서식 있는 텍스트 형식을 지원합니다.
- 협업 및 공유: 버전 관리 및 클라우드 기반 협업 도구로 팀워크를 촉진합니다.
- 시각화 및 분석: 데이터 과학자는 JupyterLab 내에서 시각화를 만들어 데이터를 탐색하고 모델 성능을 평가할 수 있습니다.
- 확장성 및 통합: JupyterLab은 사용자 정의 환경이 가능하여 머신러닝 프레임워크, 데이터 처리 라이브러리 및 MLOps 도구와 통합됩니다.
- 재현 가능한 환경: Docker와 같은 컨테이너 기술은 머신러닝 수명 주기 전반에 걸쳐 일관되고 격리된 환경을 보장합니다.
JupyterHub와 Kubeflow를 사용하여 중앙화된 JupyterLab 환경을 생성합니다. 이를 통해 데이터 과학자들이 자신의 노트북에서 JupyterLab을 실행하고, MLOps 시스템의 Jupyter 서버에 접속하여 원격으로 컴퓨팅 리소스를 활용할 수 있습니다. 또는 웹 브라우저로 JupyterHub나 Kubeflow에 접속하여 호스팅된 JupyterLab 환경을 사용 할 수도 있습니다.
머신러닝 실험을 하다보면 개발중인 모델의 성능을 종종 확인해야 합니다. TensorBoard는 모델의 각종 매트릭 정보를 데이터 과학자들에게 시각적으로 제공합니다. 데이터 과학자들이 TensorBoard를 사용하여 모델 학습 과정을 시각화하고, 성능 지표를 추적하며, 최적의 하이퍼파라미터를 탐색할 수 있습니다.
2.5.2 메타데이터 저장소
메타데이터 저장소는 머신러닝 수명 주기 전반에 걸쳐 생성되는 다양한 유형의 정보를 관리하고 추적하는 데 필수적입니다. 여기에는 실험, 모델, 매개변수, 메트릭, 아티팩트, 데이터 세트 및 기타 구성 요소에 대한 세부 정보가 포함됩니다. 이러한 메타데이터를 효율적으로 구성하고 저장함으로써 MLOps 시스템은 머신러닝 프로세스의 추적성, 재현성 및 감사 가능성을 보장합니다.
메타데이터 저장소의 주요 특징은 실험 추적, 모델 관리, 데이터 계보가 포함됩니다. 실험 추적을 통해 데이터 과학자는 서로 다른 실험을 비교하고 가장 성능이 좋은 모델이나 구성을 식별할 수 있습니다. 모델 관리는 배포할 모델의 버전 관리, 비교 및 선택을 지원합니다. 데이터 계보는 입력 데이터의 무결성을 보장하고 필요한 경우 원래 데이터 소스로 거슬러 올라갈 수 있는 기능을 제공합니다.
메타데이터 저장소는 또한 플롯, 시각화, 보고서, 로그 등 머신러닝 수명 주기 동안 생성되는 다양한 아티팩트를 관리할 수 있습니다. 이러한 아티팩트를 저장하면 머신러닝 프로세스를 더 잘 이해하고 분석하며 문제를 해결하는 데 도움이 됩니다. 저장된 메타데이터를 MLflow Tracking와 통합하여 수행한 실험 관리와 모델 성능을 모니터링할 수 있습니다.
2.5.3 소스코드 버전 관리
MLOps에서 버전 관리의 대상이 되는 소스 코드는 머신러닝 파이프라인과 같은 주로 Python으로 구현된 머신러닝 모델 개발에 사용하는 소스 코드입니다. 기존의 소프트웨어 소스 코드 버전 관리와 동일하게 분산 버전 관리 시스템인 Git을 소스코드 버전 관리에 사용합니다.
GitHub는 가장 잘 알려진 Git 호스팅 서비스로, 코딩을 해본 사람이라면 누구나 한 번쯤 사용해본 경험이 있을 것입니다. 유료로 제공되는 온프레미스 설치 솔루션인 GitHub Enterprise Server도 존재하지만, 여기서는 GitHub 웹 서비스 사용 방법에 초점을 두겠습니다.
GitLab은 GitHub와 유사한 서비스를 제공하지만 온프레미스 환경에서도 무료로 설치하여 사용할 수 있다는 장점이 있습니다. 온프레미스 환경에서 소스 코드 리포지토리를 관리 해야하면 GitLab을 권장합니다.
2.5.4 분산 학습
분산 학습은 CPU, GPU 또는 여러 대의 머신에서 여러 컴퓨팅 리소스를 활용하여 딥러닝 모델을 효율적으로 학습하는 기술입니다. 이 접근 방식은 학습을 가속화하고 더 큰 데이터 세트를 처리할 수 있으므로 데이터 과학자는 단일 머신을 사용하는 것보다 더 빠르고 효과적으로 모델을 학습할 수 있습니다.
분산 학습에는 데이터 병렬 처리와 모델 병렬 처리라는 두 가지 주요 접근 방식이 있습니다. 데이터 병렬 처리는 훈련 데이터 세트를 더 작은 하위 집합으로 나누고, 각 노드가 별개의 하위 집합을 동시에 처리하는 방식입니다. 모델 파라메터는 모든 노드에서 공유 및 동기화됩니다. 반면에 모델 병렬화는 모델 자체를 여러 노드에 걸쳐 분할하고 각 노드가 모델의 특정 부분을 담당하여 해당 부분에 대한 전체 데이터 세트를 처리합니다. 데이터 병렬 처리와 모델 병렬 처리를 함께 사용하면 분산 학습 효율성을 극대화할 수 있습니다.
TensorFlow, PyTorch, Apache MXNet과 같은 여러 딥러닝 프레임워크에서 분산 학습을 기본 제공하고 있습니다. 딥러닝 프레임워크에서 제공하는 분산 학습은 설정이 복잡하거나 확장성과 프레임워크 종속성이 있으므로 Ray Train과 Horovod이라는 도구를 사용하여 분산 학습을 하는 방법을 알아 보겠습니다.
‘5장. 머신러닝 모델 실험과 개발’ 미리 보기
- 머신러닝 실험 환경: JupyterHub, Kubeflow Notebooks, TensorBoard
- 메타데이터 저장소: MLflow Tracking
- 소스코드 리포지토리: GitHub, GitLab
- 분산 학습: Ray Train, Horovod
2.6 머신러닝 모델 배포와 서빙
2.6.1 머신러닝 파이프라인
머신러닝 파이프라인은 머신러닝 모델 학습 및 배포하는 일련의 프로세스를 자동화하는 상호 연결된 단계입니다. 머신러닝 프로젝트의 여러 단계 간에 원활한 전환을 보장하여 모델 개발 및 운영을 간소화합니다. MLOps에서 머신러닝 파이프라인의 주요 목표는 협업, 유지 관리 및 재현성을 제공하는 동시에 지속적 학습(Continuous Training, Continual Learning)으로 머신러닝 제품화에 소요되는 시간을 단축하는 것입니다.
머신러닝 파이프라인은 일반적으로 다음 단계로 구성됩니다:
- 데이터 추출: 이 단계에서는 데이터베이스, 파일 또는 API와 같은 다양한 소스에서 원시 데이터를 수집합니다. 이 데이터는 머신러닝 모델을 학습하고 평가하기 위한 기초가 됩니다. 데이터의 품질과 관련성은 모델의 성능에 큰 영향을 미칩니다.
- 데이터 전처리: 데이터 추출 후에는 데이터를 정리, 변환 및 보강하여 모델 학습에 의미 있는 기능을 생성하는 전처리 단계를 수행합니다. 전처리에는 결측값 처리, 범주형 변수 인코딩, 스케일링, 정규화, 피처 선택 등의 작업이 포함될 수 있습니다. 이 단계는 머신러닝 모델의 성능을 향상시킬 수 있는 강력한 데이터 세트를 만드는 것을 목표로 합니다.
- 모델 학습: 사전 처리된 데이터를 사용하여 모델 훈련 단계에서는 적절한 알고리즘을 선택하고 하이퍼파라미터를 조정합니다. 교차 검증과 같은 기술을 사용하여 주어진 데이터 세트에서 최상의 성능을 보장하도록 모델을 훈련하고 최적화합니다. 이 단계에서는 훈련 프로세스를 모니터링하여 과적합 또는 과소적합을 방지하고 최적의 결과를 얻기 위해 적절히 조정하는 작업도 포함됩니다.
- 모델 평가: 모델이 학습되면 다양한 메트릭(예: 정확도, 정밀도, 리콜, F1 점수)과 검증 기법을 사용하여 성능을 평가합니다. 평가 프로세스는 모델이 원하는 수준의 성능을 충족하는지, 배포 전에 추가 개선이 필요한지 파악하는 데 도움이 됩니다.
- 모델 배포: 모델 배포 단계는 학습후 검증된 모델을 모델 레지스트에 등록하는 것 입니다. 등록된 모델은 모델 레지스트리에서 버전 관리가 이루어지며, 추후 모델 서빙 과정에서 REST API 서비스나 서버리스 함수등으로 프로덕션 환경에 통합되어 사용 됩니다.
머신러닝 파이프라인을 구현하기 위해 정말 많은 도구들이 있습니다. 우리는 그 중 Airflow와 Kubeflow Pipeline을 MLOps 시스템에 설치하고, 각 도구별 샘플 파이프라인을 만들어 보겠습니다.
2.6.2 CI/CD
지속적 통합(CI) 및 지속적 배포(CD)는 머신러닝 모델의 개발 및 배포를 간소화하는 MLOps 시스템의 필수 관행입니다. CI는 코드 변경 사항을 지속적 통합하고 코드베이스의 빌드 및 테스트를 자동화하여 충돌이나 버그의 가능성을 줄입니다. CD는 코드 변경 사항을 프로덕션 또는 스테이징 환경에 자동으로 배포하여 원활한 업데이트 및 롤아웃을 보장합니다.
MLOps에서 CI/CD와 기존 소프트웨어 개발의 CI/CD간의 가장 큰 차이점은 CI/CD 대상이 머신러닝 파이프라인이라는 점 입니다. 머신러닝 파이프라인도 큰 의미에서는 머신러닝 모델을 위한 일종의 CI/CD 워크플로우인데, CI/CD 대상이 머신러닝 파이프라인이라니 혼란스럽습니다. 6장에서 머신러닝 파이프라인과 파이프라인 CI/CD 워크플로우를 작성하면서 이에 대해 알아보겠습니다.
고수준 MLOps에서 권장하진 않지만, 제 개인적인 경험으로는 아직 현업에서는 모델 단위 배포 및 CI/CD도 유용합니다. 모델 단위 배포는 CI/CD 워크플로우가 일종의 머신러닝 파이프라인이 되고, 운영 환경에 머신러닝 파이프라인이 존재하지 않습니다. 모델 단위 배포에서 CI/CD는 MLOps 시스템의 특장점인 CT(Continuous Training, 지속적 학습)을 하지 못하므로 데이터/컨셉 드리프트 발생시 즉각적인 대응이 불가능 합니다. 즉, 데이터나 컨셉 드리프트가 거의 발생하지 않거나 매우 드물게 일어나는 모델이라면 모델 단위 배포도 충분히 고려할만 합니다.
CI/CD에 사용하는 도구는 기존 DevOps 도구와 동일 합니다. Jenkins와 Github Action을 사용하여 소스코드 리포지토리와 통합하여 CI/CD 워크플로우를 작성해 보겠습니다.
2.6.3 모델 레지스트리
모델 레지스트리는 수명 주기 동안 머신러닝 모델을 관리하기 위한 중앙 집중식 저장소입니다. 모델 버전, 메타데이터 및 관련 아티팩트를 체계적으로 저장, 추적 및 관리할 수 있는 방법을 제공함으로써 MLOps 프로세스에서 중요한 역할을 합니다. 모델 레지스트리를 통해 머신러닝 팀은 모델 개발에서 효율적으로 협업하고, 모델 버전 관리를 유지하며, 프로덕션 환경에 모델을 쉽게 배포할 수 있습니다.
모델 레지스트리의 주요 기능 중 하나는 버전 관리로, 데이터 과학자와 엔지니어는 시간에 따른 ML 모델 및 관련 메타데이터의 변경 사항을 추적할 수 있습니다. 버전 관리를 통해 사용자는 모델 반복에 대한 기록 기록을 유지하여 필요할 때 이전 버전과 비교, 모니터링 및 롤백하는 프로세스를 간소화할 수 있습니다. 이를 통해 모델을 쉽게 재현할 수 있으므로 전반적인 투명성과 책임성이 향상됩니다.
모델 레지스트리에는 버전 관리 외에도 모델에 태그 지정, 메타데이터, 분류 등 모델 구성을 위한 정보가 포함되어 있는 경우가 많습니다. 이러한 정보를 사용하여 사용자는 성능 지표, 데이터 소스 또는 알고리즘 유형과 같은 기준에 따라 특정 모델 버전을 빠르게 검색하여 찾을 수 있습니다. 모델 레지스트리로 수많은 모델을 효과적으로 관리하여 주어진 작업이나 배포에 가장 적합하거나 가장 우수한 모델을 선택하는 프로세스를 간소화할 수 있습니다.
모델 레지스트리는 배포할 모델을 저장하고 액세스할 수 있는 중앙 집중식 위치를 제공함으로써 모델 배포 및 모니터링에서 중요한 역할을 합니다. 모델 레지스트리는 배포 도구, API 및 플랫폼과 통합되는 경우가 많으므로 프로덕션 환경과 원활하게 통합 할 수 있습니다. 또한 모델 레지스트리를 사용하여 성능 메트릭을 추적하고 배포된 모델의 상태를 모니터링하여 모델 유지 관리 및 재학습에 유용한 인사이트를 제공할 수 있습니다.
MLflow Model Registry를 모델 레지스트리 도구로 사용 할 것 입니다. MLflow Model Registry에 학습된 모델을 어떻게 등록하고 관리하는지 알아 보겠습니다.
2.6.4 모델 서빙
모델 서빙은 학습된 머신러닝 모델을 실제 프로덕션 환경에서 사용할 수 있게 하는 MLOps 시스템의 중요한 구성 요소입니다. 여기에는 모델을 프로덕션 또는 스테이징 환경에 배포하고, API를 통해 모델을 노출하며, 짧은 지연 시간과 많은 처리량을 보장하는 것이 포함됩니다. 모델 서빙을 통해 조직은 머신러닝 모델을 다양한 시스템과 통합하여 머신러닝을 효과적으로 활용할 수 있습니다.
모델 서빙의 주요 측면에는 컨테이너화 또는 서버리스 플랫폼과 같은 배포 전략, 원활한 업데이트 및 롤백을 위한 버전 관리, 실시간 또는 수요가 많은 사용 사례를 처리할 수 있는 확장성 등이 포함됩니다. 일관된 API 인터페이스를 제공하고 배치, 캐싱, 로드 밸런싱과 같은 기술을 사용하면 머신러닝 기능을 애플리케이션과 서비스에 효율적으로 통합하는 데 도움이 됩니다.
FastAPI, BentoML, Seldon Core 도구들을 사용하여 모델 레지스트리에 등록된 모델을 가져와 REST API 예측 서비스를 만들어 보겠습니다.
2.6.5 모니터링
모니터링은 머신러닝 모델의 개발, 훈련, 배포 및 유지 관리에 걸친 성능과 품질을 추적하고 분석하는 중요한 과정입니다. 이를 통해 조직은 시간의 경과와 함께 모델의 정확성과 안정성을 평가하고, 모델이 예상대로 작동하는지, 그리고 수정 및 개선이 필요한 부분이 있는지 판단할 수 있습니다.
MLOps 시스템에서 주요 모니터링 대상은 데이터, 모델 성능, 그리고 시스템입니다. 실제 운영 환경에서는 이러한 모든 항목을 모니터링해야 하지만, 본 글에서는 모델 성능 모니터링에 중점을 두어 설명하겠습니다.
모니터링 도구가 수집한 메트릭을 기반으로 특정 조건이 충족되면 머신러닝 파이프라인을 트리거하여 지속적인 학습(Continuous Training, CT)을 수행할 수 있습니다. 이러한 조건은 일정 시간 경과, 모델 성능의 변화, 데이터 드리프트 등이 될 수 있습니다.
모니터링 도구는 매트릭 수집과 모니터링 도구로 Prometheus + Grafana, 로그 수집과 모니터링 도구로 ELK 스택 (Elasticsearch, Logstash, Kibana)을 설치하여 모델 성능과 REST API 예측 서비스 로그를 모니터링 할 것 입니다.
‘6장. 머신러닝 모델 배포와 서빙’ 미리 보기
- 머신러닝 파이프라인: AIrflow, Kubeflow Pipeline
- CI/CD: Jenkins, Github Action
- 모델 레지스트리: MLflow Model Registry
- 모델 서빙: FastAPI, BentoML, Seldon Core
- 모니터링: Prometheus + Grafana, ELK Stack
2.7 MLOps 시스템과 도구들
<그림 2-2>는 이 글의 전체 시리즈를 아우르는 MLOps 시스템 도구들을 보여줍니다. 여기에 나열된 것 외에도 수많은 MLOps 관련 도구가 있지만, 여기서는 주로 1) 온프레미스 환경에 설치 가능하고 2) 상대적으로 많은 사용자 기반을 가진 도구를 선정 했습니다. 여러 도구가 포함되어 있는 구성 요소는 프로젝트 요구 사항에 가장 적합한 단일 도구를 선택하여 사용하는 것이 좋습니다. 예를 들면, 머신러닝 파이프라인 도구로 Kubeflow Pipeline과 Airflow 중 하나를 선택하여 사용 할 수 있습니다.
"제로부터 시작하는 MLOps 도구와 활용" 이 글의 제목을 왜 이렇게 지었는지 궁금하지 않으신가요? 그 이유는 아무것도 없는 상태에서, 즉 제로 상태에서 시작하여 MLOps 도구들을 하나씩 설치 및 설정하여 MLOps 시스템을 구축해 나가는, Step-by-step 가이드이기 때문입니다. 여러분은 이 글을 통해 저와 함께 MLOps 시스템을 하나씩 만들어 나갈 것입니다. 다음 장인 3장 컴퓨팅 인프라 - 쿠버네티스에서 MLOps 도구들이 실행되는 서버 하드웨어를 준비하고, 쿠버네티스 클러스터를 만드는 것부터 시작해 보겠습니다.
2.8 요약
- MLOps 시스템은 피처 스토어, 머신러닝 실험 환경, 소스 코드 리포지토리, CI/CD, 머신러닝 파이프라인, 메타데이터 저장소, 모델 레지스트리, 모델 서빙, 모니터링 및 트리거와 같은 구성 요소로 이루어져 있습니다.
- MLOps 시스템의 컴퓨팅 인프라에서는 확장성과 편의성 면에서 클라우드를 사용하는 것이 바람직하지만, 이 글에서는 클라우드 MLOps 솔루션의 비용 부담을 줄이기 위해 온프레미스 환경에서 쿠버네티스 클러스터를 구축하여 사용할 것입니다. (3장. 컴퓨팅 인프라 - 쿠버네티스)
- MLOps 시스템에서 데이터 관리는 데이터 품질, 일관성, 신뢰성을 보장하는 핵심 요소로, 데이터 라벨링, 데이터 버전 관리, 피처 스토어와 같은 구성 요소를 포함합니다. (4장. 데이터 관리)
- MLOps 시스템에서 머신러닝 모델 실험과 개발은 머신러닝 실험 환경, 메타데이터 저장소, 소스코드 리포지토리, 분산 학습 구성 요소와 도구들로 이루어집니다. (5장. 머신러닝 모델 실험과 개발)
- MLOps 시스템에서 머신러닝 모델 배포와 서빙은 머신러닝 파이프라인, CI/CD, 모델 레지스트리, 모델 서빙, 모니터링 구성 요소와 도구들로 수행 합니다. (6장. 머신러닝 모델 배포와 서빙)