最近工做很忙,博客一直都沒有更新。抽時間給你們介紹一下Databrick開源的機器學習管理平臺-MLFlow。html
談起Databrick,相信即便是不熟悉機器學習和大數據的工程溼們也都有所瞭解,它由Spark的創始人開辦的,主要爲用戶提供在雲端使用Spark來進行機器學習的能力。那麼此次Databrick開源的MLFlow究竟能提供什麼樣的功能呢?python
首先咱們來看一看當前機器學習所遇到的挑戰:git
MLFlow的目標是但願可以解決這些問題,但願支持任何的機器學習庫,能夠在本機或者雲端運行,並解決可伸縮性的問題github
MLFlow採用了開源的策略,基於API和模塊化的設計。他主要有如下三個功能模塊:web
咱們分別來看看這三塊:機器學習
MLFlow的追蹤功能相似APM,記錄應用運行過程當中所產生的各類數據。主要記錄參數(Parameters),指標(Metrics),模型的持久化對象(Artifact)等內容。這一部分實際上功能的實現很簡單。你們能夠參考它的代碼 ,ide
例如,對於參數的記錄代碼:模塊化
def log_param(self, key, value): # TODO: prevent keys from containing funky values like ".." fn = os.path.join(self.run_dir, "parameters", key) dir_util.mkpath(os.path.dirname(fn)) with open(fn, "w") as f: f.write("%s\n" % value)
我想說,要解決追蹤的問題,業內已經有不少成熟的工具,各類APM產品,甚至Splunk,ELK都是不錯的選擇。工具
項目管理主要是爲了解決機器學習中諸多不一樣工具的問題。其實解決的方法也很簡單,就是用一些元數據來描述項目,並把項目用一個合理的目錄結構來管理,結構以下:post
例如上圖的例子,把一個conda的python項目用一個yaml文件來描述,記錄了名字是什麼,參數是什麼,有哪些依賴,運行命令是什麼,而後就能夠用mlflow的API或者命令行客戶端來調用。
對於這個問題,我想說的是,爲何不適用容器呢?容器是一個很好的封裝各類不用運行環境和運行工具的選擇。比起上面的方案,我認爲要強許多,況且,還要支持雲端,容器纔是最佳實踐!
項目管理的代碼在這裏 ,功能也很少。
MLFlow能夠直接運行在github上的項目,也就是用github做爲項目管理的倉庫。
這裏的亮點是能夠運行擁有多個步驟的工做流,每個步驟都是一個項目,相似一個數據處理管道(data pipeline)。利用Tracking API,不一樣項目步驟之間能夠傳遞數據和模型(Artifact)。這也許是爲何該項目叫MLFlow吧。
MLFlow利用相似對項目管理的相同哲學管理模型,使用元數據來描述不一樣工具所產生的不一樣模型。
上圖是一個模型的例子。模型支持不一樣的口味(Flavors),包含Python,Scikit-Learn,Tensorflow和Spark ML。用戶也能夠定製本身個性化的口味(感受像是在作菜)。
模型這比部分還支持了部署的功能,也就是說能夠把模型部署到不一樣的平臺,這個功能仍是很好的。主要支持本地部署,Microsoft AzureML,AWS Sagemaker和Apache Spark。
固然,MLFlow並不能很好的解決不一樣工具所產生的模型不兼容的問題,你並不能把一個tensorflow的模型部署到Saprk上。若是有人對這一部分感興趣,能夠去關注一下這個項目:Mleap
另外MLFlow使用Flask提供web服務,有UI功能。當前還在Alpha階段。但願它的將來能有好的發展,給數據科學家們提供一個好用的平臺。