AI/Kubeflow

Kubeflow 구성요소(Pipeline , experiment , runs , component)

칼쵸쵸 2025. 3. 7. 13:53
반응형

 

 Pipeline (파이프라인)

Kubeflow Pipeline의 핵심 개념

  • ML 워크플로우 전체를 정의하는 흐름
  • 모델 학습, 데이터 전처리, 평가, 배포 등의 작업을 연결된 Task로 구성
  • Kubeflow Pipelines (KFP) 에서 사용됨

Pipeline 예제

@dsl.pipeline(
    name="Sample ML Pipeline",
    description="A simple pipeline that trains and deploys a model"
)
def sample_pipeline():
    preprocess_task = preprocess_op()
    train_task = train_op().after(preprocess_task)
    deploy_task = deploy_op().after(train_task)
 

📌 Pipeline은 전체 ML 워크플로우를 정의하는 역할!


Experiment (실험)

Kubeflow Experiment의 개념

  • 동일한 Pipeline을 여러 번 실행하면서 파라미터를 변경하여 실험을 진행하는 개념
  • 예를 들어, 학습률(learning rate)을 다르게 설정하고 여러 실험을 수행할 수 있음
  • 같은 Pipeline을 여러 번 실행하면서 비교할 수 있는 단위

Experiment 예제

kfp.Client().create_experiment(name="my-experiment")

📌 Experiment는 여러 개의 Pipeline Runs를 포함하는 그룹!


Run (실행)

Kubeflow Run의 개념

  • Pipeline이 한 번 실행되는 단위
  • 하나의 Experiment에서 여러 개의 Run을 생성할 수 있음
  • Run마다 서로 다른 입력 데이터를 사용하여 실행 가능

Run 예제

run = client.run_pipeline(
    experiment_id=experiment.id,
    job_name="sample_run",
    pipeline_package_path="pipeline.yaml"
)

📌 Run은 하나의 Pipeline 실행을 의미!


Component (컴포넌트)

Kubeflow Component의 개념

  • Pipeline을 구성하는 개별 작업(Task)
  • 예: 데이터 전처리, 모델 학습, 모델 평가 등 각각의 단계가 Component로 정의됨
  • 각 Component는 Docker 컨테이너 기반으로 실행

Component 예제

@dsl.component
def preprocess_op():
    return dsl.ContainerOp(
        name="Preprocessing",
        image="my-preprocessing-image",
        command=["python", "preprocess.py"]
    )

📌 Component는 Pipeline 내부에서 실행되는 개별 단위(Task)!


개념 간의 관계 정리

Experiment (실험)
 ├── Run 1 (첫 번째 실행)
 │    ├── Component 1: 데이터 전처리
 │    ├── Component 2: 모델 학습
 │    ├── Component 3: 모델 배포
 │
 ├── Run 2 (두 번째 실행, 다른 파라미터)
 │    ├── Component 1: 데이터 전처리
 │    ├── Component 2: 모델 학습 (다른 학습률)
 │    ├── Component 3: 모델 배포

Pipeline → 전체 ML 워크플로우
Experiment → Pipeline을 여러 번 실행하며 비교하는 단위
Run → 한 번의 Pipeline 실행
Component → Pipeline 내부에서 실행되는 개별 작업


실전 예제 (전체 개념 적용)

아래 예제는 데이터 전처리 → 모델 학습 → 모델 배포를 포함하는 Pipeline을 정의하고 실행하는 코드입니다.

import kfp
from kfp import dsl

# 1. 데이터 전처리 Component
@dsl.component
def preprocess_op():
    return dsl.ContainerOp(
        name="Preprocessing",
        image="my-preprocessing-image",
        command=["python", "preprocess.py"]
    )

# 2. 모델 학습 Component
@dsl.component
def train_op():
    return dsl.ContainerOp(
        name="Model Training",
        image="my-training-image",
        command=["python", "train.py"]
    )

# 3. 모델 배포 Component
@dsl.component
def deploy_op():
    return dsl.ContainerOp(
        name="Deploy Model",
        image="my-serving-image",
        command=["python", "deploy.py"]
    )

# 4. Pipeline 정의
@dsl.pipeline(
    name="ML Pipeline",
    description="A sample machine learning pipeline"
)
def ml_pipeline():
    preprocess_task = preprocess_op()
    train_task = train_op().after(preprocess_task)
    deploy_task = deploy_op().after(train_task)

# 5. Pipeline 실행
client = kfp.Client()
experiment = client.create_experiment(name="ml-experiment")
run = client.run_pipeline(
    experiment_id=experiment.id,
    job_name="ml_pipeline_run",
    pipeline_package_path="pipeline.yaml"
)

결론

Pipeline ML 워크플로우 전체를 정의 (데이터 → 학습 → 배포)
Experiment Pipeline을 여러 번 실행하며 실험할 때 사용
Run 한 번의 Pipeline 실행
Component Pipeline 내부에서 실행되는 개별 Task (데이터 전처리, 학습, 배포 등)
반응형

'AI > Kubeflow' 카테고리의 다른 글

Kubeflow Pipeline, KServe SDK  (0) 2025.03.07