iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
AI/ ML & Data

從點子構想到部署上線:機器學習專案的一生系列 第 27

[Day 27] ML 專案的工具介紹 - Part 2. 資料和模型的版本控制 DVC

  • 分享至 

  • xImage
  •  

昨天介紹 data pipeline 的管理工具,今天讓我們邁入下一步,先來介紹資料版本要如何控管,接著介紹在建立機器學習模型時,要如何有效率地進行實驗追蹤和視覺化吧。


資料版本控制:DVC (Data Version Control)

DVC(Data Version Control)是一個開源的版本控制系統,專門用於管理和追蹤機器學習專案中的數據和模型。簡單來說,DVC 就是 data 版本的 Git,將版本控制的概念引入機器學系專案中,讓我們可以更有效率地追蹤和共享每一個版本的資料集和模型。

DVC 的特點

  1. 數據版本控制:DVC 的使用方式類似於 Git,可以對資料和模型進行版本控制,也可以自由切換版本,確保實驗的可重現性。
  2. 可以支援任何儲存服務:DVC 沒有指定的儲存空間,可以跟任何 cloud storage 服務(如 AWS S3、 Google Cloud Storage 等)一起使用。
  3. Data Pipelines:可以使用 DVC 定義 data pipelines,以及模型運作的 workflow。
  4. 實驗追蹤:DVC 提供實驗數據的追蹤,讓使用者方便管理機器學習專案中的實驗結果。
  5. 模型管理:DVC 可以對模型進行版本控制和管理,方便用戶查看模型的實驗數據。

基本使用方法

接下來介紹 DVC 的基本使用方法。

  • 安裝 DVC:pip install dvc

  • 在 Git 目錄中初始化DVC

dvc init
git commit -m "Initialize DVC"
  • 新增資料文件
dvc add data.csv
git add data.csv.dvc .gitignore
git commit -m "Add data.csv to DVC"

dvc add data.csv 指定會讓 DVC 將文件的資訊儲存在 .dvc 檔案中,並且原本的 data.csv 移到 cache。

  • 將資料儲存在 S3 上,並上傳資料
dvc remote add -d myremote s3://mybucket/dvcstore
git commit .dvc/config -m "Configure remote storage"
dvc push

Data Pipelines

DVC 也可以用來建立 data pipelines,建立方法可以使用 dvc stage add 來建立每個 stage 的內容,也可以建立一個 dvc.yaml 來定義 data pipeline。

dvc stage add

以下是一個示範的指令。

dvc stage add -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

以上定義這個 stage 的幾個資訊:

  • -n prepare:使用 -n 來為這個 stage 命名,如 prepare 是該 stage 的名稱。

  • -p prepare.seed,prepare.split-p 用來指定這個 stage 中會使用到的參數,參數數值會在 params.yaml 中被指定的參數,讓 DVC 可以追蹤這些參數的變化,並確保每次運行都可以重現結果。

  • -d src/prepare.py -d data/data.xml:-d 代表 dependencies(依賴),DVC 會追蹤這些 dependencies 的變化,若任一個 dependencies 改變,DVC 會重新運行這個 stage。此處有兩個 dependencies:

    1. src/prepare.py:這是將要執行的 Python 腳本。
    2. data/data.xml:這是作為輸入數據的 XML 文件。
  • -o data/prepared:-o 代表 output(輸出),指定輸出的目錄或文件,此處是 data/prepared。
    DVC 會追蹤這個輸出目錄中的內容,並將其作為該 stage 的結果。如果輸出文件發生變化,DVC 會更新相關版本。

  • python src/prepare.py data/data.xml:這是實際執行的命令。DVC 會執行 src/prepare.py,並使用 data/data.xml 作為輸入文件。

整體來說,這個 stage 會執行 src/prepare.py,用以處理輸入數據(data/data.xml),並生成處理後的數據文件到 data/prepared 目錄。

使用 dvc stage add 的話,會自動生成 dvc.yaml,也可以直接編輯 dvc.yaml 來定義 data pipeline:

stages:
  prepare:
    cmd: python src/prepare.py data/data.xml
    deps:
      - src/prepare.py
      - data/data.xml
    params:
      - prepare.seed
      - prepare.split
    outs:
      - data/prepared

  featurize:
    cmd: python src/featurization.py data/prepared data/features
    deps:
      - src/featurization.py
      - data/prepared
    params:
      - featurize.max_features
      - featurize.ngrams
    outs:
      - data/features

  train:
    cmd: python src/train.py data/features model.pkl
    deps:
      - src/train.py
      - data/features
    params:
      - train.seed
      - train.n_est
      - train.min_split
    outs:
      - model.pkl

