Databricks是一家位于硅谷、專注于使Apache Spark商業(yè)化的初創(chuàng)公司,該公司開發(fā)出了MLflow,即數(shù)據(jù)科學(xué)家管理機(jī)器學(xué)習(xí)模型生命周期的一個開源工具包。
同傳統(tǒng)軟件開發(fā)不同的是,機(jī)器學(xué)習(xí)依賴了大量的工具。在建立模型的每一個階段中,數(shù)據(jù)科學(xué)家至少要使用6個工具。在確定使用正確的工具包和框架之前,每一個階段都需要進(jìn)行大量的實(shí)驗(yàn)。碎片化工具和快速重復(fù)實(shí)驗(yàn)的需求使得機(jī)器學(xué)習(xí)及其復(fù)雜。
Databricks所開發(fā)的MLflow旨在通過聯(lián)系一系列工具和框架的硬件抽象層(abstraction layer)——即位于操作系統(tǒng) 內(nèi)核與硬件電路之間的接口層,其目的在于將硬件抽象化——來減少機(jī)器學(xué)習(xí)的復(fù)雜性。這個工具包能夠有效地用于個人數(shù)據(jù)科學(xué)家或者建立機(jī)器學(xué)習(xí)模型的大型團(tuán)隊(duì)。
MLflow解決了在建立和管理機(jī)器學(xué)習(xí)中3個重要的挑戰(zhàn):
1. 探究參數(shù)和超參數(shù)對模型的影響方式;
2. 在建立模型的同時進(jìn)行實(shí)驗(yàn)的一致方法;
3. 通過多重推理環(huán)境簡化模型。
MLflow的三個不同組件能夠解決上述所提及的挑戰(zhàn):
1. MLflow Tracking
MLflow的這一個組件很大程度上是屬于API(應(yīng)用程序界面)和UI(用戶界面),用于在運(yùn)行機(jī)器學(xué)習(xí)代碼然后進(jìn)行可視化操作時,記錄參數(shù)、代碼版本、度量、以及導(dǎo)出文件。開發(fā)者能夠在任何的環(huán)境下使用MLflow Tracking(例如脫機(jī)腳本或者筆記本)來將記錄的結(jié)果導(dǎo)出到當(dāng)?shù)匚募蛘叻?wù)器上,然后對比一系列的運(yùn)行結(jié)果,團(tuán)隊(duì)也可使用這一組件來比較不同用戶所得到的結(jié)果。基于網(wǎng)頁的UI提供了查詢和分析能力來探索在模型開發(fā)中所生成的信息。這是在模型中引入大量日志和數(shù)據(jù)存儲能力的非入侵方式。
2. MLflow Projects
這一組件規(guī)定了打包可重用的數(shù)據(jù)科學(xué)代碼標(biāo)準(zhǔn)格式。每一個項(xiàng)目僅僅是一個有代碼的索引目錄或者Git 本地倉庫(repository),即使用一個簡單的描述符文件表明其所依賴的文件以及如何運(yùn)行代碼。例如,這些項(xiàng)目可以包括一個conda.yaml文件,用于指定的Python Conda環(huán)境。當(dāng)在Project中使用MLflow Tracking API時,這一環(huán)境會自動記住處理的項(xiàng)目版本(如Git commit)以及其它參數(shù)。開發(fā)者能夠有效地從GitHub或者用戶自己的Git 本地倉庫中運(yùn)行當(dāng)前的MLflow Projects,然后將其同多重步驟的工作流鏈接起來。在Python中開發(fā)的機(jī)器學(xué)習(xí)模型能夠很容易地就集合到MLflow Projects中。每一次運(yùn)行項(xiàng)目時,MLflow能夠保證在處理代碼之前,符合所有的依賴條件。這個能力提供了在開發(fā)工作站或者云端運(yùn)行機(jī)器學(xué)習(xí)項(xiàng)目的經(jīng)驗(yàn)。
3. MLflow Models
這一組件為在多個Flavors打包機(jī)器學(xué)習(xí)模塊和一系列工具提供了用于部署的標(biāo)準(zhǔn)機(jī)制。每一個模塊都會被另存在一個包含arbitrary文件的文件倉庫和一個模型能夠使用的多個flavors的名單描述符。它能夠更加容易地定位運(yùn)行機(jī)器學(xué)習(xí)模塊的一系列環(huán)境。開發(fā)者能夠從本地的Python環(huán)境、Docker、或者基于云的平臺(如Amazon SageMaker 或者Azure ML)中選擇。
鑒于Databricks的工作重點(diǎn),所以在看到MLflow和Apache Spark的緊密結(jié)合時,我們并不會感到驚訝。
雖然這一項(xiàng)目還處于Alpha版本(需要完整的功能測試,而其功能亦未完善,但是可以滿足一般需求),但是代碼庫還是很穩(wěn)定的。筆者利用一些現(xiàn)有的數(shù)據(jù)科學(xué)項(xiàng)目測試了MLflow,得到的結(jié)果還是很令人滿意的。你可以通過“克隆”Github本地倉庫來開始使用MLflow。
DevOps讓云架構(gòu)更加易于訪問和管理,這些工具包(如MLflow)和DevOps一樣,都在嘗試加快機(jī)器學(xué)習(xí)過程。我們可以期待大量建立和管理復(fù)雜機(jī)器學(xué)習(xí)流水線工具包的出現(xiàn)。
原文作者:Janakiram MSV