매직코드
article thumbnail

Data Management 필요성

Raw Data를 처리하면서 다양한 시도들로 인해 Data의 버전이 많이 발생한다.

다양한 시도들을 하다보면 어떤 버전의 데이터를 사용해서 어떤 결과가 나왔는지 매칭하거나 관리하기 힘들어진다.

이를 관리하기 위하여 대부분의 사람들이 Git을 이용한다. 하지만 Git은 파일 크기에 제한이 있기 때문에 대용량 데이터를 관리하기에는 적합하지 않다. 대용량 데이터를 이용한 소스코드와 데이터를 같이 관리하기 위해서 DVC, Pachyderm, Delta Lake, Dolt 등의 툴이 생겼다.

 

 

 

 

DVC

Data Version Control의 약자다.

  • 대부분의 스토리지와 호환 가능 (amazon s3, google drive...)
  • 대부분의 git 호스팅 서버와 연동 가능 (GitHub, GitLab, Gitbucket...)
  • Data Pipeline을 DAG로 관리
  • Git과 유사한 인터페이스

실제 데이터는 스토리지에 저장되고, git hub에는 메타데이터만 저장하는 방식으로 운영되는 자동화 시스템이다.

여기서 메타데이터는 실제 데이터 dvc add 명령어를 통해 데이터가 저장되는 Remote Data Storage 위치 및 버전 정보와 같은 메타 정보가 저장된 .dvc 파일이 자동생성된다. dvc파일을 git에 저장한다.

 

1. dvc 설치

pip install 'dvc[all]' == 2.6.4

dvc --version
# 2.6.4

예전에는 작은 따옴표 없이 pip install dvc[all] == 2.6.4 에러가 안떴는데 no matches found: dvc[all]==2.6.4 에러가 계속 떠서 설치를 못하고 있었다. 동료의 도움을 받아 해결책이 작은 따옴표라는 것을 알게되었다.

 

install dvc만 하는경우 나중에 git push 할 때 에러가 나기 때문에 꼭 [all]을 같이 써줘야 한다.

[all]은 s3, gs, azure, oss, ssh를 dvc의 리모트 스토리지로 사용할 수 있도록 관련 패키지들을 모두 설치하게 하는 옵션이다.

 

2. 저장소 세팅

# 1. 새로운 디렉토리 생성
mkdir dvc
cd dvc

나는 처음부터 내가 원하는 폴더 위치에 dvc 폴더를 만들어두고 cd를 통해서 이동했다.

# 2. 저장소 세팅
git init
dvc init

init 명령어를 통해 git과 dvc의 기본 저장소를 cd를 통해 이동해온 현재 디렉토리로 설정했다.

# 현재 위치 폴더 확인
ls -a

ls -a를 했을 때 .dvc / .dvcignore / .git

이렇게 세가지가 없다면 git init 명령어와 dvc init명령어를 한번씩 더 수행해준다.

 

3. 간단한 파일로 실습

1) 데이터 생성

mkdir data
cd data
vi demo.txt

-----demo.txt 편집기-----
Hello dvc
------------------------

mkdir data : 현재 위치에 data라는 폴더 생성

cd data : data 폴더로 이동

vi demo.txt : demo라는 이름을 가진 txt파일을 생성, 바로 편집기로 이동

Hello dvc : i를 눌러서 insert모드로 변환, Hello dvc 입력후 esc, :wq(저장 후 빠져나오기), 엔터

 

2) 생성한 데이터 dvc로 tracking

cd ..
dvc add data
git add .gitignore data.dvc

cd .. : 한단계 위쪽 위치로 이동

dvc add data : git과 연동이 안되고 dvc와 연동되게 설정

git add : add로 git hub에 올릴 준비 .gitignore파일과 data.dvc파일을 이동

 

dvc add 명령어로 인해 git보다 먼저 연결되는 .dvc가 생기는 경우 git과 자동연결이 안되게끔 하는 설정파일 .gitignore가 자동으로 생성된다. git push는 dvc 설정이 모든 끝난 이후에 가장 마지막에 해준다.

 

3) 자동생성된 파일 확인

cat data.dvc

 

4) git commit

git commit -m "add data.dvc"

 

5) 데이터가 실제로 저장될 remote storage 세팅

데이터 저장을 어디에 하느냐에 따라 코드가 달라진다.

 

5-1) 구글 드라이브로 설정

# 구글 드라이브에 데이터를 저장하는 경우
# 경로는 전체 url이 아니라 마지막 슬래시/ 뒷부분만 가져온다.
# drive.google.com/drive/folders/1kdiwn3kgain 이라면 1kdiwn3kgain 요기만 아래 경로에 넣어준다.
dvc remote add -d storage gdrivd://경로

 

5-2) 내 gpu로 설정

- 일단 보안키를 먼저 만든다. 아래 링크에 더 자세히 설명되어있다.

https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-2

# 링크 따라한 내용
# 로컬 터미널
ssh-keygen -t ed25519

# 엔터 3번
ssh-copy-id 서버이름@서버주소
# 포트를 사용한다면
ssh-copy-id -p 포트번호 서버이름@서버주소

# gpu 서버
# .ssh가 잘 복사되었는지 확인
ls -a
cd .ssh
ls
# authorized_keys가 있으면 잘 복사됨

원래는 서버이름@서버주소 뒤에 -p 포트번호를 해도 잘 진해이 되어야하는데 나는 진행이 안되길래 순서를 바꿔봤더니 연결이 되었다.

 

