使用情境
- 需要跑多次實驗,管理不同hyper parameters。包括神經網路拓譜(透過git搭配branch)
- 透過GitOps來Triger運算。
- 比較不同版本模型的performance。涉及到不同branch進行triger,因此只能透過遠端資料庫把結果算完後往遠端資料庫推送。
- DVC具備了基本的模型管理,但是如果同時triger不同的branch到不同的computing node上,會造成不同node計算結果無法同時呈現。這邊只能仰賴多架構一個外部管理系統,來蒐集不同節點上的運算結果。這邊就依賴sacred。
預計會有多台運算節點。每次在進行模型管理時,如果有修改神經網路架構,就會透過使用不同branch進行管理。因此架構會比較類似:
- 使用者把code推到git上,觸發了CI流程。
- runner開始執行git上的模型訓練程式碼。
- runner一邊跑一邊把模型結果往sacred database上推送。
- 所有結果透過omniboard呈現。
這種狀態的使用情境說得更清楚一些,就是如果今天有一個GitOps都透過Git進行模型和數據管理。在不同的實驗下可以透過Git的branch來設定不同的模型架構或是訓練參數。但很多時候會開很多個分支,並透過CI流程同時訓練這些不同的分支,這時候就需要有一個Server來接受不同機器回傳的結果。(儘管DVC已經說明有內部的實驗管理,且聲稱無須架構其他Server,但做法比較類似先把迴圈在分支中寫好,然後在同一分支中一個一個進行實驗再進行記錄。跨分支管理實驗比較難以實現)
就需要針對幾個主題進行筆記:
- 遠端的sacred database架設與如何透過omniboard進行資料調閱
- 程式碼中如何進行資料推送
- DVC (data version control) 使用
DVC使用基礎
這邊集中在如何使用Webdav進行DVC管理。DVC還支援頗多的檔案伺服器傳輸協定,可以回頭參考說明文件。這邊跳過dvc安裝步驟。
1. 把專案加入dvc
在專案資料夾底下下達:
dvc init
整個專案就會進入dvc管理的狀態。
2. 指定dvc storage
dvc支援一些檔案傳遞協定,包括s3、ssh、scp等等。可以參閱官網的說明。目前很多NAS都有提供webdav服務,這邊就用webdav作為範例。記得把Server上面的webdav先打開。
dvc remote add <該位點的暱稱> wedav://<帳號>@<ip>:<port>/<資料夾>
除了webdav之外,也支援webdavs服務,如果有SSL憑證的使用者可以把webdav改為webdavs。帳號部分就是使用nas上面的帳號。這些資訊都會放到 .dvc 底下的config中。也就是會一起推到git server上。用這種方式大概也需要透過密碼詢問,因此讓dvc在上下載資料的時候進行密碼詢問:
dvc remote modify <該位點的暱稱> ask_password true
如果有 1)自動輸入密碼 跟 2)不想讓人看到自己在nas上面的帳號,dvc也允許使用者把帳號密碼透過放在本地端處理。這邊如果要進行DevOps就要記得在secrets裡面進行設定,這邊先略過不提。
dvc remote modify --local <該位點的暱稱> password <密碼>
dvc remote modify --local <該位點的暱稱> user <帳號> #有這行,上面的webdav網址就不用使用@指定帳號
這邊會建立一些local的檔案,並且修改某些gitignore。因此記得git commit 一下。
存放Dataset的位置可以不只一個。當有增加不同Dataset位置時,可用上面的指令加入。不過也設定default repo。
dvc remote default <該位點的暱稱> (如果忘記有哪些remote,可以先用 dvc list 把目前設定的位點列出來)
如果出現錯誤訊息: WARNING: No file hash info found for ...............................
就先回頭Check一下是不是帳號跟名稱沒有給定。
3. 特定資料夾加入dvc
dvc add <資料夾名稱>
這指令會自動增加.gitignore檔案,並且把這些資料夾加入gitignore。背後的涵義就是這些資料都不會透過git管理。所以後續記得把gitignore進行git commit。
4. 把資料加入後,確定資料是否有被追蹤到
dvc status
5. 如果資料有更動,且dvc status有追蹤到,就能把資料進行commit並把資料上傳
dvc commit
dvc push
6. 下載資料
dvc pull
Sacred database 架設
sacred有許多不同格式。官方推薦MongoDB,經過不同方式的文件描述,看起來也是透過MongoDB架設的狀況下,如果同時進行多個實驗彼此之間結果比較不會互相干擾。因此後面就透過docker進行MongoDB架設和可視化。
訓練程式碼範例
references
- https://www.runoob.com/mongodb/mongodb-tutorial.html 菜鳥教程
沒有留言:
張貼留言