레이블이 git lfs인 게시물을 표시합니다. 모든 게시물 표시
레이블이 git lfs인 게시물을 표시합니다. 모든 게시물 표시

dvc(data version control) command

dvc(data version control) 는 말 그대로 데이터 버전 컨트롤 cli 툴이다.
데이터의 메타 정보는 git 으로
실제 데이터를 git lfs 나 별도 리모트 스토리지(s3,gs,azure,ssh 등)에 저장해 관리한다.
주로 ML reproducible 을 위래 데이터나 모델을 버저닝에 많이 사용한다.

# brew 로 설치시
brew install dvc

# pip 로 설치시
pip install dvc

# git 프로젝트로 이동해서
# dvc 초기화(설정 파일 생성)
dvc init

# 초기화 되면 다음 파일을 생성되고 스테이지에 추가되어 있다.(git add 되어 있음)
# 이를 커밋,푸시해줘야 한다.
# 참고로 .gitignore 는 git 이 사용하는 설정으로 dvc 가 트랙하는 파일과 중복되지 않도록 무시하도록 하기 위해 필요하고 .dvcignore 는 dvc 가 dvc 에 사용하지않은 파일은 무시하기 위한 설정이다.
# git status
# new file:   .dvc/.gitignore
# new file:   .dvc/config
# new file:   .dvcignore
git commit -m "initialize dvc"
git push

# dvc remote 저장소(스토리지) 추가
# s3 추가 
# -d --default set as default remote.
dvc remote add -d ysoftman_s3 s3://버킷명

# google drive 추가시(해시값은 google drive 경로이동후 주소 표시줄에 마지막에 표시된다.)
dvc remote add -d ysoftman_gdrive gdrive://1IJetT6gdSjOU6t4BC-VgLya8RDaQQWMU

# 설정 확인
# .dvc/config 에 아래 스토리 정보가 추가된다.
# [core]
#    remote = ysoftman_gdrive
# ['remote "ysoftman_s3"']
#    url = s3://버킷명
# ['remote "ysoftman_gdrive"']
#    url = gdrive://1IJetT6gdSjOU6t4BC-VgLya8RDaQQWMU
dvc config -l

# 변경된 config 커밋
git add .dvc/config
git commit -m "configure dvc remote stroage"

# 간단한 data/data.csv 파일을 만들고
mkdir data
echo "apple,lemon,orange" > data/data.csv

# dvc 트랙(dvc로 관리,추적할 파일)에 추가
dvc add data/data.csv

# dvc add 되면,
# data/datav.csv.dvc 로 .dvc 확장가 붙은 메타정보(해쉬,경로등)파일이 생성된다.
# data/.gitignore 가 생성되면 /data.csv 가 추가되어 git 에서 무시하도록 한다.

# git 에는 메타 정보 파일과 .gitignore 파일을 커밋한다.
git add data/data.csv.dvc data/.gitignore
git commit -m "add data.csv meta"

# 이제 dvc push 하면 현재 -d(default)로 설정된 google drive 로 푸시한다.
# google drive 의 인증 URL 이 표시되고 해당 페이지에 인증후 인증코드를 터미널에 입력
# .dvc/tmp/gdrive-user-credentials.json 인증정보가 저장된다.
# google drive 에 랜덤(.dvc 에 있는 해시값중 앞2자리)이름이 디렉토리로 생성되며 그안에 특정 바이너리 파일로 저장된다.
dvc push

# git 에도 .dvc 메타정보 .gitignore 파일 push
git push

# 데이터를 변경해보자.
echo "banana,mango" >> data/data.csv 

# 변경된 데이터 파일을 dvc 트랙에 추가한다.
# storage 내에 새로운 디렉토리로 저장된다.
dvc add data/data.csv
dvc push

# 자동으로 data.csv.dvc 파일도 변경됐으니 이것도 커밋,푸시한다.
git add data/data.csv.dvc
git commit -m "update data"
git push

# git checkout 등으로 히스토리(버전)로 변경 후 dvc checkout 하면 .dvc 메타정보에 맞는 파일로 변경된다.
git checkout abc123
dvc checkout

# git 에는 .dvc 메타정보만 있기 때문에 git 저장소를 로컬에 새로 clone 받은 경우
# dvc pull 하면 버전에 맞는 데이터가 다운로드 된다.

# 데이터를 삭제할 때
# data/.gitignore 에서 data2.csv.dvc 가 빠진다.
dvc remove data/data2.csv.dvc
# 변경 사항 커밋
git add data/.gitignore
git add data/data2.csv.dvc
git commit -m "remove data2"

# dvc remote storage 확인
dvc remote list

# 디폴트 스토리지 변경
dvc remote default ysoftman_s3 

# dvc 서비스되는 파일 보기 /data path
# github > .dvc/config > ysoftman_s3 가 디폴트인 경우
dvc list https://github.com/ysoftman/dvc_test/ data


#####


# google-drive client_id, client_secret 설정
# google cloud > api & service > credentials > oauth 2.0 client ids > desktop app > client id, client secret 파악 후 dvc 설정 후
# github 으로 푸시
dvc remote modify ysoftman_gdrive gdrive_client_id '123'
dvc remote modify ysoftman_gdrive gdrive_client_secret '123'
git commit .dvc/config -m "add ysoftman_gdrive credentials"
git push

git lfs(Large File Storage) command

git lfs(Large File Storage) 는 dataset,audio,video 같은 용량이 큰 파일을 저장해주는 서비스이다.

github 은 파일 1개 용량이 100MB 넘는 파일을 푸시를 막고 있다.

100MB 넘은 파일을 push하면 다음과 같은 에러가 발생한다.
remote: error: File aaa.zip is 100.59 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File Storage
! [remote rejected] master -> master (pre-receive hook declined)

https://github.com/settings/billing > git lfs data 를 보면 계정당 1GB 용량까지는 무료고 그 이상은 유료다.

# git lfs 설치
brew install git lfs

# 현재 계정 lfs 초기화
git lfs install

# 초기화 하면 ~/.gitconfig 설정에 다음 내용이 추가된다.
[filter "lfs"]
  clean = git-lfs clean -- %f
  smudge = git-lfs smudge -- %f
  process = git-lfs filter-process
  required = true

# 이제 github 프로젝트 디렉토리로 이동한다.
# 트랙된 파일들은 LFS 로 저장되고 관리된다.
git lfs track "*.jpg"
git lfs track "*.zip"
git lfs track "*.tar.gz"

# 트랙되고 있는 패턴 보기
git lfs track

# .gitattributes 에 다음과 같이 설정되니 이 파일을 직접 수정해도 된다.
cat .gitattributes
*.jpg filter=lfs diff=lfs merge=lfs -text
*.tar.gz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text

# .gitattributes 파일을 커밋해야 github 에서 lfs 로 트랙할 수 있다.
git add .gitattributes 
git commit -a -m "add lsf settings"
git push

# 이제 파일을 커밋 및 푸시
git add xelloss.jpg
git add pizza_or_not_pizza.zip
git commit -a -m "lsf test"
git push

# 커밋된 트랙 파일들 보기
git lfs ls-files

# github 에서 파일을 클릭하면 다음과 같이 LFS 에 저장되어있다고 나오며 download 할 수 있다.