Metaflow 병렬 확장(Scaling)
Metaflow 병렬 확장(Scaling)
Metaflow는 하나의 플로우 안에서 작업을 병렬로 실행해 확장할 수 있어요. 브랜치(branch)와 foreach를 쓰면 여러 스텝이 동시에 실행되고, 이 병렬 실행은 로컬의 여러 CPU 코어나 클라우드의 여러 인스턴스에서 나눠 돌 수 있어요. 데이터 처리·하이퍼파라미터 실험 같은 반복 작업의 성능을 크게 높일 수 있어요.
출처: Metaflow Scaling
브랜치로 병렬 실행
브랜치는 이름 붙은 여러 스텝을 병렬로 실행하는 구조예요. 예를 들어 start 스텝이 a와 b 두 스텝으로 분기하면, a와 b가 병렬로 수행돼요. 모든 브랜치는 반드시 join 스텝에서 합쳐져야 하고, 각 브랜치가 만든 값은 join에서 inputs로 참조해요.
@step
def start(self):
self.next(self.a, self.b)
foreach로 반복 병렬 실행
foreach는 데이터 리스트의 각 항목을 처리하기 위해 여러 개의 병렬 태스크를 만드는 구조예요. 예를 들어 영화 제목 리스트를 처리할 때 각 제목마다 하나의 태스크가 생겨 병렬로 실행돼요. foreach는 self.next(..., foreach='리스트명') 형태로 초기화하고, 각 태스크는 input 변수로 자기 항목에 접근해요.
@step
def start(self):
self.titles = ['Stranger Things', 'House of Cards', 'Narcos']
self.next(self.a, foreach='titles')
foreach 안의 계단식 반복 단계도 join으로 합쳐야 해요.
클라우드로 확장
로컬에서 병렬 실행되는 것처럼, 같은 플로우를 클라우드 환경에서 돌리면 Metaflow가 병렬 태스크를 여러 인스턴스에 분산해요. 코드를 거의 바꾸지 않고 실행 환경만 달리해서 확장할 수 있는 게 핵심이에요.
더 알아보기
- 데이터 흐름: Data
- 플로우 기본: Creating Flows