- 보안키를 만들었으니 이제 저장장소를 내 gpu로 설정해보자

# 로컬 터미널에서
dvc remote add -d 저장소이름 ssh://서버주소/서버에서 저장소로 사용할 폴더 경로

dvc remote modify 저장소이름 user 유저이름
dvc remote modify 저장소이름 port 포트번호
dvc remote modify 저장소이름 keyfile 위에서 생성한 프라이빗키 파일 경로

 

- 자동생성된 .dvc/config 파일 확인 및 저장

# 파일 확인
cat .dvc/config

# 저장
git add .dvc/config
git commit -m "add remote storage"

 

6) dvc push

지금까지 진행한 모든 과정을 원격 저장소에 업로드한다.

dvc push

 

4. dvc 데이터 전송, 이동

지금까지는 내 데이터를 원격저장소에 올리는 방법을 실습했다면 지금은 원격저장소에 있는 데이터를 내 컴퓨터로 다운받는 방법을 실습한다. 위 실습을 했다면 dvc에 데이터들이 있으니깐 실습환경을 삭제먼저 한다.

rm -rf .dvc/cache/		# 캐시 삭제
rm -rf data			# 데이터 삭제

1) dvc pull

# 데이터 받아오기
dvc pull
ls data

 

 

 

 

2) dvc checkout

data의 버전을 변경하는 명령어로, 우리가 무엇인가를 변경해서 업데이트까지 맞췄는데 그 전에 사용하던 버전으로 변경해야하는 경우 사용한다.

 

- 데이터 변경, 업그레이드

# 데이터 변경
vi data/demo.txt

-----demo.txt 편집기-----
Hello dvc
bye dvc
------------------------

# 변경되었는지 확인
cat data/demo.txt

# dvc add
dvc add data

# git add
git add data.dvc
git commit -m "updata demo.txt"

# dvc push
dvc push

cat data/demo.txt

 

- 이전 버전으로 되돌아가기

# 지금까지 commit한 내용 확인
git log --oneline

# data.dvc 상태를 이전 버전으로 세팅
# 커밋번호에는 oneline에서 확인한 commit 맨 앞에 번호 입력
git checkout 커밋번호 data.dvc

# checkout만 단독으로 사용하여 이전 버전 저장 (=이 때 변경이 됨)
dvc checkout

# 데이터 변경 확인
cat data/demo.txt

이전 버전으로 잘 돌아가서 bye dvc는 없어지고 Hello dvc만 출력되는 것을 확인할 수 있었다.

cat data/demo.txt

 

5. GitHub

이 모든 과정을 최종적으로 git hub에 올린다.

지금까지 git commit까지만 수행했는데 git을 써본 사람이라면 마지막은 git push라는 것을 알것이다.

git에 dvc 파일을 올려두면 나중에 git clone으로 데이터를 편하게 가지고 올 수 있다.

 

아래 접은 글에서는 GitHub 연결하는 방법 처음부터 끝까지 나와있고, 위 실습을 따라한 사람이라면 일부만 따라하면 된다.

1) 레파지토리 만들기

4) git commit /  remote / push

요렇게 두 과정만 따라하면 된다.

더보기

git hub 연결

다음으로는 git hub로 연결을 해보도록 하겠다.

 

1) 레파지토리 만들기

본인이 사용하는 git hub를 브라우저로 들어가서 새로운 레파지토리를 만들어준다.

새 레파지토리를 만들면 http 또는 ssh 주소를 받을 수 있다.

이 주소를 복사해서 다시 터미널로 이동한다.

 

2) git에 파일 생성

# 현재 디렉토리 확인
pwd

# git 상태 확인
git status

# 임의의 폴더 및 파일 생성
mkdir data			# 앞으로 데이터를 저장할 폴더 생성
cd data				# data 폴더로 이동
vi demo.txt			# 임의의 텍스트 폴더 생성

------ demo.txt 편집기 ------
# i를 눌러서 Insert모드로 변환
Hello dvc
# esc :wq 엔터
----------------------------

# 상태 확인
git status

위와같이 하면 새롭게 폴더와 파일을 만들었기 때문에 git hub에 올려야 한다고 안내문구가 나온다.

나의 경우 한글로 나오는데 (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오) 라고 나온다.

 

3) git add

# 한단계 위쪽으로 위치이동
cd ..

# add를 통해 내 저장소에 올려준다.
# add . 를 통해 모든 자료를 올린다.
git add .

git status

add는 임시저장소에 자료를 올리는 느낌이라서 git hub에 완전히 올리려면 commit 명령어가 필요하다.

 

4) git commit / remote / push

git commit -m "first commit"
git remote add origin 위에서 복사한 경로
git push origin master

# username for 'https://github.com': 본인 깃허브 아이디
# password for '경로' : 본인 깃허브 토큰

-m은 commit하는 자료들이 뭔지 알 수 있도록 메세지를 달겠다는 것인데 버전을 작성하기도 하고 무엇을 수정했는지 설명하기도 한다.

push를 통해 git에 등록을 한다.

remote add origin을 해야 브라우저에서 보는 git hub와 내 컴퓨터 git이 연결된다.


아직 실제 데이터로 적용해보지도 않았는데 어렵고 헷갈리는 느낌이다...

완전정복을 위해 열심히 공부하자.

 

 

 

profile

매직코드

@개발법사

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!