[Kubeflow] Kubeflow 공부기 : 데브옵스 엔지니어의 MLOps 입문 (2) 구성요소와 Pipeline

Kubeflow 공부기 : 데브옵스 엔지니어의 MLOps 입문
지난 포스팅에서는 Kubeflow를 EKS 환경에 설치하고 대시보드까지 확인해봤습니다.
이번 포스팅에서는 Kubeflow의 주요 구성요소들이 실제로 어떤 역할을 하고, 내부에서 어떻게 연결되는지, 그리고 파이프라인은 어떤 흐름으로 구성되는지 중심으로 정리하려고 합니다.
저번 포스팅에서 인프라 설정에대해서 다뤘다면, 여기서는 실제 기능을 직접 다뤄보면서 경험한 흐름에 집중하여 공부해봤습니다.
Kubeflow 구성요소, 실제 워크플로우 속에서 이해하기
처음에 대시보드에 접속하면 메뉴가 정말 많고, 뭐가 뭔지 와닿지 않았습니다.
실제로 써보면서 느낀 건, 이 모든 구성요소가 결국 하나의 머신러닝 워크플로우 안에서 유기적으로 연결돼있다는 점이었습니다.
1) Notebooks - 실험을 시작하는 공간

Jupyter 환경을 클릭 한 번으로 생성할 수 있고, GPU, 이미지, 네트워크 설정 등도 원하는 대로 조정할 수 있습니다.
실제로 연결을 해보면 기존에 쓰던 로컬 Jupyterㅇ와 거의 비슷한 느낌인데, 다른 점은 이 환경이 쿠버네티스 안에서 완전히 관리된다는 것입니다.
노트북 내부에서 파이프라인 코드도 작성이 가능하고, 이후 실험을 반복하거나 파라미터 튜닝으로 넘어갈 수 있는 출발점 역할을 합니다.
2) Katib - 하이퍼파라미터 튜닝 자동화

Katib는 실험을 자동으로 여러 번 돌려주는 기능입니다. 이름만 보면 무슨 AI 모델 같은데, 실제로는 머신러닝 실험의 자동 반복 담당자같은 역할을 합니다.
사용자가 정의한 파라미터 범위와 목표 metric을 기반으로 여러 조합을 자동으로 실험하고 결과를 비교해줍니다.
Random, Grid, Bayesian 등 다양한 search 알고리즘도 선택 가능합니다.
3) Serving (KServe) - 모델을 서비스로 배포
Kserve는 모델을 학습한 이후 실제 서비스 형태로 배포할 수 있는 기능입니다.
REST API로 외부와 통신할 수 있도록 모델을 컨테이너로 띄워줍니다.
단순하게 쓰기엔 약간 설정이 필요하지만, 쿠버네티스에 익숙하다면 활용도는 높다고 느꼈습니다.
4) Experiments / Artifacts / Volumes 등
- `Experiments`는 파이프라인 실행 결과를 묶어서 관리하는 단위
- `Artifacts`는 각 실행 결과에서 저장된 파일, 모델 등 기록
- `Volumes`는 각 노트북이나 파이프라인에서 사용하는 저장소
메뉴 하나하나가 독립된 기능이라기 보다는, 전체 워크플로우의 로그와 이력을 쌓는 백엔드 기능에 가까운 느낌이었습니다.
kubeflow 대시보드에 있는 기능들이 처음엔 낯설었지만, 각 구성요소가 어떻게 연결되는지 흐름을 따라가다보면 자연스럽게 "이 모든걸 하나로 묶어서 관리하고 싶은데?" 라는 생각이 들더라고요.
노트북에서 실험하고, Katib로 튜닝하고, 모델을 배포하고... 이런 반복되는 과정을 자동화하는 방법이 바로 Kubeflow에서 말하는 파이프라인(Pipeline) 입니다.
파이프라인(Pipeline) 구성
Kubeflow 구성요소 중에서도 가장 기대했던 기능이 바로 파이프라인이었습니다.
단순히 여러 단계의 작업을 묶어주는 정도라고 생각했는데, 실제로 사용해보니 훨씬 구조적이고 체계적인 도구라는 걸 알게 됐어요.
사용자는 파이썬 코드 기반의 DSL(Domain-Specific Language)을 통해 각 단계를 컴포넌트로 정의하고, 그 흐름을 코드로 구성할 수 있습니다.
💡 DSL(Domain-Specific Language)
DSL은 Domain-Specific Language의 줄임말로, 특정한 목적(domain)에 최적화된 프로그래밍 언어나 문법체계를 말합니다. 일반적인 범용 언어(ex. Python, Java)와 달리, DSL은 한 가지 문제나 작업 영역에 집중해서 간결하고 직관적으로 표현할 수 있도록 설계돼요
Kubeflow에서는 머신러닝 워크플로우(=파이프라인)를 정의하기 위해 Python 기반의 DSL을 제공합니다.
이건 완전히 새로운 언어가 아니라 Python 함수 위에 데코레이터를 붙여 Kubeflow가 해석 가능한 형태의 파이프라인으로 바꿔주는 식입니다.
즉, 파이썬을 DSL처럼 쓰는 방식으로, Python 기반으로 파이프라인 실행을 위한 메타데이터 + 실행 정의를 만들어내는 역할을 합니다. Kubeflow는 이 정의를 읽어서 실행합니다.
📌 DSL 기반 파이프라인 구성
제일 단순한 형태인 "문자열 처리 -> 출력" 파이프라인을 구성해보았습니다.
(이해에 집중하고자 데이터나 모델은 사용하지 않았습니다.)
1) kfp 설치
먼저 `kfp`를 install 해준 후 import 해줍니다. kfp는 Kubeflow Pipelines SDK로 DSL 도구입니다.
설치는 `pip install kfp`로 가능합니다.
import kfp
from kfp import dsl
2) 파이프라인 컴포넌트 등록
`@dsl.component` 데코레이터는 해당 함수를 하나의 파이프라인 컴포넌트로 등록합니다.
실제 실행 시, 독립된 컨테이너로 실행되며 return 값은 Kubeflow 내부에서 output artifact로 저장됩니다.
여기서 `artifact`는 결과물(데이터, 파일 등) Kubeflow가 따로 저장하고 추적할 수 있게 만든 단위를 말합니다.
@dsl.component
def preprocess_op(text: str) -> str:
return text.lower()
해당 예제는 test를 받아서 소문자로 바꿔주는 아주 간단한 처리지만, 실제 Kubeflow에서는 이 함수 하나가 컨테이너로 빌드돼서 Pod로 실행됩니다.
@dsl.component
def train_op(clean_text: str):
print(f"Training on: {clean_text}")
두번째 컴포넌트에서는 전처리된 텍스트를 받아서 학습했다고 "가정"하는 간단한 출력입니다.
3) 파이프라인 정의
컴포넌트를 정의했으면 전체 파이프라인 흐름을 정의합니다. DAG(Directed Acyclic Graph) 형태로 실행 순서와 의존성을 지정할 수 있습니다.
@dsl.pipeline(name="basic-text-pipeline")
def text_pipeline(text: str = "Kubeflow Is COOL"):
lower = preprocess_op(text=text)
train_op(clean_text=lower.output)
- `text_pipeline()` 문자열을 받고
- 그 값을 `preproces_op()`에 전달합니다.
- `preprocess_op()`의 결과는 `.output`을 통해 `train_op()`로 전달됩니다.
- 이 `.output`은 그냥 파이썬 return 값이 아니라, Kubeflow가 추적하는 결과물이기 때문에 반드시 `.output`으로 접근해야합니다.
✅ 주의사항
Kubeflow Pipelines V2에서는 컴포넌트을 인스턴스화 할때는 키워드 인자(Keyword arguments)를 사용해야합니다.

