MLOps 工具介紹(一):常見的三種模型實驗管理工具

在AI專案的模型驗證階段,有許多工具可以協助團隊進行模型管理,主要目的都是在幫助團隊管理多專案與多實驗的狀況,可以輔助開發過程較為順利,所有的實驗數據都會被紀錄與備份,可以減少實驗數據遺失的風險。這些工具各有特色與強項,這篇將提供讀者幾個熱門工具建議:

從「AI專案開發一定要用MLOPs嗎?從專案流程看起」這篇文章中,我們知道在做模型建立、模型驗證的時候需要思考以下幾個問題:

  • 多人協作如何紀錄分析每位協作者的實驗紀錄,如何從眾多的實驗紀錄中快速比較出預測效果最好的模型?
  • 當實驗階段嘗試很多新特徵或是不同樣式,可能有時序或無時序的資料時,如何方便管理?
  • 當發現有些實驗表現不錯,如何快速復刻該實驗?

因此,這篇文章將會和大家分享幾個有助於管理「紀錄實驗參數」、「模型訓練的 Loss 曲線」、「模型評估指標」、「儲存模型」等幾項實驗數據的好用工具,主要會介紹三個較多人使用與討論的工具: Tensorboard、Weight&Biases、MLflow。

(這邊以部分功能做示範,詳細更多功能可以參考每個工具的官方連結)

圖:ML流程圖

Tensorboard:

Tensorboard算是深度學習早期最著名的實驗管理工具,至今依然十分熱門,它主打幾個功能,如下圖所示:

  • 視覺化的方式呈現模型訓練的Loss曲線和評估指標
  • 視覺化的方式呈現模型結構圖(model graph)
  • 能以直方圖檢視weight、bias或其他 tensor 等不同訓練次數的變化
  • 除了能將更多參數、預測結果…等資訊視覺化,還能和各實驗進行比較。


圖片來源: https://www.tensorflow.org/tensorboard?hl=zh-tw,此圖片動畫分別說明Tensorboard的重要功能,1. 實驗數據紀錄(loss曲線、評估指標曲線…)、2. 測試資料集預測結果上傳、3. 模型圖(model graph)、4. 各權重數值分佈圖

  • 請特別注意:Tensorboard 沒有儲存模型的功能,他是以紀錄實驗數據為主

如何在Python開發環境使用,以及程式碼需要如何撰寫:

  1. 工具安裝

    pip install tensorboard

  2. 本地端啟動:

    1. tensorboard --logdir=<directory_name>
      • directory_name 默認是 logs 資料夾
    2. 在瀏覽器輸入 localhost:6006 可以開啟 Tensorboard UI 介面
  3. 程式碼撰寫:(以一個簡易的資料做示範)

    • tf.summary.create_file_writer 建立一個儲存 log 的資料夾給Tensorboard使用
    • tf.summary.scalar 將資料點寫入log檔
    # Specify a directory for logging data
    logdir = "./logs"
    
    # Create a file writer to write data to our logdir
    file_writer = tf.summary.create_file_writer(logdir)
    
    for i in range(200):
        with file_writer.as_default():
            tf.summary.scalar('accuracy', random() + 0.1, step=i)
    


圖:tensorboard accuracy

- 上面範例示範了如何將數值寫入Tensorboard中,而後續在開發與模型版本紀錄也能以類似方式完成。

Weight&Biases:

  • 大致功能與 Tensorboard 相同,但是整合了更多的深度學習(Llamaindex、Langchain、HuggingFace…)與機器學習(Scikit-Learn、XGBoost….)開發工具,目前觀察下來相較於Tensorboard有更精美的UI,及更好的視覺體驗。
  • 支援上傳Artifact的檔案(訓練完成的模型,資料前處理的pickle檔….等等),以方便後續部署與版本控制
  • 針對模型部署提供極為方便的功能,能將實驗最好的模型進行註冊,以利後續開發鎖定模型版本,已有許多文章分享使用方式。
  • 注意:需要申請Weight&Biases 帳號,實驗紀錄會上傳至該帳號底下,需要確保網路順暢,因為需要將檔案上傳至Weight&Biases雲端儲存空間,每個人有免費的100G可以使用


圖片來源:https://wandb.ai/site

如何在Python開發環境使用,以及程式碼需要如何撰寫:

1. 工具安裝:
    
    pip install wandb -qU
    
