Flyte의 가장 큰 장점 중 하나인 Versioning 이해하기

Ryan Kim
4 min readJul 17, 2022

Flyte에서 유독 엄격하게 Version 관리를 하는 이유에 대해 정리해보자.

프로젝트에 참여하다보면 소스코드, 배포 인스턴스, 패키징 등 버전 관리를 해줘야하는 것들이 꽤 많이 발생한다.

이 과정에서 개발자들은 소스코드의 경우 Git으로, 배포 인스턴스의 경우 Tag로, 패키징 등은 배포 버전을 등록하여 관리하는 것을 볼 수 있고, 이 과정이 ML 분야 업무에 참여하다보면, 더 빈번하게 버전관리가 발생한다.

생성한 모델이나 실험 데이터들이 상당히 많이 생성되고, 어떤 모델이나 실험 parameter가 최적의 결과를 만들지 장담할 수 없기 때문에 여러 모로 다양한 버전들을 기록해 둘 필요가 있고, 상황에 따라 최신 배포 버전에 문제가 발생했을 경우 (버그, 이전 버전보다 배포했을 때 상대적으로 성능이 떨어지는 경우 등) 롤백했을 때, 신규 버전이 이전 버전에 영향을 주면 안되는데, 이러한 과정들을 Flyte에서 꽤 철저하게 Versioning이란 이름으로 관리해주는 것을 알게 되었다.

Workflow에 등록되어 있는 Unique한 버전 값

Flyte에서 실험 및 모델 데이터를 관리하기 위해서 기본적으로 Project와 Domain으로 구분하는데, 이는 첫번째로 실험을 수행하는 팀에 대한 분리, 그리고 Development / Staging / Production 단계에 따른 실험 데이터 분리를 목적으로 나뉘게 된다.

그리고 당연히 Version의 등록은 project/domain/version 순으로 등록이 되며, 동일한 flyte project/domain 내에서 동시에 실험 및 버전을 성공적으로 구분하는 것이 가능하다.

Version을 등록함으로써 특정 버전이 실행되는 환경을 빠르게 찾을 수 있고, 필요로하는 버전을 찾아서 독립적으로 해당 workflow를 런칭하는 것이 가능하다.

어떤 서비스에서도 발생할 수 있는 상황이지만, Production 사이드에서 새롭게 배포한 버전이 버그 또는 failure가 발생하면 (Flyte 실행 환경에서 정상적으로 실행되지 않으면, Failure라는 상태가 발생한다), Flyte DB에 이미 이전 버전이 등록되어 있기 때문에, 용이한 버전 관리로 롤백하기가 쉽다.

그리고 버전 관리 자체의 장점이기도 한데 이러한 버전관리 특성 때문에 특정 시스템이 어떻게 발전해왔는지, 그리고 구체적인 전략의 효용성에 대한 답을 찾아가기가 쉽다.

쉽게 말해, 코드에 대한 버전 관리는 Git이 수행해주나 Flyte에 한 번 등록된 Workflow는 언제든 CLI 또는 Console을 통해 언제든 간편한 조작으로 Running 상태를 유지해주기 때문에 리서처들에게 편리함을 제공한다.

이러한 버전 관리를 하는데 있어 Flyte에서 권장하는 방법이 있다.

Flyte 공식 문서를 보면, Task or Worflow의 독립적인 버전 관리를 위해 GIT-SHA or Hash 값으로 버전관리하는 것을 추천하고 있다. (별도의 버전 등록을 해주지 않으면 알아서 32자리 해시 값으로 등록된다.)

버전의 유일성을 취하기 위한 전략으로 보이는데, 이 부분은 flyte에서 CLI로 팀에서 사용하고 싶은 버전을 별도로 등록하는 것이 가능하기 때문에 Flyte를 도입하는 팀에 따라 적절한 전략을 취해주시면 될 것 같다.

이 Versioning 전략이 Flyte를 사용하는데 있어, 추가로 응용해 볼 수 있는 부분들이 더 있는데, 그 중 하나는 Launch Plan이라는 기능이다.

Flyte에서는 특정 입력 값을 지정해서 Workflow에 출시 계획(==Launch Plan)이라는 이름으로 등록할 수 있는데 이를 Launch Plan이라고 한다.

즉, 특정 입력 값으로 주기적으로 동일한 Workflow의 실행이 필요로하는 경우에, 이 Launch Plan을 등록하여 특정 버전의 Workflow를 계속 실행해주는 것이 가능하다.

Kubeflow, Airflow가 점유율 대다수를 차지하는 Workflow Orchestration 분야에서 Flyte에서 Versioning이라는 기능을 제공하는 것은 둘과 분명하게 차별화가 되는 중요한 포인트라고 생각한다.

기하급수적으로 모델의 성능은 향상해 나가고 있는 와중에 다양한 ML 플랫폼에 대한 Use Case가 정리될 필요가 있다고 생각한다.

개인적으로 MLOps가 발전해 나가는 와중에 Flyte를 접한 것은 인생의 전환점이 되지 않을까 생각한다.

Ryan

--

--