23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
데이터 사이언스가 과학이라고 불리기 위해서는 testable explanation 한 형태를 갖춰야한다. reproducibility 라고도한다. 하지만 현실의 데이터는 계속해서 변한다. 단순 통계도 시간이 흐르면서 데이터가 추가되기도하고, 오류가 수정되기도 하고, 때로는 기준이 변경되기도 한다. 따라서 reproducibility 를 위해선 변하지 않는 versioned data 가 필요하다.
또한, 머신러닝에서도 소프트웨어 개발 프로세스를 적용하기 시작하면서 소스코드에 해당하는 데이터를 버저닝하여 관리하는 것이 더 이상 드문일이 아니다.
따로 데이터 버저닝 툴을 이용하지 않더라도, 데이터 버저닝 목적으로 데이터를 구조화하여 사용하는 경우는 많다. 단순하게는 매일 변경되는 테이블을 매일 스냅샷을 생성하여 날짜별로 파티셔닝하여 저장하고, 특정 날짜의 데이터가 필요할 경우 해당 파티션의 데이터를 조회하는 것도 데이터 버저닝의 한 형태로 볼 수 있다. 하지만 툴을 이용하지 않는 위의 방법은 versioned data 에 대한 immutability 를 보장해주지 않고, 실제 일부 데이터만 변경되더라도 매일 전체 데이터가 중복으로 저장된다는 문제가 있다.
Data versioning tool 은 이런 문제점들을 보완하고, 버전 관리를 위한 편의를 제공해준다. 대표적으로 dvc, delta lake, git lfs 이 있고, 올해 프로젝트에 적용한 dvc 에 대해서 이야기를 해보겠다. https://dagshub.com/blog/data-version-control-tools/ 에서 각 툴들의 비교를 볼 수 있다.
처음 data versioning tool 을 선택하면서 가장 중요하게 생각했던 부분은 사용하는 모델러들의 새 도구에 대한 학습 부담을 덜어주는 것이었다. git 은 버전 관리를 위해 가장 널리 사용되고, 구성원 모두 익숙하게 사용하는 툴이었기 때문에 git 의 인터페이스를 이용하는 dvc 와 git-lfs 가 후보로 떠올랐다. git-lfs 의 경우 github 에서 제공해주는 lfs 서버는 데이터 사이즈 제약이 심해서 자체 lfs 서버를 운영해야 하지만, dvc 의 경우 data 를 저장할 storage 만 설정해주면 되기때문에 dvc 를 이용하기로 했다.
기본적인 동작 방식은 git-lfs 와 유사하다. 실제 데이터는 지정된 storage 에 저장되고, git 에는 설정파일과 데이터의 메타파일이 저장된다. dvc 에 데이터를 저장할 때는 remote storage 에 데이터를 저장하고, remote storage 내 위치를 메타파일에 저장한다. dvc 에서 데이터를 가져올 때는 메타파일에서 해당 데이터의 remote storage 내 위치를 조회하고, 이 정보를 기반으로 데이터를 가져온다. 그리고 설정파일과 메타파일을 git 으로 버전관리를 함으로써 dvc 에 저장되는 데이터도 같은 버전관리 프로세스를 따라가게 된다.
자세한 내용은 https://github.com/iterative/dvc#how-dvc-works 를 참조
간단하게 기본 작업흐름의 커맨드는 아래와 같다.
아래 명령어로 dvc 를 설치하고, git repo 를 clone 후 repo 내 dvc 관련 설정파일을 초기화한다.
pip install dvc
git clone https://github.com/owner/repo
cd repo
dvc init
아래처럼 설정파일이 추가 된 것을 확인할 수 있다.
$ git status
Changes to be committed:
new file: .dvc/.gitignore
new file: .dvc/config
...
$ git commit -m "Initialize DVC"
아래 명령어로 remote storage 를 설정 후, git 에 추가한다.
dvc remote add -d storage s3://mybucket/dvcstore
git add .dvc/config
git commit -m "Configure remote storage"
dvc add data/data.xml
git add data/data.xml.dvc data/.gitignore
git commit -m "Add raw data"
dvc push
dvc add 에서는 데이터 파일의 hash 를 계산하여 .dvc 메타파일에 저장을하고, 실제 remote storage 로의 전송은 dvc push 단계에서 수행된다.
git clone
git pull
dvc pull
dvc pull 단계에서 git 의 메타파일을 기반으로 데이터를 remote storage 로부터 가져온다.
실제 dvc 를 이용해보면 dvc add 단계에서 data file 들을 gitignore 에 추가해주기 때문에 data file 이 github 에 저장되는 것을 방지해준다.
dvc 에서는 add, checkout, commit, diff, push, pull 등의 git 기본 명령어 외에 추가적인 기능들도 다양하게 지원한다. dvc 홈페이지에는 다음과 같이 정의되어 있다.
Data Version Control is a new type of data versioning, workflow, and experiment management software, that builds upon Git
여기서 workflow 가 들어있는게 의아하게 들릴 수 있는데, dvc 는 run 명령어를 통하여 pipeline 구성이 가능하다. 실제로 dvc pull 단계에서 데이터를 가져오는 것도 일종의 built-in pipeline 으로 볼 수 있다. 큰 데이터를 저장하기 위해서 dvc 를 이용하는데 기본적으로 local workspace 에서 작업하는 것을 전제로 하기때문에, 아이러니하게도 로컬에 저장하기 힘들정도로 큰 데이터의 경우는 깔끔하게 동작하지 않는다. 데이터가 로컬에 저장하기 힘들정도로 커지고, spark 같은 분산처리 framework 를 사용하게 되는 경우 import-url 을 이용하거나 아니면 따로 데이터를 저장하고 가져오는 pipeline 을 구성해야 하기 때문에 많이 번거롭다. 하지만 반대로 pipeline 기능을 이용해서 spark 이나 기타 다른 framework 을 이용하여 데이터를 저장하거나 가져올 수도 있다. 관심 있는 분은 https://dvc.org 참고하세요.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.