b__ono__ng

데이터 버전 관리 툴 - DVC (Data Version Control) 사용기 본문

IT/AI

데이터 버전 관리 툴 - DVC (Data Version Control) 사용기

b__ono__ng 2024. 12. 19. 19:43

모델을 여러 번 학습해보며 실험할 때, 사실 가장 크게 만지는 부분은 데이터다.

파라미터도 파라미터지만,, 아직 세부 파라미터(learning rate라던가,,)를 다룰만한 지식은 충분치 않기도 하고 데이터셋의 효과가 가장 크고 직관적이다,

그런데 문제가 있다.

회사에서는 아직 데이터 관리 툴을 안 쓰고 있는데, 이러다보니 데이터셋의 버전 관리가 안 된다. 이게 왜 문제냐?

v1 ~ v10까지 데이터셋을 변경해가며 10개의 모델을 학습시켰다고 하면, 하나의 데이터셋에서 새로이 파생하거나 돌아가기가 쉽지 않다.

관리를 한다고 해도,, 거의 나만 아는 방식으로만 학습되어서 남이 이어받기 힘들다.

이걸 아주 단순하고 쉽게 구현 하려면, 모든 버전의 데이터셋을 구축하는 방법이 있다. 그런데 우리는 이미지 데이터를 다루는지라,, 데이터셋 개수가 10,000개만 되어도 파일 크기가 엄청나게 커진다. 이런식으로.

  • Dataset_v1 (300GB)
  • Dataset_v2 (350GB)
  • ...

그래서 데이터셋 관리 툴을 도입하려고 하는데, 나만 한다고 되는게 아니다. 모두가 같이 써야 의미가 있다. 그래서 최대한 쉽게 설명드리고 연계할 툴의 서버도 내가 도맡아 관리하면 다들 써주시지 않을까!


아래 그림이 DVC를 가장 명료하게 표현하는 것 같다.

DVC Flow

DVC는 데이터셋의 메타데이터를 Git 레포지토리에 함께 저장하는 방식이다.

Git 레포지토리에 커밋할 때 함께 커밋할 수 있어서, 버전관리용 툴인 Git과 아주 잘 어울린다.

위 그림에 data.csv 라는 데이터셋이 있다.

이에 대한 메타데이터를 dvc 명령어(dvc add data.csv)로 생성하면, data.csv.dvc 라는 메타데이터 파일이 생성된다.

그럼 git에 push할 때, 이걸 push하는거다. 그러면 나중에 특정한 버전의 데이터셋이 필요하다면, 커밋 로그를 보면서 그 데이터셋을 찾아 pull하면 된다.

그럼 remote storage는 뭐냐?

이건 S3나 Google Drive가 될 수도 있고, 그냥 Local에 놓아도 무방하다. 그런데 사실 여러 데이터셋을 사용한다면 용량 관리가 어려울 수도 있으니 S3를 이용하는 방법도 좋겠다.


다른 데이터셋 관리 툴이 많이 있는데, 어느 정도 비교해봤을 때 우리 회사의 특성에는 DVC가 사용하기 제일 효율적인 것 같다. 이미지 데이터라는 특성이나 인터넷 자료량, 무과금이여서 눈치 안 보인다는 것 등등

다만 아쉬운 점은, 시각화가 안 된다.

이미지 데이터를 사용하기 때문에 시각화가 중요한데, DVC에서는 지원이 안 된다.

그래서 MLflow를 추가로 연동해보려 한다.