跳轉到主要內容
工程的博客

在MLflow Cross-version測試

分享這篇文章

MLflow是一個開源平台,開發管理毫升的生命周期Beplay体育安卓版本,包括實驗,再現性,部署和中央注冊中心模型。它集成了與許多流行的ML庫如scikit-learn XGBoost TensorFlow, PyTorch支持廣泛的用例。磚和計算環境提供了多元化的一係列預先安裝的庫,包括MLflow,允許客戶開發模型,而不必擔心依賴關係管理。beplay体育app下载地址例如,下表顯示了哪些XGBoost預裝的版本是不同的磚運行時機器學習(高)環境:

高版本

預裝XGBoost版本

10.3

1.5.1

10.2

1.5.0

10.1

1.4.2

我們可以看到,不同的高鈣環境提供不同的庫版本。此外,用戶經常要嚐試新功能升級庫。這一係列版本構成了重大的兼容性挑戰,需要一個全麵的測試策略。測試MLflow隻針對一個特定版本(例如,隻有最新版本)是不夠的;我們需要測試MLflow對一係列毫升庫版本,用戶一般杠杆。另一個挑戰是,毫升庫是不斷發展的,發布新版本可能包含打破變化不兼容集成MLflow提供的API(例如,刪除MLflow依賴模型序列化)。我們想盡早打破變化等檢測,理想情況下甚至在發布新版本。為了解決這些難題,我們實現了cross-version測試。

什麼是cross-version測試?

Cross-version測試是一種測試策略實施,確保MLflow兼容很多版本的廣泛使用毫升庫(例如scikit-learn 1.0和TensorFlow 2.6.3)。

測試結構

我們實現了cross-version測試使用GitHub每天自動觸發的動作,以及有關拉請求時。版本的測試工作流自動識別矩陣為每個MLflow庫的集成測試,為每一個創建一個單獨的工作。每一個相關的工作運行的一組測試毫升庫。

配置文件

我們配置cross-version測試代碼使用YAML文件看起來像下麵。

#集成的名字sklearn:package_info:這種集成取決於#包pip_release:“scikit-learn”#命令安裝包的預發行版本install_dev: |pip安裝git + https:/ /github.com/scikit-learn/scikit-learn.git#測試類別。可以之一(“模型”、“autologging”)#“模型”是指測試模型序列化和服務#為autologging autologging是指測試autologging:#額外需求運行測試#”> = 24.0:[" matplotlib "]”意為“安裝matplotlib#如果scikit-learn版本> = 0.24.0”要求:“> = 0.24.0”:【“matplotlib”]#版本,不應該支持由於不可接受的問題不支持的:(“0.22.1”]#最小支持版本最低:“0.20.3”#最大支持的版本最大:“1.0.2中”#命令運行測試運行:|/ sklearn / autologging pytest測試
              xgboost:

cross-version測試的結果之一是,MLflow可以清楚地文檔毫升庫版本支持和警告用戶當一個安裝庫的版本是不支持的。例如,的文檔mlflow.sklearn.autologAPI提供了一係列兼容scikit-learn版本:

指的是這個文檔的mlflow.sklearn.autologAPI為進一步閱讀。

接下來,讓我們看看警告不受支持的版本特性是如何工作的。下麵的Python腳本,我們補丁sklearn.__version__與0.20.2比最低支持版本0.20.3演示功能,然後調用mlflow.sklearn.autolog

unittest進口模擬進口mlflow#假設scikit-learn 0.20.2安裝mock.patch (“sklearn.__version__”,“0.20.2”):mlflow.sklearn.autolog ()

上麵的腳本打印出以下消息提醒用戶的支持版本scikit-learn(0.20.2)正在使用和autologging不能正常工作:

2022年/01/2116:05年:50mlflow.utils警告。autologging_utils:你是使用不受支持的版本sklearn。如果你遇到錯誤autologging期間,試一試升級/降級sklearn支持的版本,或試一試升級MLflow。

運行測試

現在,我們有一個測試結構,讓我們運行測試。首先,我們創建了GitHub操作工作流構造一個測試矩陣從配置文件和運行中的每一項矩陣作為一個獨立的並行工作。GitHub操作工作流程的一個例子總結scikit-learn cross-version測試如下所示。根據配置,我們有一個最低版本“0.20.3”,這是顯示在頂部。我們填充所有版本之間存在最小版本和最大版本1.0.2中”。在底部,你可以看到的最後一個測試:“開發”版本,代表scikit-learn的預發行版本安裝的主要開發分支scikit-learn / scikit-learn通過命令中指定install_dev字段。我們將解釋這種預發行版本測試的目的在“測試未來”部分。

