iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
AI & Data

AI平台初學者工作坊: 從training、tracking到serving系列 第 8

使用MLFlow tracking功能比較training結果

在上一篇我們已經完成MLFlow的安裝, 這篇我們就來說明如何在jupyter notebook裡整合MLFlow.

這次的範例可以在github下載 fastai_mnist_mlflow.ipynb

這次在notebook加上跟MLFlow 有關的部份, 說明如下:

  • 安裝mlflow

    !pip install mlflow
    
  • 把MLflow import進來

    # Import mlflow
    import mlflow
    
  • 設定MLFlow的主機位置
    使用set_tracking_uri函式可以設定MLFlow server的主機位置, 因此可以跳脫個人單機使用, 當多人使用時也可以將不同訓練環境的結果記錄在同一台主機上, 這樣就容易比較不同人、時、地的訓練結果.
    set_tracking_uri函式可以支援四種型式, 可以參考官網說明:

    • Local file path
    • Database connection
    • HTTP server
    • Databricks workspace

    我們的例子之中, 使用HTTP server, 輸入前一篇所安裝好的MLFlow server的IP與port

    mlflow.set_tracking_uri("http://172.23.180.10:30534")
    
  • 設定experiment的名稱
    如果這個名稱不存在則會以這個名稱建立一個新的experiment

    mlflow.set_experiment("fastai_mnist")
    
  • 記錄訓練資料
    原本我們執行訓練時是執行微調 learn.fine_tune, 為了要將每次設定的parameter、metrics記錄起來, 我們加入下列內容.

    設定執行微調的 epoch2 數值

    epochs = 1
    

    設定staru run的名稱 "jack-run-1". 當團隊中多人同時針對Dataset進行模型的調校, 則需要請團隊成員為每次的設定給個名字, 這個名字可以讓團隊其他人了解是由誰執行的training

    with mlflow.start_run(run_name="jack-run-1"):
    

    再把epochs以參數的方式記錄起來

    mlflow.log_param('epochs', epochs)  
    

    然後我們再執行一次微調

    learn.fine_turn(epochs)
    

    執行完微調之後, 我們需要取得metric的結果, 這樣我們才能知道每次微調的效果如何. 因為我們所設定的metric是accuracy, 我們以下列方式取得accuracy的數值
    先從learn物件取出metrics的物件avgMetric, 而avgMetric是一個清單, 因為我們設定metric只有一項為accruacy, 所以使用 avgMetric[0]取出裝有accruary值的物件(accObject), 再由accObject.value.item()取出accuracy的值

    avgMetric = learn.recorder.metrics
    print(avgMetric)  # a list
    accOjbect = avgMetric[0]
    print(accObject) # an object
    print(accObject.value) # Tensor
    print(accObject.value.item()) # float
    

    然後我們再把accuracy記錄在metric中

    mlflow.log_metric('accuracy', accObject.value.item())
    
  • MLFlow UI確認第一次的記錄結果

    這時我們再去MLFlow UI上看一下, 這時可以看到我們已經將parameter與metric記錄起來.
    https://ithelp.ithome.com.tw/upload/images/20210921/201407928NKGT3Odqr.png

  • 調整參數後再執行一次
    再來, 我們把epochs改為5, 像這樣.
    ps:因為將epoch由1調為5, 預期accuracy數值會提高.

    epochs = 5
    

    那後再把 run name改為jack-run-2

    再執行一次notebook的內容. 在MLFlow UI可以看到第二次的執行結果.
    https://ithelp.ithome.com.tw/upload/images/20210921/20140792s07vMKqQpW.png

    在預期中, accuracy由0.982上升一點點到0.993

這樣, 我們就完成使用MLflow將每次執行training的paramter與metric記錄起來,這樣我們可以很容易的看出每次改了什麼與結果如何, 就可以找出最適合的組合.
這個例子用很簡單的方式(只調epoch次數)說明如何使用MLFlow做記錄, 在真實的狀況下, 資料科學家需要調的參數會更多, 但基本的操作方式則大同小異.

參考資料

https://www.mlflow.org/docs/latest/tracking.html


上一篇
安裝MLFlow
下一篇
準備Django環境
系列文
AI平台初學者工作坊: 從training、tracking到serving30

尚未有邦友留言

立即登入留言