Netflix / workflow-orchestration

2 개의 포스트

netflix

Netflix's Metaflow Spin: Faster ML Development | Netflix TechBlog (새 탭에서 열림)

넷플릭스는 머신러닝(ML) 및 AI 워크플로우의 프로토타이핑부터 프로덕션 운영까지의 전 과정을 효율화하기 위해 오픈소스 프레임워크인 메타플로우(Metaflow)를 지속적으로 발전시켜 왔습니다. 특히 최신 업데이트인 Metaflow 2.19 버전에서는 'Spin'이라는 기능을 도입하여, 대규모 데이터와 모델을 다루는 ML 개발 과정에서 필수적인 빠른 반복 시도(Iterative development)와 상태 유지(Stateful iteration)를 획기적으로 가속화했습니다. 이를 통해 개발자는 코드 변경 사항을 즉각적으로 확인하면서도 운영 환경의 안정성을 동시에 확보할 수 있습니다. **ML 및 AI 워크플로우에서의 반복 개발 특성** * **데이터와 모델 중심의 반복:** 전통적인 소프트웨어 공학의 코드 중심 개발과 달리, ML/AI 개발은 크기가 크고 가변적인 데이터 및 모델을 중심으로 이루어집니다. * **비결정적 과정:** 데이터 변환이나 모델 학습은 실행 시마다 결과가 조금씩 달라지는 확률적 특성을 가지며, 연산 비용이 매우 높습니다. * **노트북의 장점과 한계:** 주피터(Jupyter)와 같은 노트북 도구는 메모리에 상태를 유지하여 빠른 피드백을 주지만, 실행 순서의 불명확성, 숨겨진 상태 문제, 재현성 부족 등의 고질적인 문제를 안고 있습니다. **메타플로우의 체크포인트 기반 상태 관리** * **@step을 통한 체크포인트 설정:** 메타플로우의 각 단계(`@step`)는 체크포인트 경계 역할을 수행하며, 단계가 종료될 때 모든 인스턴스 변수를 아티팩트(Artifact)로 자동 저장합니다. * **Resume 기능의 활용:** 기존의 `resume` 명령어를 사용하면 특정 단계부터 실행을 재개할 수 있어, 실패한 지점이나 수정이 필요한 지점부터 다시 시작할 수 있습니다. * **노트북 방식과의 차별점:** 실행 순서가 명시적이고 결정적이며, 모든 상태가 버전화되어 저장되므로 결과의 추적과 재현이 매우 용이합니다. **Spin: 반복 개발 속도의 극대화** * **지연 시간 단축:** 기존의 `resume` 방식은 특정 단계부터 전체를 다시 실행해야 하므로 반복 주기 사이에 일정 수준의 지연(Latency)이 발생했습니다. * **점진적 실험의 가속화:** 새로운 'Spin' 기능은 이러한 지연을 최소화하여 노트북 수준의 즉각적인 피드백을 제공하면서도 메타플로우의 견고한 상태 관리 기능을 그대로 활용합니다. * **워크플로우 엔진과의 통합:** 메타플로우는 넷플릭스의 워크플로우 오케스트레이터인 마에스트로(Maestro)와 긴밀하게 연동되어, 개발 환경에서 테스트한 로직을 프로덕션 규모로 확장하는 데 소요되는 오버헤드를 최소화합니다. 데이터 과학자와 엔지니어는 Metaflow 2.19 버전을 통해 Spin 기능을 직접 체험해 볼 수 있습니다. 실험적인 탐색 단계에서는 노트북처럼 빠른 속도를 누리고, 배포 단계에서는 엔지니어링 표준을 준수하는 견고한 파이프라인을 구축하고자 한다면 메타플로우의 새로운 반복 개발 워크플로우를 도입해 보길 권장합니다.

netflix

100X Faster: How We Supercharged Netflix Maestro’s Workflow Engine | by Netflix Technology Blog | Netflix TechBlog (새 탭에서 열림)