MLflow GitHub操作工作流構建配置文件並運行的測試矩陣中的每一項矩陣作為一個獨立的並行工作。

版本測試

限製GitHub操作運行的數量,我們隻測試最新的微型版本在每一個小版本。例如,如果“1.0.0”、“1.0.1”,和“1.0.2中”,我們隻測試“1.0.2中”。這種方法背後的原因是,大多數人不顯式地安裝一個古老的小版本的一個主要版本,和最新的小版本的主要版本通常是最沒有bug。下表顯示了scikit-learn我們測試版本。

scikit-learn版本

測試

0.20.3

0.20.4

0.21.0

0.21.1

0.21.2

0.21.3

0.22

0.22.1

0.22.2

0.22.2.post1

0.23.0

0.23.1

0.23.2

0.24.0

0.24.1

0.24.2

1.0

1.0.1

1.0.2中

dev

當觸發cross-version測試

有兩個事件觸發cross-version測試:

  1. 當一個有關拉提出請求。例如,如果我們下文件公關,更新文件mlflow / sklearn目錄,cross-version測試工作流為scikit-learn觸發器工作保證代碼更改在公關與所有支持scikit-learn版本兼容。
  2. 每天運行cron作業,我們所有cross-version測試工作包括的預發行版本。我們檢查這個cron作業每個工作日的狀態以便盡早發現問題。

測試未來

在cross-version測試中,我們運行日常測試反對公開版本和預發行版本安裝在主開發分支MLflow所使用的所有依賴庫。這使我們能夠預測未來MLflow會發生什麼。

讓我們看一個實際情況,最近MLflow維護人員處理:

  • 在2021/12/26 LightGBM幾個棄用函數參數微軟/ LightGBM # 4908。這種變化打破了MLflow LightGBM autologging集成。
  • 2021/12/27,我們發現一個cross-version LightGBM失敗的測試和確認微軟/ LightGBM # 4908是問題的根源。
  • 現實世界的例子MLflow cross-version測試。

  • 2021/12/28,我們提起公關解決這個問題:mlflow / mlflow # 5206
  • 在2021/12/31,我們合並的公關。
  • 2022/01/08 LightGBM 3.3.2發布,包含打破變化。
|├─2021年/12/26微軟/ LightGBM# 4908(打破變化)合並。├─2021年/12/27發現LightGBM測試失敗├─2021年/12/28提起mlflow / mlflow# 5206|├─2021年/12/31日合並mlflow / mlflow# 5206。||├─2022年/01/08年LightGBM3.32釋放||├─2022年/01/17MLflow1.230釋放|v時間

由於預發行版本的測試,我們可以發現打破改變後的第二天,這是合並,並迅速應用補丁之前LightGBM 3.3.2釋放。這種積極主動的工作,提前處理和不那麼緊急的安排,讓我們做好準備為他們的新版本,避免破壞更改或回歸。

如果我們沒有執行預發行版本測試,我們隻會發現破壞改變LightGBM 3.3.2釋放後,這可能導致用戶體驗取決於骨折LightGBM發布日期。例如,考慮下麵的問題場景,LightGBM被釋放了MLflow沒有預發行版本測試。用戶運行LightGBM 3.3.2 MLflow 1.23.0會遇到錯誤。

|├─2021年/12/26微軟/LightGBM #4908年(打破變化)合並。||├─2022年/01/17MLflow1.23。0釋放|├─2022年/01/20.(假想的)LightGBM3.3。2釋放├─2022年/01/21用戶運行LightGBM3.3。2MLflow1.23。0|會遇到錯誤。|v時間

結論

在這篇文章中,我們介紹:

  • 為什麼我們cross-version測試實現。
  • 我們如何配置和運行cross-version測試。
  • 我們如何提高MLflow用戶體驗和文檔使用cross-version測試結果。

看看這個自述文件為進一步閱讀cross-version測試的實現。我們希望這篇文章能幫助其他開源項目提供集成許多毫升庫。

免費試著磚

相關的帖子

看到所有工程的博客的帖子
Baidu
map