- 《架構(gòu)師》2018年7月
- InfoQ中文站
- 2031字
- 2019-01-09 14:05:37
Spark團(tuán)隊(duì)開源新作:全流程機(jī)器學(xué)習(xí)平臺MLflow

AI前線導(dǎo)讀:在昨天開幕的Spark+AI Summit大會上,Spark和Mesos的核心作者兼Databrick首席技術(shù)專家Matei Zaharia宣布推出開源機(jī)器學(xué)習(xí)平臺MLflow,這是一個能夠覆蓋機(jī)器學(xué)習(xí)全流程(從數(shù)據(jù)準(zhǔn)備到模型訓(xùn)練到最終部署)的新平臺,旨在為數(shù)據(jù)科學(xué)家構(gòu)建、測試和部署機(jī)器學(xué)習(xí)模型的復(fù)雜過程做一些簡化工作。Matei表示,研究工作主要圍繞著“如何為開發(fā)者提供類似谷歌TFX、Facebook FBLearner Flow等平臺類似的好處,但是要以開放的方式——不僅在開源的意義上開放,而且是可以使用任何工具和算法的意義上開放"的想法展開。
Matei為MLflow撰寫了一篇介紹文章,AI前線對文章進(jìn)行了編譯。這個全新的機(jī)器學(xué)習(xí)平臺到底有何新特性?讓我們來一探究竟。
每個做過機(jī)器學(xué)習(xí)開發(fā)的人都知道機(jī)器學(xué)習(xí)的復(fù)雜性,除了軟件開發(fā)中常見的問題之外,機(jī)器學(xué)習(xí)還存在很多新的挑戰(zhàn)。作為一家大數(shù)據(jù)解決方案公司,Databricks與數(shù)百家使用機(jī)器學(xué)習(xí)的公司合作,所以能夠清楚地了解他們的痛點(diǎn),比如工具太過復(fù)雜、難以跟蹤實(shí)驗(yàn)、難以重現(xiàn)結(jié)果、難以部署模型。由于這些挑戰(zhàn)的存在,機(jī)器學(xué)習(xí)開發(fā)必須變得與傳統(tǒng)軟件開發(fā)一樣強(qiáng)大、可預(yù)測和普及。為此,很多企業(yè)已經(jīng)開始構(gòu)建內(nèi)部機(jī)器學(xué)習(xí)平臺來管理機(jī)器學(xué)習(xí)生命周期。例如,F(xiàn)acebook、谷歌和優(yōu)步分別構(gòu)建了FBLearner Flow、TFX和Michelangelo來進(jìn)行數(shù)據(jù)準(zhǔn)備、模型訓(xùn)練和部署。但這些內(nèi)部平臺存在一定的局限性:典型的機(jī)器學(xué)習(xí)平臺只支持一小部分內(nèi)置算法或單個機(jī)器學(xué)習(xí)庫,并且被綁定在公司內(nèi)部的基礎(chǔ)設(shè)施上。用戶無法輕易地使用新的機(jī)器學(xué)習(xí)庫,或與社區(qū)分享他們的工作成果。
Databricks認(rèn)為應(yīng)該使用一種更好的方式來管理機(jī)器學(xué)習(xí)生命周期,于是他們推出了MLflow,一個開源的機(jī)器學(xué)習(xí)平臺。
MLflow:開放式機(jī)器學(xué)習(xí)平臺
MLflow的靈感來源于現(xiàn)有的機(jī)器學(xué)習(xí)平臺,但以開放性作為主要設(shè)計目標(biāo):
1.開放接口:MLflow可與任何機(jī)器學(xué)習(xí)庫、算法、部署工具或編程語言一起使用。它基于REST API和簡單的數(shù)據(jù)格式(例如,可將模型視為lambda函數(shù))而構(gòu)建,可以使用各種工具,而不只是提供一小部分內(nèi)置功能。用戶可以很容易地將MLflow添加到現(xiàn)有的機(jī)器學(xué)習(xí)代碼中,并在組織中共享代碼,讓其他人也能運(yùn)行這些代碼。
2.開源:MLflow是一個開源項(xiàng)目,用戶和機(jī)器學(xué)習(xí)庫開發(fā)人員可以對其進(jìn)行擴(kuò)展。此外,利用MLflow的開放格式,可以輕松地跨組織共享工作流步驟和模型。
Mlflow目前仍處于alpha階段,但它已經(jīng)提供了一個可用的框架來處理機(jī)器學(xué)習(xí)代碼。接下來將詳細(xì)介紹MLflow和它的組件。
MLflow的組件(alpha版)
MLflow的alpha版本包含了三個組件:

