DVC를 사용한 데이터 버전 관리

9348 단어 gitmachinelearningdvc
version control 와 관련하여 Git은 코드 버전을 관리하는 일반적인 도구입니다. 개발자가 코드 기록을 쉽게 유지할 수 있도록 도와줍니다.

그러나 기계 학습 프로젝트에는 충분하지 않습니다. 재현 가능한 실험을 관리하는 것은 코드, 하이퍼 매개변수 및 데이터와 관련된 데이터 과학자에게 중요한 문제입니다.

코드와 하이퍼 매개변수는 Git으로 유지 관리하기 쉽습니다. 그러나 널리 사용되는 버전 제어 시스템About large files on GitHub의 파일 크기 제한으로 인해 데이터 버전 제어가 어렵습니다.

DVC는 데이터 버전 관리 문제를 해결하는 인기 있는 오픈 소스 도구 중 하나입니다. DVC의 도움으로 모든 버전의 데이터를 특정 원격 위치에 저장하고 Git은 데이터의 해시 값을 커밋합니다.

예시



DVC 설치



apt 및 brew와 같은 시스템 패키지와 함께 DVC를 설치하는 것이 좋습니다. 입력 오류를 최소화하는 자동 완성 기능을 제공합니다.

데비안/우분투에 DVC 설치:

sudo wget https://dvc.org/deb/dvc.list -O /etc/apt/sources.list.d/dvc.list

wget -qO - https://dvc.org/deb/iterative.asc | gpg --dearmor > packages.iterative.gpg

sudo install -o root -g root -m 644 packages.iterative.gpg /etc/apt/trusted.gpg.d/

rm -f packages.iterative.gpg

sudo apt-get update

sudo apt-get install dvc


MacOS에 DVC 설치:

brew install dvc


확인.

$ dvc version

DVC version: 2.11.0 (brew)
---------------------------------
Platform: Python 3.10.5 on macOS-12.4-arm64-arm-64bit
Supports:
    azure (adlfs = 2022.4.0, knack = 0.9.0, azure-identity = 1.10.0),
    gdrive (pydrive2 = 1.10.1),
    gs (gcsfs = 2022.5.0),
    webhdfs (fsspec = 2022.5.0),
    http (aiohttp = 3.8.1, aiohttp-retry = 2.4.6),
    https (aiohttp = 3.8.1, aiohttp-retry = 2.4.6),
    s3 (s3fs = 2022.5.0, boto3 = 1.21.21),
    ssh (sshfs = 2022.6.0),
    oss (ossfs = 2021.8.0),
    webdav (webdav4 = 0.9.7),
    webdavs (webdav4 = 0.9.7)


자세한 설치 가이드는 https://dvc.org/doc/install 을 참조하십시오.

빈 Git 저장소 초기화




mkdir dvc-demo && cd dvc-demo
git init


Git 저장소 내에서 DVC 초기화




dvc init



$ git status

...
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   .dvc/.gitignore
    new file:   .dvc/config
    new file:   .dvcignore



git commit -m 'feat: init dvc'


데이터 생성


data 디렉토리를 생성하면 데이터가 이 디렉토리에 저장됩니다.

mkdir data


난수로 이미지 파일을 만듭니다.

dd if=/dev/random of=data/data.img bs=1 count=0 seek=1024000



dvc add data/data.img


데이터 디렉토리에 두 개의 새 파일이 있습니다.

$ ls -a data/

.  ..  data.img  data.img.dvc  .gitignore


data/data.img.dvc: .dvc로 끝나는 파일은 데이터의 메타데이터를 설명합니다.

$ cat data/data.img.dvc

outs:
- md5: 80ec129d645c70cf0de45b1a5a682235
  size: 1024000
  path: data.img


data/.gitignore: Git은 data.img의 변경 사항을 추적하지 않습니다. 대신 data.img.dvc 의 변경 사항을 추적합니다.

$ cat data/.gitignore
/data.img


다음으로 Git으로 변경 사항을 커밋합니다.

데이터 메타데이터 커밋




git add data/



$ git commit -m 'feat: add data/data.img'

[main badc237] feat: add data metadata
 2 files changed, 5 insertions(+)
 create mode 100644 data/.gitignore
 create mode 100644 data/data.img.dvc


데이터를 원격 스토리지로 푸시



원격 저장소 위치를 설정합니다.

mkdir /tmp/dvc-remote/



$ dvc remote add --default myremote /tmp/dvc-remote/

Setting 'myremote' as a default remote.



git add .dvc/config
git commit -m "feat: update dvc remote"


데이터를 원격 저장소로 푸시합니다.

$ dvc push

1 file pushed


원격 저장소의 구조는 무엇입니까




$ tree /tmp/dvc-remote/

/tmp/dvc-remote/
└── 80
    └── ec129d645c70cf0de45b1a5a682235

1 directory, 1 file


데이터 변경




dd if=/dev/random of=data/data.img bs=1 count=0 seek=1024

dvc status로 데이터 상태를 확인하십시오.

$ dvc status

data/data.img.dvc:
    changed outs:
        modified:           data/data.img



dvc add data/data.img


Git은 데이터 메타데이터의 변경 사항을 관리합니다.

$ git diff -- data/data.img.dvc

diff --git a/data/data.img.dvc b/data/data.img.dvc
index e218f0c..556b929 100644
--- a/data/data.img.dvc
+++ b/data/data.img.dvc
@@ -1,4 +1,4 @@
 outs:
-- md5: 80ec129d645c70cf0de45b1a5a682235
-  size: 1024000
+- md5: 0f343b0931126a20f133d67c2b018a3b
+  size: 1024
   path: data.img



git add data/data.img.dvc
git commit -m 'feat: update data/data.img'


새 데이터를 원격 저장소로 푸시합니다.

dvc push


원격 저장소의 구조를 다시 참조하십시오.

데이터의 모든 버전을 저장하므로 개발자가 버전 간에 전환할 수 있습니다.

$ tree /tmp/dvc-remote/

/tmp/dvc-remote/
├── 0f
│   └── 343b0931126a20f133d67c2b018a3b
└── 80
    └── ec129d645c70cf0de45b1a5a682235

2 directories, 2 files


원격 저장소에서 데이터 검색




git checkout [<branch>]



dvc fetch -aT  # download data from remote storage to the cache.
dvc checkout

좋은 웹페이지 즐겨찾기