ZenML 스텝과 파이프라인

ZenML 스텝과 파이프라인

ZenML에서 워크플로를 만든다는 것은 곧 스텝(step)파이프라인(pipeline) 이라는 두 가지를 코드로 정의하는 일이에요. 스텝은 재사용 가능한 계산 단위이고, 파이프라인은 스텝들을 엮은 방향성 비순환 그래프(DAG)예요. 이 둘을 함께 쓰면 머신러닝 워크플로를 정의하고, 버전을 관리하고, 실행할 수 있어요.

출처: ZenML Steps & Pipelines

스텝과 파이프라인의 관계

스텝과 파이프라인은 분명한 계층을 이루어요.

  • 스텝은 데이터를 불러오고, 처리하고, 모델을 훈련하는 것처럼 특정 작업을 수행하는 개별 함수예요.
  • 파이프라인은 이 스텝들을 정의된 순서로 연결해요. 한 스텝의 출력이 다음 스텝의 입력으로 흘러가도록 말이죠.
  • 각 스텝이 만들어내는 결과물은 아티팩트(artifact) 로 추적·버전 관리되고, 파이프라인 실행을 넘어 재사용될 수 있어요.

비유하자면 스텝은 레고 브릭 하나, 파이프라인은 브릭 여러 개를 연결해서 만든 완성된 구조물이에요.

기본 스텝 정의

스텝은 파이썬 함수에 @step 데코레이터를 붙여서 만들어요. 가장 단순한 형태는 이렇게 생겼어요.

from zenml import step

@step
def my_step() -> int:
    return 42

스텝은 입력으로 아티팩트(이전 스텝의 출력)를 받기도 하고, 별도 설정값을 파라미터로 받기도 해요. 스텝의 첫 실행 결과는 아티팩트 스토어에 저장되고, 같은 입력이 들어오면 재실행 대신 캐시된 결과를 재사용할 수 있어요.

기본 파이프라인 정의

파이프라인은 스텝들을 조합한 파이썬 함수에 @pipeline 데코레이터를 붙여서 만들어요.

from zenml import pipeline

@pipeline
def my_pipeline():
    my_step()

파이프라인은 파이썬 함수처럼 그냥 호출하면 실행돼요. 다만 파이프라인 함수 안에서는 스텝을 호출하는 것만 할 수 있고, 그 밖의 임의 파이썬 계산은 허용되지 않아요. 스텝에 넘기는 값은 이전 스텝의 출력이거나, JSON으로 직렬화 가능한 직접 값이에요.

파라미터와 아티팩트의 차이

스텝에 들어오는 입력은 두 종류로 나뉘어요.

  1. 아티팩트(Artifacts) — 같은 파이프라인 안의 다른 스텝이 만들어낸 출력이에요. 추적·버전 관리되고 아티팩트 스토어에 저장돼요. 데이터셋·훈련된 모델·평가 지표 같은 것들이 여기 해당해요.
  2. 파라미터(Parameters) — 스텝을 호출할 때 직접 넘겨주는 설정값이에요. 학습률·배치 크기·하이퍼파라미터 같은 단순 값으로, 별도 아티팩트로 추적되지는 않지만 파이프라인 실행과 함께 기록돼요.

이 구분을 이해하면 「실행마다 바뀌는 값」과 「데이터 흐름」을 분리해서 설계할 수 있어요.

더 알아보기