Kubeflow는 내부적으로 파라미터이름을 기반으로 DAG와 파이프라인 구조를 구성하기 때문에 이름없는 인자를 쓰면 의도한 바를 제대로 해석할 수 없어 에러를 발생시킵니다.
❌ `lower = preprocess_op(text)`
⭕ `lower = preprocess_op(text=text)`
🧩 마무리하며
이번 포스팅에서는 Kubeflow의 핵심 구성 요소들과 파이프라인 작성 방식에대해 간단히 정리해보았습니다.
DSL 기반 파이프라인을 직접 작성해보며 전체적인 작성법에 대해 이해했습니다.
실제 Kubeflow의 흐름을 확인 하기 위해선 작성한 파이프라인을 실행해봐야하는데요...
사실 kfp로 파이프라인에 실행하는 것 까지 이번 포스팅에 작성을 하려고 했었는데 또 까다로운 권한 문제가 발생하여 ... 😂 매우 길어질 것 같아 다음 포스팅에서 따로 정리해보고자 합니다.
오늘도 읽어주셔서 감사합니다. 😊
'🤖 AI' 카테고리의 다른 글
| [AI] 챗봇 프로젝트: GCP를 활용한 파이썬 챗봇 만들기 (1) 기획 단계 (1) | 2025.07.28 |
|---|---|
| [Kubeflow] Kubeflow 공부기 : 데브옵스 엔지니어의 MLOps 입문 (3) Pipeline 실행하기 (5) | 2025.07.07 |
| [Kubeflow] Kubeflow 공부기 : 데브옵스 엔지니어의 MLOps 입문 (1) kubeflow 알아보고 설치하기 (1) | 2025.06.24 |
| [Kubeflow] Kubeflow 공부기 : Kubeflow on EKS - 설치 중 발생한 이슈 사항 정리 (0) | 2025.06.23 |
| [CrewAI] CrewAI 시작하기 (1) | 2024.11.19 |