DataRobot 手把手教學:如何從其他專案調用 Blueprint(下)

DataRobot 手把手教學:如何從其他專案調用 Blueprint(上)提到 DataRobot 驗證壓縮、上線操作流程,以及術語說明,本篇將承上篇解說 DataRobot 實際操作流程。

DataRobot MLOps

DataRobot API 說明

本次 API 的文件參考使用 第 2.25.0 版

以下說明每一步驟的整套流程,以下說明先行條件:

  • 訓練好的 Project 是使用 DataRobot 的預設資料切割,也就是 5 fold CV + holdout (即 testing 資料,訓練與驗證中不會調用的資料)
  • 新建 (尚未調用其他專案 Blueprint) 的 Project 也跟訓練好的 Project 同樣設定。

 

連結至你已經完成訓練的 Project

API 在連接 DataRobot 前須在 GUI 找到 token,可於 setting 裡的 Developer Tools 找到,下圖為範例。在 GUI 介面點進訓練好的 Project,網址會有一串 24 個字元的 Project ID,下圖為範例,將它複製到 get() 裡。

import datarobot as dr

import pandas as pd

dr.Client(token=’輸入 token’,endpoint=’架設 DataRobot 的網域’)

origin_project = dr.Project.get(‘輸入 project id’)

 

 DataRobot 的Token 位置

DataRobot 的Token 位置

 

Project ID 與 model ID 位置

Project ID 與 model ID 位置

 

如果 Project 有固定的命名方式,像範例有 ‘GUI_cifar’ 就可以當作搜尋條件,最後用 dict 去作為清單儲存 專案名字, id。

project_list = dr.Project.list(search_params={‘project_name’: ‘GUI_cifar’})

project_dicts = {}

for i in project_list:

project_dicts[i.project_name] = i.id

 

找出的訓練好專案的 Blueprint ID

這裡有兩種方法可以選擇:推薦第一種方法,也就是優先選擇 DataRobot 推薦的模型。如果 Project 裡沒有推薦的模型,再採用第二種方法。

 

原始專案的推薦模型

模型在一輪一輪訓練完之後,最後會以這個冠軍模型進行 100% 資料進行訓練變成推薦部屬模型。從下圖可以看到推薦模型會顯示綠色標籤。

 

Project 中的推薦模型示意圖

Project 中的推薦模型示意圖

 

從 leaderboard 找選用 metric 最佳的結果

以下有寫了一個function(get_model_scores) 在Python IDE中調用 leaderboard ,可以從中找選用 metric 最佳的結果。但此結果並不一定為 DataRobot 推薦的模型。

defget_model_score(mod, metric):

res = {}

res[‘model_number’] = mod.model_number

res[‘model_type’] = mod.model_type

res[‘model_category’] = mod.model_category

res[‘model’] = mod

res[‘sample_pct’] = mod.sample_pct

res[‘blueprint_id’] = mod.blueprint_id

 

res[‘metric_v’] = mod.metrics.get(metric, {}).get(‘validation’)

res[‘metric_cv’] = mod.metrics.get(metric, {}).get(‘crossValidation’)

return res

defget_model_scores(proj, metric=None, ascending=True):

if metric is None:

metric = proj.metric

df = pd.DataFrame([get_model_score(m, metric) for m in proj.get_models(with_metric=metric)])

return df.sort_values([‘metric_cv’, ‘metric_v’], ascending=ascending, na_position=’last’)

#採用推薦模型

best_BPid = dr.ModelRecommendation.get(origin_project.id).get_model().blueprint_id

if best_BPid is None:

#從 leaderboard 找最佳

model_scores_ad = get_model_scores(origin_project, metric=’Accuracy’, ascending=False)

best_BPid = model_scores_ad.loc[model_scores_ad[“metric_v”] == max(model_scores_ad[“metric_v”]),’blueprint_id’].reset_index(drop=True)[0]

 

設定 target

同樣在 GUI 介面的時候,如果是監督式學習(supervised learning)的專案就必須要設定你的 target,在 API 也同理,這必須依專案的資料集做調整。要注意 mode 要設定成 “manual” 在後續的動作才可以指定 Blueprint。否則會自動跑 AutoML。worker_count 請依部署的資源做調整,但在本次教學中建議設定為 1 即可,因為只選用最佳模型的Blueprint 訓練,只需一個 worker 做運算。

project_untrian.set_target(

target=”class”, #專案的訓練目標

mode=”manual”,  #設為手動才可以指定 blueprint

worker_count=1

)

 

將 Project 的 holdout 解開

最後推薦模型會把 100% 資料進行重新訓練,因此在新Project解開 holdout作為同樣條件把所有資料重新訓練。要注意 Project 的 holdout 解開後就無法再重新定義。

project_untrian.unlock_holdout()

 

建立模型進行訓練

最後在開始進行訓練模型時,需要填入需調用的 Blueprint 的 ID 以及該隸屬的 Project 的 ID ,並且把要訓練的資料量調成 100%。scoring_type 為 “crossValidation” 只能在調用的資訊量小於64%才可使用。

model_job_id = project_untrian.train(best_BPid,

source_project_id = origin_project.id,

sample_pct =100,

scoring_type = “validation”)

 

[optional] 在API 中該如何知道模型已訓練完成?

當在 GUI 介面可以查看知道是否完成了,但在 Python API 的環境下他在 建立模型進行訓練 後就可以繼續做其他的動作了,如果是為了要計時或者等這個 model 訓練完成後才要做後續的操作。建議可以使用以下方法讓 Python 等待 model 訓練完成再進行下一動作。但有兩點須注意:

  • 如果 model 已經訓練完成的話,ModelJob 會抓不到並顯示 PendingJobFinished。原因在於若 model 是在訓練的的狀態,它的型態會是 ModelJob,只有這時候才能呼叫。
  • 如果無法預估訓練時間,建議 max_wait 設長一點,否則會報錯。

 

model_job = dr.ModelJob.get(project_id=project_untrian.id,

model_job_id=model_job_id)

model_job.wait_for_completion(max_wait=60*60*3) #(s*m*H)

 

[optional] 如何看結果呢?

以下有兩種方法可以查看結果

直接從 GUI 介面查看

只要一行 api 指令就會直接打開瀏覽器,並且跳轉到當前 Project 的 leaderboard。

#跳轉到當前 Project 的 leaderboard

project_untrian.open_leaderboard_browser()

利用已經寫好的 function 呼叫

get_model_scores這個 function 在從 leaderboard 找選用 metric 最佳的結果出現過。可利用同樣方法呼叫相關結果於 python 變數中。

# 呼叫 function

model_scores_train = get_model_scores(project_untrian, metric=’AUC’, ascending=False)

 

DataRobot 手把手教學:如何從其他專案調用 Blueprint(上)

 

訂閱偉康科技洞察室部落格,掌握最新科技趨勢!

 

了解更多

DataRobot AutoML

DataRobot MLOps


偉康科技提供以雲端服務、智能數據、資安技術為核心的數位轉型解決方案,協助攻克企業資料治理遇到的難題,如有需求歡迎 聯絡我們

 

 

 

立即訂閱電子報

掌握最新科技趨勢!