2. 申請帳號 [https://wandb.ai/home](https://wandb.ai/home?_gl=1*17zy7d4*_ga*NjYxOTM1NjA5LjE2OTUwMDE0MTk.*_ga_JH1SJHJQXJ*MTY5NTExNTEyNS40LjEuMTY5NTExNTgxMy41NS4wLjA.)
    
    登入後,點選[https://wandb.ai/authorize](https://wandb.ai/authorize) 取得 API key
    
3. 程式碼撰寫:(以一個簡易的資料做示範)
    - 當程式執行到 wandb.login()時,會出現以下選擇,因為上一步已經先申請好帳號,所以這邊選 2
        
        ![Untitled](MLOps%20%E5%B7%A5%E5%85%B7%E4%BB%8B%E7%B4%B9%EF%BC%88%E4%B8%80%EF%BC%89%EF%BC%9A%E5%B8%B8%E8%A6%8B%E7%9A%84%E4%B8%89%E7%A8%AE%E6%A8%A1%E5%9E%8B%E5%AF%A6%E9%A9%97%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%20ff48c3b585cd4d6c9690d2947ca1caa7/Untitled%202.png)
        
    - 接下來會要求輸入API key,API key的取得方式可以參考以上第二步
    
    ```python
    import wandb
    wandb.login()
    import random
    
    # Launch 5 simulated experiments
    total_runs = 5
    for run in range(total_runs):
      # Start a new run to track this script
      wandb.init(
          # Set the project where this run will be logged
          project="basic-intro", 
          # We pass a run name (otherwise it’ll be randomly assigned, like sunshine-lollypop-10)
          name=f"experiment_{run}", 
          # Track hyperparameters and run metadata
          config={
          "learning_rate": 0.02,
          "architecture": "CNN",
          "dataset": "CIFAR-100",
          "epochs": 10,
          })
      
      # This simple block simulates a training loop logging metrics
      epochs = 10
      offset = random.random() / 5
      for epoch in range(2, epochs):
          acc = 1 - 2 ** -epoch - random.random() / epoch - offset
          loss = 2 ** -epoch + random.random() / epoch + offset
          
          # Log metrics from your script to W&B
          wandb.log({"acc": acc, "loss": loss})
          
      # Mark the run as finished
      wandb.finish()
    ```


圖:Weight&Biases 結果

    - 上面範例簡單說明如何將實驗數據上傳至Weight&Biases雲端空間中,提供大家在開發上的參考,並將這些整合至模型訓練流程中。
    - 相較於Tensorboard他的功能有更加複雜,除了可以紀錄各項模型參數外,還有模型訓練loss(評估指標)曲線,還可以將模型上傳至雲端空間。
    - Weight&Biases主要以雲端儲存這些訓練參數與模型,每個帳號有100GB的免費空間,並不是完全免費。

MLflow:

相較於Tensorboard與Weight&Biases,MLflow更著重於「公司內部的多人專案」的實驗管理上,主要讓工程師自己建立屬於公司內部的 MLflow 伺服器。MLflow著重在三個面向:專案、數據追蹤、模型,它可以使中小型團隊在免費的情況下輕鬆管理每個專案、實驗與模型,MLflow一樣有可視化的參數比較,也有搜索模型的功能,可以協助團隊在眾多的實驗底下,找出評估指標最優秀的模型。

如下圖所示:Experiments可以是團隊正在進行的專案,中間區域是該專案底下的各種實驗,可以紀錄實驗日期、實驗者、模型指標…等等,可以透過 “Sort” 找出評估指標最好的模型。


圖片:Mlflow ui介面

往下點擊每個實驗,可以觀察到紀錄的參數,從Metrics往下點擊可以可視化數值,在Artifacts可以儲存本次實驗的環境需求與模型,方便之後復刻(追蹤)結果與模型部署。

圖片:Mlflow實驗紀錄

** 注意如果要使用MLflow儲存模型(Artifacts)建議串接資料伺服器(s3, minIO….)

如何在Python開發環境使用,以及程式碼需要如何撰寫:

  1. 工具安裝:

    pip install mlflow

  2. 本地端啟動:

    在終端機輸入:mlflow ui

  3. 程式碼撰寫:(以一個簡易的資料做示範)

    • MLflow 追蹤位置 :mlflow.set_tracking_uri("http://127.0.0.1:5000")
    • 依據不同資料的形式寫入MLflow
      • 參數:log_param()
      • 評估指標:log_metric()
      • 檔案類型:log_artifacts()
    import os
    from random import random, randint
    import mlflow
    from mlflow import log_metric, log_param, log_params, log_artifacts
    mlflow.set_tracking_uri("http://127.0.0.1:5000")
    if __name__ == "__main__":
        # Log a parameter (key-value pair)
        log_param("config_value", randint(0, 100))
    
        # Log a dictionary of parameters
        log_params({"param1": randint(0, 100), "param2": randint(0, 100)})
    
        # Log a metric; metrics can be updated throughout the run
        log_metric("accuracy", random() / 2.0)
        log_metric("accuracy", random() + 0.1)
        log_metric("accuracy", random() + 0.2)
    
        # Log an artifact (output file)
        if not os.path.exists("outputs"):
            os.makedirs("outputs")
        with open("outputs/test.txt", "w") as f:
            f.write("hello world!")
        log_artifacts("outputs")
    


圖:MLflow 範例

- 上面範例簡單完成將實驗數據寫入MLflow中,大家可以嘗試在目前的專案中加入MLflow輔助紀錄實驗數據。
- MLflow 的功能基本上與Weight&Biases相同,但MLflow如果要讓團隊統一開發使用的話,需要自建伺服器包含結構化資料庫與檔案資料庫;且長期使用上,需要團隊定期維護。

結論

這篇文章主要分享三個頗受好評的模型實驗管理工具,市面上還有很多類似的工具,這些工具各有特色與強項,團隊可視情況選擇好維護的工具。

這些工具的目的都是在幫助團隊管理多專案與多實驗的狀況,可以輔助開發過程較為順利,所有的實驗數據都會被紀錄與備份,可以減少實驗數據遺失的風險。

這邊提供讀者選擇工具上的建議:

  • Tensorboard : 如果是個人使用,它可以簡易快速實現模型實驗紀錄的功能,它有優秀的各種參數紀錄功能與模型架構紀錄功能,但如果要多人協作就不建議使用Tensorboard。
  • Weight&Bias : 這個工具主要是以多人協作為主的開發平台,會將實驗紀錄上傳至雲端中,這樣可以減少團隊開發上的系統維護,只是要注意免費使用空間是100GB。
  • MLflow : 這個工具如果要使團隊一起開發協作,需要自己建立伺服器,需要團隊維護,但好處是可以將實驗紀錄儲存在公司內部,MLflow 工具是開源且免費。

下一篇文章將與大家分享 MLOps-資料管理工具,還有哪些工具可以協助我們在開發與部署時方便管理資料

參考文獻

1.初探mlflow-tracking-保持ml實驗的可追溯性與可重現性-
2.Weights & Biases — ML 實驗數據追蹤

(撰稿工程師:顧祥龍)