데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      DVC(Data Version Control) 소개

      onevirus 21.10.01
      7,793 4 2

      Data versioning

      데이터 사이언스가 과학이라고 불리기 위해서는 testable explanation 한 형태를 갖춰야한다. reproducibility 라고도한다. 하지만 현실의 데이터는 계속해서 변한다. 단순 통계도 시간이 흐르면서 데이터가 추가되기도하고, 오류가 수정되기도 하고, 때로는 기준이 변경되기도 한다. 따라서 reproducibility 를 위해선 변하지 않는 versioned data 가 필요하다.
      또한, 머신러닝에서도 소프트웨어 개발 프로세스를 적용하기 시작하면서 소스코드에 해당하는 데이터를 버저닝하여 관리하는 것이 더 이상 드문일이 아니다.

       

      Data versioning tool

      따로 데이터 버저닝 툴을 이용하지 않더라도, 데이터 버저닝 목적으로 데이터를 구조화하여 사용하는 경우는 많다. 단순하게는 매일 변경되는 테이블을 매일 스냅샷을 생성하여 날짜별로 파티셔닝하여 저장하고, 특정 날짜의 데이터가 필요할 경우 해당 파티션의 데이터를 조회하는 것도 데이터 버저닝의 한 형태로 볼 수 있다. 하지만 툴을 이용하지 않는 위의 방법은 versioned data 에 대한 immutability 를 보장해주지 않고, 실제 일부 데이터만 변경되더라도 매일 전체 데이터가 중복으로 저장된다는 문제가 있다.
      Data versioning tool 은 이런 문제점들을 보완하고, 버전 관리를 위한 편의를 제공해준다. 대표적으로 dvc, delta lake, git lfs 이 있고, 올해 프로젝트에 적용한 dvc 에 대해서 이야기를 해보겠다. https://dagshub.com/blog/data-version-control-tools/ 에서 각 툴들의 비교를 볼 수 있다.

       

      Why DVC

      처음 data versioning tool 을 선택하면서 가장 중요하게 생각했던 부분은 사용하는 모델러들의 새 도구에 대한 학습 부담을 덜어주는 것이었다. git 은 버전 관리를 위해 가장 널리 사용되고, 구성원 모두 익숙하게 사용하는 툴이었기 때문에 git 의 인터페이스를 이용하는 dvc 와 git-lfs 가 후보로 떠올랐다. git-lfs 의 경우 github 에서 제공해주는 lfs 서버는 데이터 사이즈 제약이 심해서 자체 lfs 서버를 운영해야 하지만, dvc 의 경우 data 를 저장할 storage 만 설정해주면 되기때문에 dvc 를 이용하기로 했다.

       

      How DVC works

      기본적인 동작 방식은 git-lfs 와 유사하다. 실제 데이터는 지정된 storage 에 저장되고, git 에는 설정파일과 데이터의 메타파일이 저장된다. dvc 에 데이터를 저장할 때는 remote storage 에 데이터를 저장하고, remote storage 내 위치를 메타파일에 저장한다. dvc 에서 데이터를 가져올 때는 메타파일에서 해당 데이터의 remote storage 내 위치를 조회하고, 이 정보를 기반으로 데이터를 가져온다. 그리고 설정파일과 메타파일을 git 으로 버전관리를 함으로써 dvc 에 저장되는 데이터도 같은 버전관리 프로세스를 따라가게 된다.

      자세한 내용은 https://github.com/iterative/dvc#how-dvc-works 를 참조

       

      Tutorial

      간단하게 기본 작업흐름의 커맨드는 아래와 같다.

       

      설치

      아래 명령어로 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 참고하세요.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      onevirus 님의 최신 블로그

      더보기
      동영상 기고하기