MLflow的跟蹤組件支持記錄和查詢實(shí)驗(yàn)數(shù)據(jù),如評估度量指標(biāo)和參數(shù)。MLflow的項(xiàng)目組件提供了可重復(fù)運(yùn)行的簡單包裝格式。最后,MLflow的模型組件提供了用于管理和部署模型的工具。
MLflow的跟蹤組件
MLflow的跟蹤組件提供了一組API和用戶界面,用于在運(yùn)行機(jī)器學(xué)習(xí)代碼時記錄參數(shù)、代碼版本、度量指標(biāo)和輸出文件,以便在后續(xù)進(jìn)行可視化。通過幾行簡單的代碼就可以跟蹤參數(shù)、度量指標(biāo)和文件:
importmlflow #Logparameters(key-valuepairs) mlflow.log_param("num_dimensions",8) mlflow.log_param("regularization",0.1) #Logametric;metricscanbeupdatedthroughouttherun mlflow.log_metric("accuracy",0.1) ... mlflow.log_metric("accuracy",0.45) #Logartifacts(outputfiles) mlflow.log_artifact("roc.png") mlflow.log_artifact("model.pkl")
用戶可使用跟蹤組件(通過獨(dú)立腳本或notebook)將結(jié)果記錄到本地文件或服務(wù)器上,然后通過Web UI來查看和比較多次運(yùn)行結(jié)果。團(tuán)隊(duì)也可以使用這些工具來比較不同用戶的運(yùn)行結(jié)果。
MLflow的項(xiàng)目組件
MLflow的項(xiàng)目組件提供了一種用于打包可重用代碼的標(biāo)準(zhǔn)格式。項(xiàng)目可以是一個包含代碼的目錄或Git倉庫,并使用一個描述符文件來描述依賴關(guān)系以及如何運(yùn)行代碼。MFflow項(xiàng)目通過一個叫作MLproject的YAML文件進(jìn)行定義。
name:MyProject conda_env:conda.yaml entry_points: main: parameters: data_file:path regularization:{type:float,default:0.1} command:"pythontrain.py-r{regularization}{data_file}" validate: parameters: data_file:path command:"pythonvalidate.py{data_file}"
項(xiàng)目可以通過Conda來指定依賴關(guān)系。一個項(xiàng)目可能包含多個帶有命名參數(shù)的運(yùn)行入口。用戶可以使用mlflow run命令行工具來運(yùn)行項(xiàng)目,項(xiàng)目代碼可以在本地,也可以在Git倉庫里:
mlflowrunexample/project-Palpha=0.5 mlflowrungit@github.com:databricks/mlflow-example.git-P alpha=0.5
MLflow將自動為項(xiàng)目設(shè)置合適的環(huán)境并運(yùn)行它。另外,如果在項(xiàng)目中使用了MLflow Tracking API, MLflow將記住執(zhí)行過的項(xiàng)目版本(即Git的提交操作)和參數(shù),這樣就可以很輕松地重新運(yùn)行完全相同的代碼。
無論是在企業(yè)還是在開源社區(qū),項(xiàng)目格式讓共享可重用代碼變得更加容易。結(jié)合MLflow的跟蹤組件,MLflow項(xiàng)目為可重現(xiàn)性、可擴(kuò)展性和實(shí)驗(yàn)提供了很好的工具。
MLflow的模型組件
MLflow的模型組件提供了一種將機(jī)器學(xué)習(xí)模型打包成多種格式的規(guī)范,這些格式被稱為“flavor”。MLflow提供了多種工具來部署不同flavor的模型。每個MLflow模型被保存成一個目錄,目錄中包含了任意模型文件和一個MLmodel描述符文件,文件中列出了相應(yīng)的flavor。
time_created:2018-02-21T13:21:34.12 flavors: sklearn: sklearn_version:0.19.1 pickled_model:model.pkl python_function: loader_module:mlflow.sklearn pickled_model:model.pkl
在這個例子中,模型可以與支持sklearn或python_function的工具一起使用。
MLflow提供了將常見模型部署到不同平臺的工具。例如,任何支持python_function的模型都可以部署到基于Docker的REST服務(wù)器或云平臺上(如Azure ML和AWS SageMaker),也可以作為Apache Spark的用戶定義函數(shù),用于進(jìn)行批量和流式推斷。如果使用Tracking API將MLflow模型輸出為文件,MLflow還會自動記住它們是由哪個項(xiàng)目運(yùn)行生成的。
MLflow入門
要使用MLflow,請按照mlflow.org上的說明進(jìn)行操作,或使用Github上的alpha版代碼。
在Databricks上托管MLflow
如果要使用MLflow的托管版本,可以在databricks.com/mlflow注冊。Databricks上的MLflow與Databricks Unified Analytics平臺集成,包括Notebooks、Jobs, Databricks Delta和Databricks安全模型,為用戶提供了安全、生產(chǎn)就緒的方式大規(guī)模地運(yùn)行現(xiàn)有的MLflow作業(yè)。
后續(xù)計劃
MLflow剛剛展露頭角,因此還有很多事情要做。后續(xù)計劃引入新組件(如監(jiān)控)、與其他庫的集成以及擴(kuò)展已發(fā)布的組件(例如支持更多環(huán)境類型)。
MLflow官網(wǎng) http://www.mlflow.org
MLflow GitHub地址 https://github.com/databricks/mlflow
- 天工(2021年第5期)
- 《架構(gòu)師》2020年11月
- 留學(xué)(2021年第20期)
- 中學(xué)歷史教學(xué)(2021年第9期)
- 浙江國土資源(2021年第8期)
- 音樂愛好者(2016年第9期)
- 通往創(chuàng)新之巔:互聯(lián)網(wǎng)技術(shù)架構(gòu)創(chuàng)新案例和實(shí)踐
- 聲屏世界(2021年第5期)
- 《架構(gòu)師》2018年4月
- 傳播與版權(quán)(2021年第10期)
- 留學(xué)(2021年第15期)
- 科學(xué)之友(2021年第10期)
- 演講與口才(2021年第15期)
- 中學(xué)歷史教學(xué)(2021年第2期)
- 中國種業(yè)(2021年第4期)