機器學習管理平臺 MLFlow

最近工做很忙,博客一直都沒有更新。抽時間給你們介紹一下Databrick開源的機器學習管理平臺-MLFlowhtml

談起Databrick,相信即便是不熟悉機器學習和大數據的工程溼們也都有所瞭解,它由Spark的創始人開辦的,主要爲用戶提供在雲端使用Spark來進行機器學習的能力。那麼此次Databrick開源的MLFlow究竟能提供什麼樣的功能呢?python

首先咱們來看一看當前機器學習所遇到的挑戰:git

  • 使用的軟件工具繁多,一個機器學習的項目基本上數據收集和準備,模型訓練,模型部署的不斷迭代過程,這個過程當中的每一步都有不少不一樣的工具和選擇。單就模型訓練來講,咱們就有scikit-learn,pytorch,spark,tensorflow,R 等等諸多選擇。它們各自具備不一樣的優缺點和適用場合,對於數據科學家而言,要管理和適用這麼多的工具,確實很是困難。
  • 很難跟蹤和重現數據處理,代碼運行,參數調試的過程和結果。
  • 很難對模型進行產品化,部署模型很困難。
  • 當數據規模增加的時候,很難擴展和伸縮。

MLFlow的目標是但願可以解決這些問題,但願支持任何的機器學習庫,能夠在本機或者雲端運行,並解決可伸縮性的問題github

MLFlow採用了開源的策略,基於API和模塊化的設計。他主要有如下三個功能模塊:web

  • Tracking 跟蹤和記錄
  • Project 項目管理
  • Models 模型管理

咱們分別來看看這三塊:機器學習

Tracking

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都是不錯的選擇。工具

Project

項目管理主要是爲了解決機器學習中諸多不一樣工具的問題。其實解決的方法也很簡單,就是用一些元數據來描述項目,並把項目用一個合理的目錄結構來管理,結構以下:post

例如上圖的例子,把一個conda的python項目用一個yaml文件來描述,記錄了名字是什麼,參數是什麼,有哪些依賴運行命令是什麼,而後就能夠用mlflow的API或者命令行客戶端來調用。

對於這個問題,我想說的是,爲何不適用容器呢?容器是一個很好的封裝各類不用運行環境和運行工具的選擇。比起上面的方案,我認爲要強許多,況且,還要支持雲端,容器纔是最佳實踐!

項目管理的代碼在這裏 ,功能也很少。

MLFlow能夠直接運行在github上的項目,也就是用github做爲項目管理的倉庫。

這裏的亮點是能夠運行擁有多個步驟的工做流,每個步驟都是一個項目,相似一個數據處理管道(data pipeline)。利用Tracking API,不一樣項目步驟之間能夠傳遞數據和模型(Artifact)。這也許是爲何該項目叫MLFlow吧。

Models

MLFlow利用相似對項目管理的相同哲學管理模型,使用元數據來描述不一樣工具所產生的不一樣模型。

上圖是一個模型的例子。模型支持不一樣的口味(Flavors),包含Python,Scikit-Learn,Tensorflow和Spark ML。用戶也能夠定製本身個性化的口味(感受像是在作菜)。

模型這比部分還支持了部署的功能,也就是說能夠把模型部署到不一樣的平臺,這個功能仍是很好的。主要支持本地部署,Microsoft AzureML,AWS Sagemaker和Apache Spark。

固然,MLFlow並不能很好的解決不一樣工具所產生的模型不兼容的問題,你並不能把一個tensorflow的模型部署到Saprk上。若是有人對這一部分感興趣,能夠去關注一下這個項目:Mleap

另外MLFlow使用Flask提供web服務,有UI功能。當前還在Alpha階段。但願它的將來能有好的發展,給數據科學家們提供一個好用的平臺。

參考

相關文章
相關標籤/搜索