[MLOps] Kubeflow Pipiline 소개
Kubeflow 개요
Kubeflow는 Kubernetes 상에서 머신러닝(ML) 워크플로우를 구축하고 배포하기 위한 오픈소스 플랫폼입니다.
이름에서 알 수 있듯이, Kubeflow는 ‘Kubernetes’와 ‘TensorFlow’를 결합하여 탄생했으며, 원래는 Google이 Kubernetes에서 TensorFlow 작업을 원활하게 수행할 수 있도록 개발했습니다.
현재는 다양한 머신러닝 프레임워크를 지원하며, Kubeflow는 ML 모델의 개발, 훈련, 배포 및 관리에 필요한 모든 요소를 통합하여 제공합니다.
Kubeflow 주요 특징
Kubernetes의 이점을 머신러닝에 통합
Kubeflow는 Kubernetes의 확장성, 가용성, 관리 용이성을 활용하여 ML 워크플로우를 지원합니다.
Kubernetes의 컨테이너 오케스트레이션 기능을 통해 ML 작업을 효율적으로 배포하고 관리할 수 있습니다.
End-to-end 머신러닝 파이프라인 관리
데이터 준비, 모델 training, 하이퍼파라미터 튜닝, 모델 serving 등 머신러닝의 전체 라이프사이클을 관리하는 통합 환경을 제공합니다.
이를 통해 데이터 사이언티스트, 머신러닝 엔지니어, 데이터 엔지니어들이 협력하여 효율적으로 작업할 수 있습니다.
모든 환경에서 일관된 운영
Kubeflow는 클라우드, 온프레미스, 하이브리드 환경에서 모두 동일하게 동작하도록 설계되었습니다.
이를 통해 특정 환경에 구애받지 않고, 동일한 ML 워크플로우를 구축하고 실행할 수 있습니다.
확장성과 유연성 제공
다양한 머신러닝 프레임워크와 도구를 지원하여 사용자가 원하는 구성 요소를 선택하고 확장할 수 있도록 합니다.
Kubeflow의 주요 구성요소
Kubeflow Pipelines
복잡한 머신러닝 워크플로우를 정의하고 자동화하기 위한 도구입니다.
파이프라인을 구성하여 데이터 전처리, 모델 훈련, 검증 및 배포 등 일련의 작업을 순서대로 실행할 수 있습니다.
파이프라인은 코드로 정의되며, 다양한 컴포넌트를 재사용할 수 있어 관리와 유지 보수가 용이합니다.
KFServing (KServe)
학습된 모델을 Kubernetes 클러스터에서 실시간으로 서빙할 수 있는 기능을 제공합니다.
이는 모델을 API 엔드포인트로 노출시켜 애플리케이션에서 쉽게 사용할 수 있도록 합니다.
KFServing은 스케일링, 롤백, 모니터링 등의 기능을 통해 모델 서빙을 안정적으로 관리합니다.
Katib
하이퍼파라미터 튜닝 및 자동 머신러닝(AutoML)을 위한 도구입니다.
Katib을 사용하면 다양한 하이퍼파라미터 조합을 자동으로 탐색하여 최적의 모델 성능을 찾을 수 있습니다.
TFJob, PyTorchJob
TensorFlow 및 PyTorch와 같은 특정 머신러닝 프레임워크를 Kubernetes에서 실행할 수 있도록 지원합니다.
이를 통해 대규모 분산 학습이 가능해지며, 클러스터 리소스를 효율적으로 사용할 수 있습니다.
Noteboos
Jupyter Notebooks 환경을 Kubernetes에서 호스팅하여 데이터 사이언티스트가 브라우저를 통해 데이터를 탐색하고, 모델을 개발할 수 있도록 합니다.
이러한 노트북 환경은 쉽게 확장 가능하며, Kubeflow의 다른 구성요소와 통합되어 더 효율적인 워크플로우를 지원합니다.
Kubeflow Pipeline
Kubeflow Pipelines는 Kubeflow의 핵심 구성 요소 중 하나로, 머신러닝 워크플로우를 정의하고 관리할 수 있는 도구입니다.
이를 통해 사용자는 복잡한 머신러닝 작업을 단계별로 정의하고, 이러한 작업들을 자동화된 파이프라인으로 구현할 수 있습니다.
Kubeflow Pipeline 주요 특
워크플로우 정의 및 관리
Kubeflow Pipelines는 Python SDK를 사용해 머신러닝 파이프라인을 정의합니다.
사용자는 파이프라인을 코드로 작성하고, 이를 통해 데이터 전처리, 모델 학습, 평가, 배포 등의 단계를 체계적으로 구성할 수 있습니다.
각 단계는 컨테이너화된 컴포넌트로 실행되며, 이는 Kubernetes 클러스터 상에서 배포됩니다.
재사용성과 모듈화
파이프라인의 각 단계는 독립적인 컴포넌트로 설계되어, 다양한 파이프라인에서 재사용이 가능합니다.
이러한 모듈화는 코드를 효율적으로 관리하고 유지할 수 있도록 돕습니다.
컴포넌트 간의 명확한 인터페이스를 정의하여, 복잡한 워크플로우를 쉽게 이해하고 관리할 수 있습니다.
파라미터화와 실험 관리
파이프라인의 각 단계에서 파라미터를 사용해 다양한 실험을 쉽게 수행할 수 있습니다.
예를 들어, 모델 학습 단계에서 하이퍼파라미터를 변경하여 여러 실험을 자동으로 실행할 수 있습니다.
Kubeflow Pipelines는 이러한 실험 결과를 체계적으로 관리하고 비교할 수 있도록 해줍니다.
자동화와 오케스트레이션
전체 파이프라인을 자동으로 실행하며, 각 단계의 종속성을 관리하고 적절한 순서로 작업을 실행합니다.
이를 통해 복잡한 워크플로우를 쉽게 자동화할 수 있습니다.
실패한 작업은 재시도하거나 중단할 수 있으며, 이를 통해 안정적인 운영이 가능합니다.
시각화 및 UI 제공
Kubeflow Pipelines는 웹 기반의 UI를 통해 파이프라인을 시각화하고 관리할 수 있습니다.
사용자 친화적인 인터페이스를 통해 파이프라인의 실행 상태, 로그, 메트릭 등을 쉽게 확인할 수 있습니다.
결과의 시각화도 지원하며, 예를 들어 모델 성능 메트릭을 그래프로 표현해줍니다.
Runs와 Executions
Kubeflow에서 “Runs”와 “Executions”은 파이프라인 실행과 관련된 용어로, 각각 다소 다른 의미와 사용 사례를 가지고 있습니다.
이 두 개념을 명확히 이해하는 것은 Kubeflow Pipelines를 효과적으로 사용하는 데 중요합니다.
Runs (실행)
Runs는 전체 파이프라인의 한 번의 실행을 나타냅니다.
파이프라인 실행의 결과와 메타데이터를 관리하고 추적하는 데 사용됩니다.
하나의 파이프라인 정의를 기반으로 수행되는 전체 작업의 실행 단위입니다.
특징
전체 파이프라인의 흐름을 포함
파이프라인의 시작과 끝을 포함한 모든 단계를 포함
각 단계는 여러 작업으로 구성될 수 있음
사용 예시
특정 데이터셋에 대한 전체 모델 학습 및 평가 프로세스를 한 번 실행한 결과.
Executions (실행 단위)
Executions는 파이프라인의 개별 단계(step) 또는 작업(task)의 실행을 나타냅니다.
각 실행 단위는 파이프라인 내에서 독립적으로 수행되는 작업입니다.
파이프라인의 특정 단계 또는 작업의 실행을 나타냅니다.
특징
파이프라인 내의 개별 컴포넌트의 실행을 의미
하나의 Run 내에는 여러 Executions이 있을 수 있음
각 Execution은 특정 작업을 수행하고 결과를 생성
사용 예시
데이터 전처리 단계, 모델 학습 단계, 모델 평가 단계 등 파이프라인의 각 단계의 실행.
주요 차이점
Run: 전체 파이프라인 실행을 포함합니다. 시작부터 끝까지 모든 단계를 포함한 실행 단위입니다.
Execution: 파이프라인 내 개별 단계 또는 작업의 실행을 의미합니다. Run의 부분집합입니다.
Experiments
Kubeflow Pipelines의 Experiments (실험) 메뉴는 여러 실행(run)을 그룹화하여 관리하고 비교할 수 있게 하는 중요한 기능을 제공합니다.
Experiments는 머신러닝 워크플로우에서 다양한 하이퍼파라미터 설정, 데이터셋 변형, 모델 아키텍처 등을 테스트하고 그 결과를 체계적으로 정리하고 분석할 수 있도록 돕습니다.
Experiments 주요 기능
실행 결과의 그룹화 및 관리
Experiments는 여러 파이프라인 실행을 하나의 그룹으로 묶어 체계적으로 관리할 수 있게 합니다.
이를 통해, 특정 실험에 속한 모든 실행 결과를 한 곳에서 모니터링하고 검토할 수 있습니다.
실험 추적
Experiments는 각 파이프라인 실행에 대한 메타데이터(예: 실행 시간, 입력 파라미터, 출력 결과 등)를 저장합니다.
이를 통해 어떤 실행이 언제, 어떤 조건에서 수행되었는지를 명확히 추적할 수 있습니다.
비교 및 분석
같은 Experiment 내의 다양한 실행 결과를 비교 분석할 수 있습니다.
예를 들어, 서로 다른 파라미터 조합으로 실행된 여러 파이프라인의 성능을 비교할 수 있습니다.
이를 통해 최적의 모델 구성 및 하이퍼파라미터를 찾는 데 도움이 됩니다.
재현성 지원
Experiments는 각 실행에 대한 기록을 보존하므로, 동일한 조건으로 실행을 재현하는 것이 용이합니다.
이는 모델 개발 및 검증 과정에서 중요한 요소로, 실험의 신뢰성을 높입니다.
성능 모니터링 및 시각화
Kubeflow Pipelines UI를 통해 Experiments에 속한 각 파이프라인 실행의 성능을 시각적으로 확인할 수 있습니다.
실행 중 생성된 메트릭을 그래프로 표시하여 모델 성능의 변화 추이를 쉽게 파악할 수 있습니다.
Recurring Runs
Recurring Runs는 Kubeflow Pipelines에서 특정 파이프라인을 주기적으로 자동 실행하도록 예약할 수 있는 기능입니다.
머신러닝 워크플로우에서는 새로운 데이터가 정기적으로 들어오거나 모델의 성능을 지속적으로 개선하기 위해 재훈련이 필요할 수 있습니다.
Recurring Runs를 사용하면 이러한 반복적인 작업을 자동으로 실행하여 최신 데이터로 모델을 업데이트하거나 정기적인 분석 작업을 수행할 수 있습니다.
Recurring Runs의 주요 기능
주기적인 파이프라인 실행
Recurring Runs는 사용자가 정의한 일정에 따라 지정된 파이프라인을 주기적으로 실행합니다.
예를 들어, 매일, 매주, 매월 등 특정 주기로 파이프라인을 실행할 수 있습니다.
유연한 스케줄링
Recurring Runs는 cron 표현식을 사용하여 실행 주기를 정의합니다.
이를 통해 매우 유연하게 스케줄을 지정할 수 있으며, 예를 들어 매일 오전 9시에 파이프라인을 실행하거나 매주 월요일에 실행하는 등의 설정이 가능합니다.
파라미터 설정
Recurring Runs에서 실행되는 파이프라인은 정적인 파라미터뿐만 아니라 동적인 파라미터도 받을 수 있습니다.
예를 들어, 파이프라인이 실행될 때마다 특정 날짜 범위의 데이터를 처리하도록 파라미터를 설정할 수 있습니다.
결과 모니터링 및 관리
각 Recurring Run의 결과는 Kubeflow Pipelines UI에서 확인할 수 있습니다.
사용자는 각 실행 결과를 검토하고 로그를 확인하며, 문제가 발생했을 경우 적절한 조치를 취할 수 있습니다.
실행 히스토리 추적
Recurring Runs는 각 실행에 대한 히스토리를 기록합니다.
사용자는 과거 실행 결과를 쉽게 추적하고 비교할 수 있으며, 이를 통해 모델의 성능 변화를 모니터링할 수 있습니다.
댓글남기기