摘要:背景近年來,人工智能與數(shù)據(jù)科學(xué)領(lǐng)域發(fā)展迅速,傳統(tǒng)項目在演化中也越來越復(fù)雜了,如何管理大量的機器學(xué)習(xí)項目成為一個難題。在真正的機器學(xué)習(xí)項目中,我們需要在模型之外花費大量的時間。
背景
近年來,人工智能與數(shù)據(jù)科學(xué)領(lǐng)域發(fā)展迅速,傳統(tǒng)項目在演化中也越來越復(fù)雜了,如何管理大量的機器學(xué)習(xí)項目成為一個難題。
在真正的機器學(xué)習(xí)項目中,我們需要在模型之外花費大量的時間。比如:
跟蹤實驗效果
機器學(xué)習(xí)算法有可配置的超參通常都是十幾個到幾十個不等,如何跟蹤這些參數(shù)、代碼以及數(shù)據(jù)在每個實驗中的表現(xiàn)目前業(yè)界也沒有一個統(tǒng)一的解決方案,更多都是根據(jù)某個實驗進行多帶帶的開發(fā)。
部署ML模型
部署ML模型通常都需要將模型文件和線上環(huán)境Service/Spark Job/SDK(Java/Scala/C++)對接,而大部分?jǐn)?shù)據(jù)科學(xué)家通常都不太熟悉這些工程開發(fā)語言。因此,將模型遷移到不同平臺是具有挑戰(zhàn)性的,它意味著數(shù)據(jù)科學(xué)家還需要考慮線上部署的性能問題,目前業(yè)界也缺少比較通用的模型部署工具。
目前,在大廠內(nèi)部已經(jīng)孵化出這樣的一些機器學(xué)習(xí)平臺,比如 Uber 的 Michelangelo、Google 的 TFX,但是他們都與大廠的基礎(chǔ)架構(gòu)深度耦合,所以也沒有在開源社區(qū)流行起來。
在這樣的背景下, mlflow 框架橫空出世,它的出現(xiàn)旨在將效果追蹤、模型調(diào)參、模型訓(xùn)練、模型代碼、模型發(fā)布等模塊集中一處,提升數(shù)據(jù)科學(xué)工作流的管理效率。
簡介mlflow 將數(shù)據(jù)科學(xué)工作流分為3個部分:
模型追蹤:支持記錄和查詢實驗周圍的數(shù)據(jù),如評估指標(biāo)和參數(shù)
項目管理:如何將模型封裝在 pipeline 中,以便與可重復(fù)執(zhí)行
模型發(fā)布:管理模型部署并提供 RestFul API
模型追蹤:mlflow tracking 提供了一個入口,用于將機器學(xué)習(xí)的參數(shù)、代碼版本、代碼路徑、評估指標(biāo)等統(tǒng)一管理,輸出到系統(tǒng)中可視化管理。通常我們模型會迭代很多次,這樣每次輸出的結(jié)果就可以集中對比效果的好壞。
比如:
library(mlflow) # 記錄超參 my_int <- mlflow_param("my_int", 1, "integer") my_num <- mlflow_param("my_num", 1.0, "numeric") # 記錄指標(biāo) mlflow_log_metric("accuracy", 0.45) # 記錄輸出文件(模型、feature importance圖)等 mlflow_log_atrifact("roc.png") mlflow_log_artifact("model.pkl")項目管理
mlflow project 提供了打包可重用數(shù)據(jù)科學(xué)代碼的標(biāo)準(zhǔn)格式,項目通過本地文件/git管理代碼,通過 yaml 文件來描述。
name: FinanceR Project conda_env: conda.yaml entry_points: main: parameters: data_file: path regularization: {type: double, default: 0.1} command: "python train.py -r {regularization} {data_file}" validate: parameters: data_file: path command: "python validate.py {data_file}"
codna 將提供統(tǒng)一的虛擬環(huán)境服務(wù),通過 mlflow run 可以任意執(zhí)行項目的 pipeline
mlflow run example/project -P num_dimensions=5 mlflow run git@github.com:xxx/xxx.git -P num_dimensions=5
下面舉一個官網(wǎng)的具體例子:
舉例 初始化devtools::install_github("mlflow/mlflow", subdir = "mlflow/R/mlflow") mlflow::mlflow_install()模型參數(shù)
# Sample R code showing logging model parameters library(mlflow) # Define parameters my_int <- mlflow_param("my_int", 1, "integer") my_num <- mlflow_param("my_num", 1.0, "numeric") my_str <- mlflow_param("my_str", "a", "string") # Log parameters mlflow_log_param("param_int", my_int) mlflow_log_param("param_num", my_num) mlflow_log_param("param_str", my_str)模型訓(xùn)練
# Sample R code training a linear model library(mlflow) # Read parameters column <- mlflow_log_param("column", 1) # Log total rows mlflow_log_metric("rows", nrow(iris)) # Train model model <- lm(Sepal.Width ~ iris[[column]], iris) # Log models intercept mlflow_log_metric("intercept", model$coefficients[["(Intercept)"]])線上實驗
library(mlflow) # Create and activate the “R-Test” experiment mlflow_create_experiment("R-Test") mlflow_active_run()啟動界面
mlflow_ui()
默認(rèn)需要在瀏覽器中訪問 localhost:5000
添加注釋 超參調(diào)優(yōu)超參調(diào)優(yōu)支持3種模式:
Random: 完全隨機探索策略
Gpyopt: 基于高斯過程的探索策略
Hyperopt: 基于數(shù)據(jù)庫的分布式探索方法
mlflow run -e random --experiment-id-P training_experiment_id= examples/r_wine --entry-point train.R
其中 train.R 為
library(mlflow) # read parameters column <- mlflow_log_param("column", 1) # log total rows mlflow_log_metric("rows", nrow(iris)) # train model model <- lm( Sepal.Width ~ x, data.frame(Sepal.Width = iris$Sepal.Width, x = iris[,column]) ) # log models intercept mlflow_log_metric("intercept", model$coefficients[["(Intercept)"]]) # save model mlflow_save_model( crate(~ stats::predict(model, .x), model) )模型部署
mlflow rfunc serve model模型推斷
mlflow_rfunc_predict("model", data = data.frame(x = c(0.3, 0.2)))
## Warning in mlflow_snapshot_warning(): Running without restoring the ## packages snapshot may not reload the model correctly. Consider running ## "mlflow_restore_snapshot()" or setting the "restore" parameter to "TRUE". ## 3.400381396714573.40656987651099 ## 1 2 ## 3.400381 3.406570
或者在命令行中調(diào)用
mlflow rfunc predict model data.json總結(jié)
mlflow 的出現(xiàn)極大方便了煉丹師傅們的工作,提供了堪比 michelangelo 的用戶體驗,并且全面支持 sklearn、spark、pytorch、tensorflow、mxnet、mlr、xgboost、keras 等主流算法框架。更多 mlflow 的詳細(xì)資料可以參見官方文檔。
參考資料MLflow v0.7.0 Features New R API by RStudio
mlflow-r-interface-for-mlflow
mlflow hyperparam
https://www.slideshare.net/da...
Uber michelangelo
作為分享主義者(sharism),本人所有互聯(lián)網(wǎng)發(fā)布的圖文均遵從CC版權(quán),轉(zhuǎn)載請保留作者信息并注明作者 Harry Zhu 的 FinanceR專欄:https://segmentfault.com/blog...,如果涉及源代碼請注明GitHub地址:https://github.com/harryprince。微信號: harryzhustudio
商業(yè)使用請聯(lián)系作者。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19843.html
摘要:背景近年來,人工智能與數(shù)據(jù)科學(xué)領(lǐng)域發(fā)展迅速,傳統(tǒng)項目在演化中也越來越復(fù)雜了,如何管理大量的機器學(xué)習(xí)項目成為一個難題。在真正的機器學(xué)習(xí)項目中,我們需要在模型之外花費大量的時間。 showImg(https://segmentfault.com/img/remote/1460000016855989?w=800&h=450); 背景 近年來,人工智能與數(shù)據(jù)科學(xué)領(lǐng)域發(fā)展迅速,傳統(tǒng)項目在演化中...
摘要:概述是一個我們正在用的工作流調(diào)度器,相對于傳統(tǒng)的任務(wù)管理,很好的為我們理清了復(fù)雜的任務(wù)依賴關(guān)系監(jiān)控任務(wù)執(zhí)行的情況。步驟三修改默認(rèn)數(shù)據(jù)庫找到配置文件修改配置注意到,之前使用的的方式是行不通的。微信號商業(yè)使用請聯(lián)系作者。 showImg(https://segmentfault.com/img/remote/1460000006760428?w=1918&h=1556); 概述 Airfl...
摘要:雖然我們可以在網(wǎng)上參照各種模板項目文章博客等創(chuàng)建一個數(shù)據(jù)科學(xué)項目,但是目前也沒有教科書對這些知識做一個統(tǒng)一的回答。舉個例子來說,數(shù)據(jù)科學(xué)分析項目通常就不需要部署和監(jiān)控這兩個過程。創(chuàng)建文件描述源數(shù)據(jù)及位置。進一步探索和報告在整個數(shù)據(jù)科學(xué)項目中 摘要:?在一個新的數(shù)據(jù)科學(xué)項目,你應(yīng)該如何組織你的項目流程?數(shù)據(jù)和代碼要放在那里?應(yīng)該使用什么工具?在對數(shù)據(jù)處理之前,需要考慮哪些方面?讀完本文...
摘要:對于數(shù)據(jù)科學(xué)的研究可以說已經(jīng)是本文我將介紹如何以文檔定義應(yīng)用的方式成為數(shù)據(jù)科學(xué)中的標(biāo)準(zhǔn)交付。參考前文解密的數(shù)據(jù)科學(xué)部門如果構(gòu)建知識倉庫,作為一個謝大大的死忠,我很自然選擇了作為我文檔輸出的首選工具。 showImg(https://segmentfault.com/img/remote/1460000006760433?w=423&h=426); 概述 隨著近年來,Rstudio 通過...
摘要:而大多數(shù)數(shù)據(jù)科學(xué)研究的場景下,更快的速度也意味著更早地發(fā)現(xiàn)問題和完成檢驗假設(shè)的閉環(huán)。通常,數(shù)據(jù)科學(xué)被認(rèn)為研究成果立即應(yīng)用到生產(chǎn)環(huán)境都是比較緩慢的一個過程。 showImg(https://segmentfault.com/img/remote/1460000005771293); 概述 在數(shù)據(jù)科學(xué)研究中,快速驗證想法是非常關(guān)鍵的一環(huán),而如何快速開發(fā)出數(shù)據(jù)產(chǎn)品則可以有效推動整個數(shù)據(jù)科學(xué)項...
閱讀 1026·2021-11-22 13:53
閱讀 1578·2021-11-17 09:33
閱讀 2373·2021-10-14 09:43
閱讀 2836·2021-09-01 11:41
閱讀 2263·2021-09-01 10:44
閱讀 2905·2021-08-31 09:39
閱讀 1443·2019-08-30 15:44
閱讀 1853·2019-08-30 13:02