人工智能項目的 Python 版本管理工具DVC

1. 人工智能項目的版本管理
對于傳統(tǒng)的軟件工程項目(比如java, web), git是一個非常不錯的代碼版本管理工具。但是人工智能項目,如機器學(xué)習(xí)或者深度學(xué)習(xí),和傳統(tǒng)軟件工程項目有一定的差別
代碼和文件:人工智能項目除了代碼以外,還要大量的訓(xùn)練數(shù)據(jù),還有文件比較大的模型文件 開發(fā)過程:人工智能項目開發(fā)過程,存在一定的不確定性,是一個探索調(diào)優(yōu)的過程。需要很多的組合調(diào)參(不同的參數(shù),不同的數(shù)據(jù)等),然后分別做評估,挑選最好的模型。這是一個相對復(fù)雜的過程,要匹配參數(shù),數(shù)據(jù),代碼,模型。
如上所述,這些差別,git存在一定不足
git建議的單個文件在50M,并不擅長管理操作大的文件,如幾十G的文件 git因為大數(shù)據(jù)上管理的不足,就無法管理與之相互關(guān)聯(lián)的一連串的迭代變化
是時候祭出DVC, data version control,數(shù)據(jù)版本管理工具。
2. 什么是DVC

dvc即data version control, 是一種針對人工智能項目(機器學(xué)習(xí)或者深度學(xué)習(xí))的數(shù)據(jù)版本管理工具。DVC的操作和GIT類似,可以認(rèn)為為GIT的二次開發(fā)封裝。結(jié)合GIT,DVC可以有效的管理人工智能項目的整個流程,包括代碼,數(shù)據(jù),訓(xùn)練配置,模型。
GIT和DVC分工如下:
dvc:負(fù)責(zé)數(shù)據(jù)和模型等大文件的存儲、下載等管理,同時生成元數(shù)據(jù)(.dvc文件)描述這些數(shù)據(jù)和模型, 并且串聯(lián)整個人工智能項目工作流 git:負(fù)責(zé)代碼和dvc生成的元數(shù)據(jù)文件的版本管理
3. DVC操作
3.1.安裝
pip?install?dvc
3.2.數(shù)據(jù)版本管理
3.2.1 初始化
#?到git目錄下
git?config?--global?user.name?"xxxx"
git?config?--global?user.email?"[email protected]"
git?clone?ssh://[email protected]/test/test.git
cd?test/
#?dvc?初始化
dvc?init
#?將dvc?初始化的文件提交?git
git?commit?-m?"Initialize?DVC"
#?初始化后會在項目目錄下生成.dvc文件夾,存儲dvc相關(guān)的信息
.dvc
├──?config
├──?plots
│???├──?confusion.json
│???├──?default.json
│???├──?scatter.json
│???└──?smooth.json
└──?tmp
????└──?index
3.2.2 添加數(shù)據(jù)
可以通過dvc add/git add將數(shù)據(jù)和模型添加到版本管理中
#?假設(shè)數(shù)據(jù)在arch_train/model_zoo/nsfw_online_err.zip
dvc?add?arch_train/model_zoo/nsfw_online_err.zip
git?add?arch_train/model_zoo/.gitignore?arch_train/model_zoo/nsfw_online_err.zip.dvc
#?.dvc?后綴為數(shù)據(jù)的元數(shù)據(jù)文件,默認(rèn)為存儲路徑為.dvc/cache下
cat?arch_train/model_zoo/nsfw_online_err.zip.dvc
outs:
-?md5:?26eb560df48bf11ddf303135749b0c60
??path:?nsfw_online_err.zip
.
├──?cache
│???└──?26
│???????└──?eb560df48bf11ddf303135749b0c60
3.2.3 版本切換管理
可以配合git的分支管理,來獲取分支下不同的數(shù)據(jù)和模型。
#?切換分支
git?checkout?分支名
#?dvc通過git中的.dvc?文件,切換這個分支下數(shù)據(jù)
dvc?checkout
3.2.3 共享代碼(push/pull)
當(dāng)多人開發(fā)時,dvc push會根據(jù)config中的遠(yuǎn)程主機配置,將數(shù)據(jù)push到遠(yuǎn)程主機。遠(yuǎn)程主機可以是ssh,http還有云盤存儲等。
#?建立?遠(yuǎn)程服務(wù)?ssh或者h(yuǎn)ttp
#?這里以本地的其他目錄為例子
mkdir?-p?/tmp/dvc-storage
dvc?remote?add?-d?myremote?/tmp/dvc-storage
git?commit?.dvc/config?-m?"Configure?local?remote"
#?新建后?就會在`.dvc/config`存儲遠(yuǎn)程主機訪問的方式
vim?config?
[core]
????remote?=?myremote
['remote?"myremote"']
????url?=?/tmp/dvc-storage
#?dvc?push?上傳數(shù)據(jù)
dvc?push
#?遠(yuǎn)程主機中數(shù)據(jù)是上傳的一個備份
tree?/tmp/dvc-storage/
/tmp/dvc-storage/
└──?26
????└──?eb560df48bf11ddf303135749b0c60
1?directory,?1?file
ls?-l??/tmp/dvc-storage/26
total?93400
-r--r--r--?1?root?root?95640298?Sep??4?13:44?eb560df48bf11ddf303135749b0c60
ls?-lh??/tmp/dvc-storage/26
total?92M
-r--r--r--?1?root?root?92M?Sep??4?13:44?eb560df48bf11ddf303135749b0c60
如果數(shù)據(jù)變更,同樣dvc+git進行版本管理
#?數(shù)據(jù)變化
dvc?add?arch_train/model_zoo/nsfw_online_err.zip
git?commit?arch_train/model_zoo/.gitignore?arch_train/model_zoo/nsfw_online_err.zip.dvc?-m?"Dataset?updates"
dvc?push
當(dāng)其他人想使用共享代碼和數(shù)據(jù)時 git clone + dvc pull
#?下載代碼和數(shù)據(jù).dvc
git?clone?ssh://[email protected]/test/test.git
cd?test/
#?根據(jù).dvc和config遠(yuǎn)程主機配置,下載對應(yīng)的數(shù)據(jù)和模型
dvc?pull?
3.3 串聯(lián)工作流
3.2中已經(jīng)介紹了dvc的最常用的操作,可以看出操作和git的操作基本上吻合的,原理上可以和git對等。可以通過dvc run來建立訓(xùn)練和評估過程的依賴關(guān)系,即將輸入的數(shù)據(jù),預(yù)訓(xùn)練的模型,配置和輸出的模型和訓(xùn)練腳本關(guān)聯(lián)起來,可以很方面追溯執(zhí)行過程, 每次關(guān)聯(lián)dvc都會生成一個yaml配置來描述這個關(guān)聯(lián)性。dvc run的主要參數(shù)
-n操作的名稱-p配置,可以是多個,文件或者文件夾-d操作依賴的數(shù)據(jù),腳本和模型等,可以是多個,文件或者文件夾-o操作的輸出,可以是多個,文件或者文件夾command:執(zhí)行操作的命令如python -u train.py
dvc?run?-n?prepare?\
??????????-p?prepare.seed,prepare.split?\
??????????-d?src/prepare.py?-d?data/data.xml?\
??????????-o?data/prepared?\
??????????python?src/prepare.py?data/data.xml
4. 總結(jié)
dvc把數(shù)據(jù)、模型、算法腳本和Metrics當(dāng)成一次代碼checkout,配合git就可以很方面的管理每一次訓(xùn)練的所有環(huán)節(jié),還可以通過dvc metrics show -T來比較不同版本的模型性能。更多詳細(xì)的dvc功能參見https://dvc.org/doc/start;歡迎交流討論。總結(jié)如下
dvc add/push/pull 管理數(shù)據(jù) dvc run 管理工作流串聯(lián) 建議一個模型迭代一個分支,該分支囊括代碼,數(shù)據(jù),模型,配置, 模型評估;可以完美迭代模型優(yōu)化,而處亂不驚。
作者簡介:wedo實驗君, 數(shù)據(jù)分析師;熱愛生活,熱愛寫作
贊 賞 作 者

Python中文社區(qū)作為一個去中心化的全球技術(shù)社區(qū),以成為全球20萬Python中文開發(fā)者的精神部落為愿景,目前覆蓋各大主流媒體和協(xié)作平臺,與阿里、騰訊、百度、微軟、亞馬遜、開源中國、CSDN等業(yè)界知名公司和技術(shù)社區(qū)建立了廣泛的聯(lián)系,擁有來自十多個國家和地區(qū)數(shù)萬名登記會員,會員來自以工信部、清華大學(xué)、北京大學(xué)、北京郵電大學(xué)、中國人民銀行、中科院、中金、華為、BAT、谷歌、微軟等為代表的政府機關(guān)、科研單位、金融機構(gòu)以及海內(nèi)外知名公司,全平臺近20萬開發(fā)者關(guān)注。
長按掃碼添加“Python小助手”
▼點擊成為社區(qū)會員? ?喜歡就點個在看吧

