Flyte 워크플로
Flyte 워크플로
워크플로(workflow)는 Flyte에서 태스크들의 연결 구조, 즉 태스크 간의 조율을 정의하는 단위예요. 워크플로는 입력·출력 의존 관계에 따라 태스크들을 DAG(방향성 비순환 그래프)로 엮어요. 실행할 때는 가능한 병렬성을 활용해서 태스크들을 올바른 순서로 실행해요.
출처: Flyte Workflows
워크플로 정의
워크플로는 파이썬 함수에 @workflow 데코레이터를 붙여 정의해요. 함수 안에서 태스크를 호출하고, 그 결과를 또 다른 태스크의 입력으로 넘기는 식으로 연결해요.
@fl.workflow
def my_workflow(a: int, b: int, c: int, m: int, n: int) -> int:
x = task_1(a=a, b=b, c=c)
y = task_2(m=m, n=n)
return task_3(x=x, y=y)
워크플로가 등록되면 Flyte는 태스크들의 입력·출력 의존 관계를 바탕으로 워크플로를 DAG로 컴파일해요. 그 다음 그 DAG를 따라 태스크들을 올바른 순서로, 가능한 만큼 병렬로 실행해요.
워크플로는 파이썬 함수지만 제약이 있어요
워크플로 정의는 유효한 파이썬 함수여야 해서 개발 중에는 일반 파이썬 함수처럼 로컬로 실행할 수 있어요. 하지만 DAG로 컴파일·배포되어 Flyte에서 실행되려면 파이썬 문법의 일부만 쓸 수 있어요. 엄밀히 말하면 워크플로 함수의 언어는 파이썬의 부분집합인 도메인 특화 언어(DSL)예요.
워크플로 이름과 버전
워크플로 이름은 그 코드를 정의한 경로·파일명·함수명에서 결정돼요(<folder>.<file>.<function> 형태). 워크플로를 다시 등록하면 같은 이름 아래 새 버전이 만들어지고, 워크플로의 기본 런치플랜은 항상 그 워크플로와 같은 이름을 가져요.
워크플로 검사·실행
등록된 워크플로는 CLI로 확인할 수 있어요. 예를 들어 프로젝트·도메인의 모든 워크플로를 보려면 flytectl get workflows --project <project-id> --domain <domain>을 쓰고, 특정 워크플로는 flytectl get workflow로 조회해요. Python에서는 FlyteRemote.fetch_workflow나 FlyteRemote.execute로 가져오고 실행할 수 있어요.
더 알아보기
- 태스크와 워크플로 함께 보기: Core concepts
- 실행 개념: Executions