넷플릭스는 대규모 데이터 및 머신러닝 워크플로우를 관리하는 오케스트레이터인 'Maestro'의 엔진을 전면 개편하여 성능을 100배 이상 향상시켰습니다. 기존 수 초 단위에 달하던 실행 오버헤드를 밀리초(milliseconds) 단위로 단축함으로써, 광고나 라이브 스트리밍과 같이 저지연 및 고빈도 스케줄링이 필요한 신규 비즈니스 요구사항을 충족하게 되었습니다. 이번 업데이트를 통해 Maestro는 확장성뿐만 아니라 극도로 빠른 실행 속도까지 갖추게 되어 개발자들의 작업 효율을 획기적으로 개선했습니다. **기존 아키텍처의 한계와 병목 현상** * **3계층 구조의 복잡성:** Maestro는 API/런타임, 엔진, 내부 플로우 엔진의 3단계로 구성되었으나, 각 계층 간의 데이터 전달과 상태 동기화 과정에서 상당한 시간이 소요되었습니다. * **폴링(Polling) 방식의 지연:** 기존의 내부 플로우 엔진은 일정 간격으로 태스크를 확인하는 폴링 방식으로 동작하여, 단계별 상태 전이 시마다 초 단위의 불필요한 대기 시간이 발생했습니다. * **분산 큐 및 데이터베이스 부하:** 분산 작업 큐(Dyno-queues)와 데이터베이스 액세스 패턴에서 발생하는 오버헤드로 인해 워크플로우가 복잡해질수록 전체 실행 속도가 저하되는 문제가 있었습니다. * **경합 조건 발생:** 강력한 일관성 보장이 부족하여 특정 단계가 두 개의 워커에서 동시에 실행되는 등의 레이스 컨디션(Race condition) 문제가 간혹 발생했습니다. **100배 빠른 엔진을 위한 설계 최적화** * **이벤트 기반 리액티브 모델:** 폴링 방식을 폐기하고 이벤트 기반 아키텍처를 도입하여, 태스크 완료 즉시 다음 단계가 실행되도록 지연 시간을 최소화했습니다. * **상태 머신 직접 관리:** 워크플로우 그래프를 내부 플로우 태스크로 변환하던 중간 레이어를 제거하고, 엔진이 직접 워크플로우와 단계별 상태 머신을 제어하도록 단순화했습니다. * **데이터 액세스 최적화:** 데이터베이스 쓰기 횟수를 줄이고 효율적인 캐싱 및 분산 잠금(Distributed Locking) 메커니즘을 적용하여 성능과 안정성을 동시에 확보했습니다. * **추상화 계층 정합성:** Maestro 엔진이 상태 전이와 생명주기를 전담하게 함으로써, 하부 플로우 엔진에 대한 의존성을 없애고 엔진의 실행 효율을 극대화했습니다. **성능 향상 결과 및 활용 사례** * **실행 속도 극대화:** 워크플로우 엔진의 내부 오버헤드가 수 초에서 밀리초 단위로 줄어들며 전체적인 응답 속도가 100배 이상 개선되었습니다. * **신규 비즈니스 지원:** 1시간 미만의 짧은 주기로 실행되는 스케줄링이나 광고(Ads), 게임 등 저지연 워크플로우가 필수적인 도메인에 적용 가능해졌습니다. * **개발 생산성 제고:** 반복적인 개발 및 테스트 사이클에서 발생하는 대기 시간이 사라져 엔지니어들의 반복 작업 효율이 크게 향상되었습니다. 대규모 확장성과 초고성능을 동시에 요구하는 환경이라면, 넷플릭스에서 검증되고 오픈 소스로 공개된 최신 버전의 Maestro 도입을 적극적으로 검토해 볼 가치가 있습니다. 특히 기존 워크플로우 엔진의 지연 시간으로 인해 실시간 처리에 어려움을 겪고 있는 조직에 강력한 해결책이 될 수 있습니다.