如何使用MLflow搜索API在儀表板中顯示模型指標
機器學習工程師和數據科學家經常訓練模型來優化損失函數。使用梯度下降等優化方法,我們可以迭代地改進損失,最終達到最小值。你有沒有想過:作為一名數據科學家,我能優化自己的生產力嗎?或者我可以直觀地看到我的訓練模型的指標的進展嗎?
MLflow允許您跟蹤訓練運行,並為常見指標比較提供開箱即用的可視化,但有時您可能希望提取MLflow標準可視化未涵蓋的其他見解。在這篇文章中,我們將向您展示如何使用MLflow跟蹤您或您的團隊在訓練機器學習模型方麵的進展。
的MLflow跟蹤API使您的運行可搜索,並返回結果作為一個方便熊貓DataFrame.我們將利用此功能生成一個儀表板,顯示在平均絕對誤差(MAE)等關鍵指標上的改進,並向您展示如何測量每個實驗啟動的運行次數以及團隊所有成員的運行次數。
跟蹤表現最好的訓練跑
一些機器學習工程師和研究人員在一組電子表格中跟蹤模型精度結果,用用於生成這些結果的超參數和訓練集手動注釋結果。隨著時間的推移,隨著團隊的增長和實驗運行次數的相應增加,手動簿記可能會變得很麻煩。
然而,當你使用MLflow跟蹤API,在一個實驗中你所有的訓練運行都被記錄下來。使用這個API,您可以生成一個熊貓DataFrame任何實驗的運行次數。例如,mlflow.search_runs(…)返回一個熊貓。DataFrame,可以顯示在筆記本中,也可以作為控件訪問單個列熊貓。係列.
Runs = mlflow.search_runs(實驗者id =實驗者id)runs.head (10)
有了這個編程界麵,很容易回答諸如“迄今為止性能最好的模型是什麼?”
Runs = mlflow.search_runs(實驗者id =實驗者id,order_by = [“metrics.mae”), max_results =1)runs.loc [0]
使用pandas DataFrame聚合和Databricks筆記本顯示函數,您可以看到頂線精度度量隨時間的改進。這個示例跟蹤了過去兩周內優化MAE的進展。
earliest_start_time=(datetime.now ()-timedelta(天=14) .strftime (' % Y - % - % d ')recent_runs=運行[runs.start_time> =earliest_start_time]recent_runs [“運行時間”]=recent_runs.start_time.dt。地板上(頻率=' D ')best_runs_per_day_idx=recent_runs.groupby ([“運行時間”]) [“metrics.mae”] .idxmin ()best_runs=recent_runs.loc [best_runs_per_day_idx]顯示器(best_runs [[“運行時間”,“metrics.mae”]])
如果您正在運行開源MLflow,則可以使用matplotlib而不是顯示功能,該功能僅在Databricks筆記本電腦中可用。
進口matplotlib.pyplot作為pltplt.plot (best_runs [“運行時間”], best_runs [“metrics.mae”])plt.xlabel (“運行時間”)plt.ylabel (“metrics.mae”)plt.xticks(旋轉=45)
測量實驗運行的次數
在機器學習建模中,頂線度量改進並不是實驗的確定性結果。有時幾周的工作沒有明顯的改善,而在其他時候,對參數的調整意外地帶來了相當大的收益。在這樣的環境中,重要的是不僅要衡量結果,還要衡量過程。
這一過程的一個衡量標準是每天啟動的實驗次數。
earliest_start_time=(datetime.now ()-timedelta(天=14) .strftime (' % Y - % - % d ')recent_runs=運行[runs.start_time> =earliest_start_time]recent_runs [“運行時間”]=recent_runs.start_time.dt。地板上(頻率=' D ')runs_per_day=recent_runs.groupby ([“運行時間”]).數() [[“run_id”]] .reset_index ()runs_per_day [“運行時間”]=runs_per_day [“運行時間”] .dt.strftime (' % Y - % - % d ')runs_per_day.rename ({“run_id”:“運行次數”},軸=“列”,原地=真正的)
顯示器(runs_per_day)
擴展此示例,您可以跟蹤任何用戶在較長時間內啟動的運行總數。
運行=mlflow.search_runs (experiment_ids=experiment_id)runs_2019=[(runs.start_time=“2019-01-01”)]runs_2019 [“月”]=runs_2019.start_time.dt.month_name ()runs_2019 [“month_i”]=runs_2019.start_time.dt.monthruns_per_month=runs_2019.groupby ([“month_i”,“月”]).數() [[“run_id”]] .reset_index (“月”)runs_per_month.rename ({“run_id”:“運行次數”},軸=“列”,原地=真正的)
顯示器(runs_per_month)
創建一個模型性能儀表板
使用上麵的顯示,你可以建立一個顯示你結果的許多方麵的儀表板。這樣的儀表板計劃每天刷新,在截止日期前或團隊衝刺期間作為共享顯示被證明是有用的。
超越人工訓練模型跟蹤
如果不跟蹤和測量運行和結果,機器學習建模和實驗可能會變得混亂且容易出錯,特別是當結果在電子表格、紙上手動跟蹤時,或者有時根本不跟蹤。使用MLflow跟蹤和搜索api,您可以輕鬆地搜索過去的訓練運行,並構建使您或您的團隊更具生產力的儀表板,並提供模型指標的可視化進展。
貢獻:Max Allen是MLflow工程團隊的工程實習生。
在去年的實習期間,他實現了MLflow搜索API,我們將在本博客中對此進行演示。
開始使用MLflow跟蹤和搜索api
準備好開始或者自己嚐試了嗎?您可以在一個可運行的筆記本上看到本文中使用的示例AWS或Azure.
如果您是MLflow的新手,請閱讀使用最新的MLflow 1.6快速入門.有關生產用例,請閱讀相關內容在Databricks上管理MLflow.