2023年10月6日 星期五

使用sacred 與 dvc 進行機器學習模型管理

 使用情境

  1. 需要跑多次實驗,管理不同hyper parameters。包括神經網路拓譜(透過git搭配branch)
  2. 透過GitOps來Triger運算。
  3. 比較不同版本模型的performance。涉及到不同branch進行triger,因此只能透過遠端資料庫把結果算完後往遠端資料庫推送。
  4. DVC具備了基本的模型管理,但是如果同時triger不同的branch到不同的computing node上,會造成不同node計算結果無法同時呈現。這邊只能仰賴多架構一個外部管理系統,來蒐集不同節點上的運算結果。這邊就依賴sacred。
預計會有多台運算節點。每次在進行模型管理時,如果有修改神經網路架構,就會透過使用不同branch進行管理。因此架構會比較類似:


  1. 使用者把code推到git上,觸發了CI流程。
  2. runner開始執行git上的模型訓練程式碼。
  3. runner一邊跑一邊把模型結果往sacred database上推送。
  4. 所有結果透過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 菜鳥教程



沒有留言:

張貼留言

iscsi 連線問題筆記

如果要進行umount但是出現target buzy sudo fuser -km 掛載點 sudo umount 掛載點 iSCSI重啟 sudo open-iscsi restart  掛載lun iscsiadm -m discovery -t sendtargets -p...