사내에서 데이터 버전 관리에 대한 내용을 소개하면서 정리한 내용을 포스팅으로 재정리 해보았습니다.
1. 버전관리
1.1. 소프트웨어 엔지니어링에서 관점에서의 버전 관리
이제는 Git으로 익숙하게 접하는 버전 관리(version control)이 하는 역할을 소프트웨어 엔지니어링 관점에서 다시 한번 정리해보자면 다음과 같다.
- 소프트웨어를 이루는 코드와 패키지, 라이브러리 등에 생긴 변화를 추적하고 관리하기 위한 용도
- 여러 구성원이 소프트웨어를 개발할 때 발생하는 혼란을 줄이고, 효율적으로 협업할 수 있게 하는 용도
- 소프트웨어에 큰 문제가 발생했을 때, 빠르게 이전 버전으로 돌아가는 등, 에러나 실수로 인해 발생하는 손해를 최소화 하기 위한 용도
1.2. 머신러닝 프로젝트 관점에서의 버전관리
비슷하게 접근하여, 머신러닝 프로젝트의 관점에서 버전관리를 하는 이유 또는 역할을 살펴보면 다음과 같다.
- 머신러닝 프로젝트를 이루는 코드, 데이터, 모델, 패키지, 라이브러리 등 과정에서 발생하는 모든 변화를 추적하고 관리하기 위한 용도
- 모델 개발을 한명의 연구자가 혼자 개발하는 것이 아닌, 팀 내 공통으로 개발할 수 있게 하기 위한 용도
- 실험한 모델을 그대로 재현해내기 위한 용도
- 가장 최근에 배포한 모델에 이슈가 있을 경우 이전 버전의 모델로 빠르게 돌아가기 위한 용도
2. ML 버전관리의 목표와 버전관리 대상
1.2. 에서 살펴본 용도들을 다시 간단하게 정리해보자.
목표:
- 버전 관리, 버전 추적
- 용이한 버전 롤백
- 협업과 공유
- 모델의 결과 재현
버전 관리 대상
- 모델 학습을 위해 사용된 데이터
- 모델의 구조
- 학습된 모델의 결과물
- 가중치
- 하이퍼 파라미터
- 최종 학습 파라미터
- 해당 모델의 성능
- 해당 모델의 버전
위와 같이 버전관리 대상이 되는 머신러닝 모델의 결과물을 Artifact (가공품) 이라고 한다.
3. 머신러닝 버전 관리 도구
3.1. Artifact 저장 및 버전 로깅
Artifact를 저장하고 DB에 관련 정보를 기록하여 관리하는 방식이 있으며, 주로 머신러닝 플랫폼이나 솔루션, 오픈소스 프로젝트에서 이런 방식을 택한다.
- 플랫폼 또는 솔루션
- Weights & Biases
- Neptunes.ai
- etc …
- 오픈소스 라이브러리
- BentoML
- MLflow
- etc …
3.1.1. 예시) Weights & Biases
Weights & Biases (또는 W&B) 는 머신러닝 프로젝트 실험 관리 플랫폼으로, 유저는 각 실험의 결과와 모델의 성능, 결과물(artifact), 심지어 런타임과 리소스 사용 현황 등을 저장할 수 있다. 간단하게 파악해본 장단점은 다음과 같다.
- 장점:
- 거의 모든 요소들을 기록하고 저장할 수 있음
- UI가 아주 편리하고 직관적
- 단점:
- 유료 플랜이 존재하며, 비즈니스에 따라 부담스러울 수 있음. 개인 프로젝트의 경우 아우 유용!
- 매우 편리하기 때문에, 경우에 따라 의존도가 너무 커질 수 있다고 생각됨.
3.2. Version Control System의 응용
VCS를 응용하여, 코드를 버전관리 하듯 Artifact의 변화와 정보를 기록하는 방식이다. 대용량 파일을 Git에 저장하는 Git Large File Storage(LFS), 또는 Git을 적용한 오픈소스 라이브러리인 Data Version Control (DVC)가 있다.
3.2.1. 예시) DVC
DVC는 오픈소스 프로젝트이며 Git을 기반으로 하고 있다. 사용자는 DVC를 활용해 데이터셋과 모델 등 artifact들을 버전관리 할 수 있으며, 실험 파이프라인 기능도 지원한다. DVC의 기본 원리는 ML 프로젝트 과정에서 발생하는 artifact들에 대한 모든 정보(경로 등)을 .dvc
라는 파일에 기록하고 git
에 기록하되, 실제 파일은 .gitignore
에 기록하여 저장되지 않도록 한다. 추후 사용자는 Git에서 원하는 버전의 .dvc
파일만 있으면 해당 artifact를 불러올 수 있다.
- 장점
- 오픈소스
- Git에 익숙하다면 진입장벽이 거의 없음.
- AWS S3, Google Drive, GCP Stroage, SSH, HDFS 등 수많은 스토리지 형태를 지원함.
- 단점
- 복잡한 Git 브랜칭 전략이 가미될 경우, 모니터링 기능이 필요한 경우 등 유저가 직접 커스터마이징을 해야할 필요가 생김. (장점이면서 단점이 될 수 있음)
4. 마무리하며
이번 포스팅에서는 머신러닝 프로젝트에서 버전 관리를 해야하는 필요성과 버전관리에 사용할 수 있는 도구의 종류를 간단하게 살펴보았다. 다음에는 간단한 토이프로젝트를 통해 실제로 W&B와 DVC를 활용하는 예시를 소개해보도록 하겠다.
Reference
- https://neptune.ai/blog/version-control-for-ml-models
- https://dvc.org/doc
- https://docs.wandb.ai/?_gl=114eseyj_gaMzAxNTk4NzQ3LjE2NTU5OTM0NTc._ga_JH1SJHJQXJ*MTY1OTU0NjQwMC4zLjEuMTY1OTU0NjQwNS41NQ
- https://realpython.com/python-data-version-control/#practice-the-basic-dvc-workflow