etc

github에는 못올리는 큰 파일 dvc로 관리하기

민사민서 2024. 8. 29. 15:34

DVC & git lfs?

  • git lfs (large file storage)
    • 100MB 이상 파일은 Git LFS를 이용해 GitHub Repository에 저장할 수 있음
    • 중소형 데이터는 Git LFS를 이용하는 것을 추천
    • 2GB가 넘어가는 대용량 데이터의 경우 data quota 넘어감..
    • 깃헙에서 제공하는 lfs 서버는 데이터 사이즈 제약이 심해서 자체 lfs 서버 운영 필요
  • dvc (data version control)
    • 모델과 데이터 등의 버전 관리를 위한 오픈 소스
    • DVC는 데이터를 추적하는 데에 사용할 메타 데이터와 설정 파일을 생성하고, DVC에 의해 생성된 파일을 git이 추적하여 버전 관리를 진행
    • dvc 의 경우 data 를 저장할 storage 만 설정해주면 됨, remote storage 내 위치를 메타파일에 저장

마침 사용 가능한 aws s3 서버도 있고, 관리할 파일 사이즈가 커서 dvc를 사용해보았습니다

 

DVC 사용해보기

brew install dvc
# pip install dvc

dvc 설치

dvc init

dvc 초기 환경 설정

dvc remote add -d storage s3://gaze-3d/
git add .dvc/config
git commit -m "add: dvc initial setting"

dvc 원격 저장소 연결

dvc add ./models
dvc add ./yolox
# and more?

관리할 폴더 및 파일 추적

git rm -r --cached 'sync/CAM1'
git commit -m "stop tracking sync/CAM1"
dvc add sync/CAM1

만약 git에 의해 이미 tracking되고 있는 폴더/파일이라면 remove it from git and add to dvc

이러면 잘 add 됩니다. 각각의 폴더에 대한 .dvc 파일이 생성될겁니다

dvc push

dvc 데이터를 s3 원격 저장소로 푸시

git add ./models.dvc ./yolox.dvc ./sync/CAM*.dvc
git commit -m "add: dvc tracking files"

각 폴더에 생성된 .dvc 파일 (특정 파일/디렉터리 추적하는 메타데이터 정보)을 git commit 하여 추적

 

연결된 원격 저장소에 files/md5/ 폴더 아래 파일들이 저장됨

dvc는 파일 추적 시 해시값(md5 hash) 사용해 파일 고유하게 식별하고 관리

생성된 폴더 이름들(01/, 02/ ~ )은 파일 해시 값의 앞부분을 기준으로 생성된 폴더 (빠른 file traverse를 위해)

 

그럼 dvc로 관리되는 대용량 파일들을 레포에 가져오고 싶으면?

dvc pull

project root 에서 위 커맨드 실행하면

이렇게 쫙 가져와집니다.

 

만약 dvc로 관리되는 폴더에 내용을 추가하고 싶다! 이러면

dvc add sync/CAM1
dvc push
git add sync/CAM1.dvc
git commit -m "add: CAM1 dataset"