以上的程式碼中,我們定義了三個 stages:preparefeaturizetrain,接著,可以使用 dvc repro 來執行 pipeline,也可以使用 dvc dag 來查看 pipeline 的 DAG,如以下所示:

         +---------+
         | prepare |
         +---------+
              *
              *
              *
        +-----------+
        | featurize |
        +-----------+
              *
              *
              *
          +-------+
          | train |
          +-------+

以上是 DVC 管理資料版本和建立 data pipeline 的方式。
不過 DVC 的功能還不只這樣哦,接下來讓我們看一下他要怎麼追蹤實驗跟管理模型。


管理實驗數據

如果想要用 DVC 管理實驗數據,需要先使用 pip install dvclive 來安裝 DVCLive

使用的方式非常簡單,假設你使用 hugging face 的話,只要在如以下示範增加幾行程式碼,即可開始追蹤數據。他也支援 Pytorch、Keras 或是單純使用 Python 呼叫。

from dvclive import Live
from dvclive.huggingface import DVCLiveCallback

...
with Live() as live:
    trainer.add_callback(
        DVCLiveCallback(live=live)
    )
    trainer.train()
    trainer.save_model("mymodel")
    live.log_artifact("mymodel", type="model")

每次執行程式碼都會創建一個 DVC 實驗,DVCLive 會自動記錄一些來自機器學習框架的 metrics、parameters 和圖表,以及由 DVC 追蹤的任何數據。我們也可以自行定義要繼續哪些其他資訊,如以下所示:

  • artifact:live.log_artifact("model.pt", type="model", name="gpt")
  • 圖片:live.log_image("image.png", img)
  • metric:live.log_metric("acc", 0.9)
  • parameters:live.log_params(params)
  • 圖表:live.log_plot( "iris", datapoints, x="importance", y="name", template="bar_horizontal", title="Iris Feature Importance" )
  • sklearn 的圖表:live.log_sklearn_plot("roc", y_true, y_score)

接著,我們可以使用 DVCLive 的 report 來追蹤這些數據。
有三個以下方法:

  1. DVCLive Report
  2. VSCode Extension
  3. DVC Studio

    圖片來源:[2]

管理模型

如果在上述內容中,使用 live.log_artifact(),DVC 會將模型加入 model registry。如此一來,便可以透過 DVC 追蹤和管理模型。

若我們執行以下程式碼:

from dvclive import Live

with Live() as live:

...

    live.log_artifact(
        str("models/model.pkl"),
        type="model",
        name="pool-segmentation",
        desc="This is a Computer Vision (CV) model that's segmenting out swimming pools from satellite images.",
        labels=["cv", "segmentation", "satellite-images", params.train.arch],
    )

便可以在 DVC Studio 的 Models 頁面,看到名為 pool-segmentation 的模型,以及他的描述。

我們可以方便地用 UI 進行模型的版本設定。

也可以設定模型的部署環境,並且會自動觸發 CI/CD,將模型部署到指定的環境。


我們在本篇文章中大致介紹了 DVC 的功能,他有非常強大的版本控制和實驗管理能力,讓我們可以更好地協作、追蹤實驗、管理資料集,並確保結果的可重現性。

如果我們不需要建立複雜的 data pipelines,也可以考慮先從 DVC 開始,輕量又好上手!


謝謝讀到最後的你,如果喜歡這系列,別忘了按下喜歡和訂閱,才不會錯過最新更新。
如果有任何問題想跟我聊聊,或是想看我分享的其他內容,也歡迎到我的 Instagram(@data.scientist.min) 逛逛!
我們明天見!


Reference:
[1] https://dvc.org/doc/start
[2] https://dvc.org/doc/start/experiments/experiment-tracking?tab=DVCLive-Report


上一篇
[Day 26] ML 專案的工具介紹 - Part 1. Data Pipelines 管理 - Airflow 和 Dagster
下一篇
[Day 28] ML 專案的工具介紹 - Part 3. 實驗追蹤工具 - TensorBoard、Weights & Biases 和 MLflow
系列文
從點子構想到部署上線:機器學習專案的一生30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言