Data Version Control (DVC):
專門為資料科學及機器學習所開發的版本控制工具,主要有以下特色:
:+1: 實用文章推薦:
DVC官方提供了幾個實用的使用範例(如下圖所示-Versioning Data and Model Files),其中大多摘錄資料科學的處理流程,包含了機器學習的流程以及資料管理等方案,透過官方手把手教學文件讓使用者能夠更快速的建立DVC實務應用
為對應架構內容,目前DSU主要選擇的方案如下:
接下來將會針對訂單辨識系統程式碼與模型進行簡單的版控與教學:
安裝DVC非常簡單,主要有以下方式:
本篇開發環境為Python,因此選擇 pip 來安裝 DVC(更多安裝方式請參考dvc-Installation):
$ pip install dvc
選擇Google Cloud Storage為遠端儲存空間(更多選擇方案dvc-remote storage):
$ pip install "dvc[gs]"
安裝完畢後接著將需要版控的專案資料夾進行初始化
專案資料結構如下:
dvc-test
├── main.py
└── model
└── my_model.h5
1. Git 初始化
$ git init
2. 建立 .gitingore
排除不需透過git版控的檔案
$ vi .gitingore
# 請依照使用情況調整
model/
.vscode
.DS_Store
__pycache__/
3. DVC 初始化
$ dvc init
成功會看到以下內容:
路徑下產生.dvc/
資料夾,其內容包含 .dvc/.gitignore 、 .dvc/cache/ 、 . dvc/config 三份檔案,其中最重要的是 .dvc/cache/, DVC 會在這邊建立檔案的連結,也是最後會 push 到雲端的檔案。
You can now commit the changes to git.
+---------------------------------------------------------------------+
| |
| DVC has enabled anonymous aggregate usage analytics. |
| Read the analytics documentation (and how to opt-out) here: |
| https://dvc.org/doc/user-guide/analytics |
| |
+---------------------------------------------------------------------+
What's next?
------------
- Check out the documentation: https://dvc.org/doc
- Get help and share ideas: https://dvc.org/chat
- Star us on GitHub: https://github.com/iterative/dvc
1. 首先將model資料夾加入dvc版控
$ dvc add model
完成後便會產生相對應的model.dvc(用來連結dvc資料)
dvc-test
├── main.py
├── model
│ └── my_model.h5
└── model.dvc
2. 將程式碼以dvc相關檔案及推送至Source Repositories
$ git add .
$ git commit -m "v0.0.1"
$ git remote add google ssh://[EMAIL]@source.developers.google.com:2022/p/[PROJECT_ID]/r/[REPO_NAME]
$ git push --all google
:::warning
本段落須事先準備下列項目:
1. projectname
- project name to use.
$ dvc remote modify myremote projectname myproject
2. url
- remote cloud storage URL.
$ dvc remote modify myremote url gs://bucket/remote
3. credentailpath
- service account credentials.
$ dvc remote modify myremote credentialpath /path/to/my/creds/[FILE_NAME].json
4. Push to GCS
$ dvc pushdvc push
Preparing to upload data to 'gs://bucket/remote'
Preparing to collect status from gs://bucket/remote
Collecting information from local cache...
[##############################] 100%
Collecting information from remote cache...
[##############################] 100
[##############################] 100% Analysing status
[##############################] 100% model/my_model.h5
$ git clone ssh://[EMAIL]@source.developers.google.com:2022/p/[PROJECT_ID]/r/[REPO_NAME]
$ dvc pull