MLOps study - Raviraja Week 3: DVC
17 Oct 2022Week 3는 DVC (Data Version Control) 에 대한 내용입니다. 일반적인 프로그래밍 코드들은 Git을 통해 관리됩니다. 그러나 ML 모델의 경우 전체 모델을 Git을 통해 관리하기에는 파일의 크기가 너무 큽니다. 따라서 아주 작은 metafile
을 통해서 전체 모델을 표현함으로써 Git에서도 충분이 관리가 가능한 구조를 만들어 낸 것이 핵심입니다. 또한 커다란 파일들은 Google drive와 같은 remote storage servers
를 통해서 따로 관리를 해 주게 됩니다.
Git과 DVC를 통해서 우리는 1) 버전을 관리하고 2) 커다란 파일들을 다루며 3) 프로젝트를 reproducible 하게 만들 수 있습니다.
Start DVC
python -m pip install dvc
dvc init
주의할 점은 dvc init
을 수행할 때 가장 상위 폴더에 위치해야 한다는 점입니다. .git
폴더가 위치한 디렉토리에서 커맨드를 입력하면 되고, .dvc
폴더와 .dvcignore
파일이 생성되면 완료 된 것입니다!
Configuring remote storage
DVC는 Github이 아닌 별도의 remote storage를 이용해 model parameter나 데이터셋처럼 크기가 큰 파일들을 저장할 수 있습니다. Amazon server, Google drive 등 다양한 저장소가 사용될 수 있지만, 여기서는 ssh 방식을 이용해 사용하는 서버에 직접 파일을 저장하는 방법을 알아보겠습니다.
우선 DVC에서 SSH 저장소를 이용하기 위해서는 dvc-ssh
모듈이 필요합니다. 이후 ssh에 대한 정보들을 저장해 주면 됩니다. 중요한 것은 password는 –local 옵션을 부여해야 한다는 것입니다. 안했다가는 git에 내 서버 비밀번호가 공개되는 수가 있으니 주의!!
python -m pip install dvc-ssh
dvc remote add -d storage ssh://xxx.xxx.xxx.xxx/<data_dir>
dvc remote default storage
dvc remote modify <설정한 remote이름> user <서버 유저 이름>
dvc remote modify <설정한 remote이름> port <열어놓은 포트>
dvc remote modify --local <설장한 remote이름> password <서버 비밀번호>
ref: DVC에서 SSH 저장소 사용하기
Saving model to the remote storage
dvc add <model 이름>
dvc push
dvc add
를 수행하게 되면 <model 이름>.dvc
파일과 .gitignore
파일이 새로 생성됩니다. 만약 dvc 파일을 하나의 폴더에 넣어서 관리하고 싶다면, 아래와 같이 해주면 되겠습니다.
dvc add <model 이름> --file <dvc 폴더>/<dvc 파일 이름>
dvc push <dvc 폴더>/<dvc 파일 이름>
재밌는 것은 막상 storage를 확인해 봐도, 이상한 이름의 폴더들만 잔뜩 생겼을 뿐, 파일이 직접 업로드 되지는 않는다는 것입니다. (이것 때문에 한참 헤맸다!!!) 그치만 잘 저장된 것이니 안심해도 됩니다!! 저장했던 파일을 지우고 아래 커맨드를 치면 바로 다시 저장한 모델이 다운로드 되는 것을 확인할 수 있으니까요.
dvc pull <dvc 폴더>/<dvc 파일 이름>
Versioning the model
가장 중요한 model versioning 입니다. 순서는 다음과 같은데, 몸에 익혀서 빼먹지 않도록 합시다!!
- dvc add <모델 이름=""> --file
/ 모델> - dvc push
/ - git tag -a “<버전>" -m "<버전 설명="">"버전>버전>
- git push origin <브랜치 이름="">브랜치>
- git push origin <버전>버전>
git tag에 해당 모델을 바인딩 시켜주는 것인데요, 결과적으로 해당 tag를 찾아가면 그 당시의 모델을 불러올 수 있게 됩니다.
git checkout tags/<버전> -b <브랜치 이름>
dvc pull