數據版本管理 DVC data version control 和git一起管理你的機器學習實驗數據

數據版本管理的目的

每個模型的在訓練的時候,所使用的訓練數據/測試數據都有可能是變化的,在進行復現實驗結果的時候,除了使用同樣的代碼,config,使用同樣的數據也是非常重要的。

如下圖,如果要人工記錄數據版本以及模型版本,使之匹配是比較麻煩的,因此,數據版本管理是十分必要的。

一、簡介

DVC 可以輕鬆地將數據存儲在許多存儲系統上,像本地磁盤、SSH 服務器或雲系統(S3、GCP 等)。DVC 管理的數據可以很容易地與其他使用此存儲系統的用戶共享。

The easiest (but not perfect!) analogy to describe it: DVC is Git (or Git-LFS to be precise) & Makefiles made right and tailored specifically for ML and Data Science scenarios.

  • DVC和git結合,對數據、模型、代碼進行版本管理。
  • 安裝簡單,pip install dvc
  • 使用方便,dvc push; dev pull等
  • 速度快,在dvc add之後,會生成一個新的文件,如,dvc add data.sql,會生成data.sql.dvc(kb級別),git會上傳data.sql.dvc這個文件,dvc根據。dvc的文件可以pull到對應的文件。如果需要指定版本的data、model、code,只需要git checkout 版本號 ,然後dvc pull就好。

二、Install

官網在這裏

  • mac、linux、window的安裝方式類似,都可以使用pip/conda  的方式安裝。
  • python3.6+  pip install dvc
  •  Python versions 2.7, 3.6, and 3.7 conda install -c conda-forge dvc

三、Tutorials

主要有這些功能,官網在這裏, 可以在這裏模擬整個流程。

四、dvc 對數據和模型進行版本管理

假設,訓練需要使用的代碼、數據,訓練得到的模型都在 ./test_dvc 的文件夾中,第一版訓練結束之後,上傳代碼、數據、模型。第二版訓練結束之後,又上傳了代碼、數據、模型,git用於push代碼和數據模型對應的.dvc文件,dvc用於push數據和模型:

test.py,爲模型訓練需要使用的代碼

data_v1.txt,爲模型訓練需要使用的第一版數據

model_v1.txt,爲訓練結束之後得到的第一版模型

data_v2.txt,爲模型訓練需要使用的第二版數據

model_v2.txt,爲訓練結束之後得到的第二版模型

需要進行版本管理的時候,和dvc的操作和git類似,主要使用dvc push和dvc pull的功能:

dvc push具體如下:

  • cd ./test_dvc
  • git init
  • dvc init ,會提示初始化完成:

  • dvc add data_v1.txt,會生成一個對應的data_v1.txt.dvc文件
  • dvc add model_v1.txt,會生成一個對應的model_v1.txt.dvc文件
  • 配置dvc的config,對data.txt和model.txt進行share,可以配置share的位置,可以使用s3,ssh.local,http等
    • 以local爲例,dvc remote add -d myremote data_path(相對路徑!!)
    • 以s3爲例,dvc remote add myremote s3://bucket/path
  • 這時候,使用git提交代碼和dvc自動生成的一些文件,使用dvc push需要管理的文件
    • git add 需要提交的文件(注意提交gitignore,這樣纔可以只push .dvc文件,否則原始文件也會push)
    • git commit -m “version description”
    • git push 
    • dvc push

version 2 和version1操作步驟一樣

 

dvc pull具體如下:

假設已經push過version1和version2的data、model。

  • git clone之前的代碼
  • dvc pull ,便可得到當前版本的data、model
  • 如果需要指定版本的代碼和對應的data/model,git checkout 版本號 ,然後dvc pull就好啦

 

五、各種坑

1、dvc add 的時候,只能add自己的目錄下的自己的文件!!

否則會出現如下問題:

  • 假設用a的賬號 dvc add a的目錄,但是a的目錄下還有b的文件,這時候b的文件就會被刪除(且無提示是否刪除!!!)。
  • 假設用a的賬號 dvc add b的目錄,b的目錄下有a的文件和b的文件,會add失敗,需要將b的文件刪除,纔可以成功。

2、dvc add 了哪個路徑的文件,dvc pull的時候就會pull到哪個路徑,

如果需要pull到當前路徑,需要在dvc add的時候使用相對路徑,並把需要add的文件放在git 倉庫的位置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章