官术网_书友最值得收藏!

Spark團(tuán)隊(duì)開源新作:全流程機(jī)器學(xué)習(xí)平臺MLflow

作者M(jìn)atei Zaharia 譯者 無明

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

主站蜘蛛池模板: 中山市| 平安县| 大理市| 基隆市| 花垣县| 安仁县| 营口市| 泽库县| 长乐市| 容城县| 石河子市| 育儿| 赣榆县| 台湾省| 安福县| 开阳县| 平泉县| 孙吴县| 昆山市| 六盘水市| 历史| 连山| 武义县| 舟山市| 徐闻县| 屏山县| 石嘴山市| 南郑县| 沧州市| 宝坻区| 辽阳市| 三都| 和顺县| 淮北市| 集安市| 星子县| 张家港市| 开化县| 临洮县| 长沙市| 临漳县|