每個嘗試過機器學習開發的人都知道這有多困難。 除了軟件開發中的標準問題外,機器學習 (ML) 開發還引入了許多額外的障礙。
數以百計的開源工具可用於幫助 ML 生命週期的每個階段,從數據準備到模型訓練。
與傳統的軟件開發不同,當團隊為每個步驟選擇一個工具時,使用 ML 您通常希望探索每個可用的工具(例如算法),看看它是否能改善結果。
因此,ML 開發人員必須使用和生成數百個庫。
機器學習算法包含數千個可自定義的參數,無論您是單獨工作還是團隊合作,都很難確定每個實驗中哪些參數、代碼和數據進入了生成模型。
如果沒有適當的監控,團隊通常很難讓相同的代碼再次運行。 無論您是將培訓代碼轉移給工程師以供生產使用的數據科學家,還是要回到以前的工作來診斷問題,ML 工作流程的撤退步驟都至關重要。
由於必須使用眾多部署方法和環境(例如,REST 服務、批處理推理或移動應用程序),將模型遷移到生產環境可能很困難。 沒有將模型從任何庫移動到任何這些工具的通用方法,因此每個新部署都會帶來風險。
由於這些問題,很明顯 ML 開發必須顯著改進才能像傳統軟件開發一樣穩定、可預測和廣泛使用。
機器學習挑戰
- 有很多不同的工具。 數以百計的軟件解決方案可用於幫助機器學習生命週期的每個階段,從數據準備到模型訓練。 此外,與傳統的軟件開發不同,當團隊為每個步驟選擇一個工具時,在機器學習 (ML) 中,您通常希望探索每個可用的工具(例如算法),看看它是否能改善結果。 因此,ML 開發人員必須使用和生成數百個庫。
- 很難跟踪實驗。 機器學習算法包含數千個可自定義的參數,無論您是單獨工作還是團隊合作,都很難確定每個實驗中哪些參數、代碼和數據進入以生成模型。
- 很難實現機器學習。 由於必須使用眾多部署方法和環境(例如,REST 服務、批處理推理或移動應用程序),將模型遷移到生產環境可能很困難。 沒有將模型從任何庫移動到任何這些工具的通用方法。 因此,每個新部署都會帶來風險。
什麼是 流量?
MLflow 是機器學習生命週期的開源平台。 它基於一個開放的接口概念,提出了許多基本的抽象,使當前的基礎設施和機器學習算法可以很容易地與系統集成。
這意味著,如果您是想要使用 MLflow 但正在使用不受支持的框架的開發人員,那麼開放式界面設計使得集成該框架並開始使用該平台變得相對簡單。 在實踐中,這意味著 MLflow 旨在與任何 機器學習 圖書館或語言。
此外,MLflow 促進了可重複性,這意味著相同的訓練或生產機器學習代碼旨在以獨立於環境的相同結果運行,無論是在雲端、本地工作站還是筆記本電腦中。
最後,MLflow 是為可擴展性而構建的,因此它可以被一小群數據科學家以及擁有數百名機器學習從業者的大公司使用。
MLflow 與任何機器學習庫、算法、部署工具或語言兼容。 它還具有以下優點:
- 旨在與任何云服務一起運行。
- 使用 Apache Spark 擴展到海量數據。
- MLflow 兼容多種開源機器學習框架,包括 Apache Spark、 TensorFlow和 SciKit-學習.
如果您已經有代碼,可以使用 MLflow。 您甚至可以在企業之間共享您的框架和模型,因為它是 開放源碼.
MLflow 組件:它們是如何工作的?
MLflow 是一個免費的開源平台,用於管理 ML 生命週期,其中包括實驗、再現性、部署和單一模型註冊表。 目前,MLflow 有四個組件:
1. MLflow追踪
我將從 MLflow Tracking 開始。 MLflow 支持收集與集中式培訓元數據跟踪存儲庫相關聯的各種基本概念。 第一個概念是影響模型性能的關鍵超參數或配置旋鈕的集合。 使用 MLflow 的 API 和集中式跟踪服務可以保留所有這些。
用戶還可以記錄性能數據,以深入了解他們的機器學習模型是否成功。 此外,為了可重複性,MLflow 允許用戶通過與 Git 緊密集成來記錄用於創建模型的特定源代碼及其版本,以將每個模型綁定到特定的提交哈希。
MLflow 可用於記錄工件,這些工件是任意文件,包括訓練、測試數據和模型本身以實現可重複性。
這意味著,如果我是一名剛剛訓練過模型的開發人員,我可以將其保存到集中跟踪服務中,我的一位同事可以稍後加載它,然後繼續訓練和試驗或生產該模型以滿足特定需求.
在執行機器學習代碼並隨後查看結果時,跟踪是一種 API,可讓您記錄參數、代碼版本、指標和輸出文件。 它是用 Python、R 和 Java 以及其他語言編寫的。 它也可以作為 REST API 訪問,可用於在其之上構建應用程序。
主要功能
- 許多開發人員在他們的本地 PC 上使用 MLflow,其中後端和工件存儲共享磁盤上的一個目錄。
- 許多用戶還使用與 SQLAlchemy 兼容的數據庫 SQLite 在其本地 PC 上運行 MLflow。
- MLflow 還支持分佈式架構。 跟踪服務器、後端存儲和工件存儲都託管在這些不同的服務器上。
- 如果運行由 MLflow 項目啟動,則使用 git commit 哈希。 MLflow Python、R、Java 和 REST API 可用於記錄數據以運行。
更多信息,您可以查看官方 文檔.
2. MLFlow 項目
在我們了解了跟踪組件之後,我想談談 MLflow 項目,它是用於模型訓練會話的可重複打包結構,無論執行上下文如何。
企業使用廣泛的機器學習培訓技術,但他們也在不同的環境中使用這些培訓工具。 例如,他們可能正在雲端、本地 PC 或筆記本電腦上執行訓練代碼。
這導致了機器學習結果難以復制的問題。 通常,相同的訓練代碼不會在兩個不同的位置執行或產生相同的結果。
MLflow 提供的解決方案是一個自包含的訓練代碼項目定義,其中包括所有機器學習訓練代碼,以及它的版本庫依賴項、設置以及訓練和測試數據。
MLflow 通過清楚地描述機器學習訓練過程的整套要求來確保跨執行上下文的可重複性。 它通過安裝所有這些庫並完成代碼運行的相同系統狀態來實現這一點。
MLflow 項目只不過是一個目錄。 它是一個目錄,其中包含訓練代碼、庫依賴定義和訓練會話所需的其他數據,以及此可選配置文件。
可以通過多種方式定義這些庫要求。 例如,用戶可以提供 YAML 格式的 anaconda 環境規範來列出他們的訓練代碼庫要求。 MLflow 將在容器內執行訓練代碼。 在這種情況下,它們還可以包含 Docker 容器。
最後,MLflow 具有用於運行這些項目以及 Python 和 Java API 的命令行界面 (CLI)。 這些項目可以在用戶的本地系統上運行,也可以在各種遠程設置中運行,例如 Databricks 作業調度程序和 Kubernetes。 MLflow 項目允許您以可重複和可重用的方式打包數據科學代碼,主要基於標準。
項目組件包括一個 API 以及用於管理項目的命令行實用程序。 這些功能保證了項目可以鏈接在一起形成機器學習過程。
主要功能
- MLflow 支持項目環境,包括 Docker 容器環境、Conda 環境和系統環境。
- 任何 Git 儲存庫或本機目錄都可以被視為 MLflow 專案; 預設情況下; 你可以使用任何外殼或 Python腳本 作為項目入口點的目錄。
- 可以使用 Docker 容器捕獲非 Python 依賴項,例如 Java 庫。
- 您可以通過將項目文件添加到項目的根目錄來更好地控制 MLflow 項目,該文件是 YAML 語法的文本文件。
更多信息,您可以查看官方 文檔.
3. MLflow 模型
現在,我想討論 MLflow 模型,一種支持廣泛生產環境的通用模型格式。 MLflow 模型的原因現在與項目的原因非常相似。
同樣,我們看到模型可以使用多種工俱生成,但它們也可以在各種情況下生成或部署,而不是訓練環境。
這些設置包括用於實時服務的工具,例如 Kubernetes 或 Amazon SageMaker,以及流式和批處理評分,例如 Spark。 此外,一些企業可能會選擇將模型部署為在預配置的雲實例上運行的 RESTful Web 服務。
MLflow 模型和項目一樣,是一個目錄結構。 它包括一個配置文件,這一次是一個序列化的模型工件,而不是訓練代碼。 它還包括這組依賴項,以作為項目的可重複性。 這一次,我們將在 Conda 環境的上下文中研究評估依賴關係。
此外,MLflow 包括模型生成工具,用於從一系列流行的框架中以 MLflow 格式序列化模型。 最後,MLflow 添加了部署、API,用於生產和連接任何 MLflow 模型到一系列服務,這些 API 可以在 Python、Java、R 和 CLI 格式中訪問。
模型是具有標準結構的組件,用於打包模型,可以被下游工具(例如推理服務器或 數據塊 批量推理平台。 在打包模型進行生產時,此組件可節省數小時的定制代碼。
MLflow 模型是將機器學習模型打包成各種形式的標準,稱為“風味”。 MLflow 提供了很多工具來幫助您部署各種類型的模型。 每個 MLflow 模型都保存為一個目錄,其中包含任意文件以及一個 ML 模型描述符文件,其中包含可以使用它的風格列表。
主要功能
- MLflow 的所有內置部署工具都提供了多種“標準”風格,例如解釋如何將模型作為 Python 函數運行的“Python 函數”風格。
- 每個 MLflow 模型都包含一個包含任意文件的目錄,以及位於該目錄根目錄的 ML 模型文件,該文件定義了模型的多種風格。
- 存儲模型時,MLflow 允許您指定包含模型依賴項的 Conda 環境參數。 如果未指定 Conda 環境,則會構建基於模型風格的默認環境。 之後,Conda 環境存儲在 conda.yaml 中。
更多信息,您可以查看官方 文檔.
4. MLflow模型註冊表
模型註冊表是學習機器學習 (ML) 模型的存儲庫。 模型註冊表由 API 和一個基於 Web 的應用程序組成,用於作為一個團隊在各個階段維護模型。 Model Lineage、Model Versioning、Easy Stage Transition 和 Annotation 只是 Model Registry 中提供的一些功能。
除了模型本身之外,模型註冊表還包含有關用於構建模型的數據和訓練任務的信息(元數據)。 跟踪這些必需的輸入以創建 ML 模型的沿襲至關重要。 在這方面,模型註冊表的功能類似於傳統軟件的 版本控制 系統(例如,Git、SVN)和工件存儲庫(例如,Artifactory、PyPI)。
模型註冊表是一個框架,允許數據科學家和機器學習工程師發布、測試、監控、管理和分發他們的模型,以便與其他團隊合作。 從本質上講,一旦您完成了測試階段並準備好與團隊和利益相關者分享您的發現,就會使用模型註冊表。
MLflow 模型註冊表提供 API 和用戶界面,用於從中心位置管理模型及其生命週期。 模型沿襲、模型版本控制、註釋和階段轉換都可以通過註冊表獲得。
在 MLflow 中,註冊模型是具有唯一名稱和元數據、模型版本、過渡階段和模型沿襲的模型。 一個或多個模型版本可以在註冊模型中找到。 新模型在註冊表中註冊時被視為版本 1。 以下版本將添加到具有相同名稱的任何新模型中。
您可以隨時將一個步驟分配給任何模型版本。 但是,必須在已正式指定的 MLflow 階段下分配階段,例如登台、生產和存檔。 模型版本可以從一個階段過渡到另一個階段。
MLflow 允許您使用 markdown 來註釋頂級模型和每個特定版本。 您可以包括描述以及其他相關信息,例如算法解釋、方法和使用的數據集。
主要功能
- 要在託管您自己的 MLflow 服務器時通過 UI 或 API 訪問模型註冊表,您必須使用數據庫支持的後端存儲。
- 模型註冊表也可以通過 MLflow 模型風格或 MLflow 客戶端跟踪 API 接口訪問。 例如,您可以在 MLflow 實驗運行期間或所有實驗運行之後註冊模型。
- 不是每個人都會開始使用 MLflow 訓練他們的模型。 因此,您可能在使用 MLflow 之前已經訓練了一些模型。 您只需將存儲的模型註冊到模型註冊表,而不是重新訓練模型。
更多信息,您可以查看官方 文檔.
結論
MLflow 是一個優秀且不斷發展的 ML 生命週期工具。 您可以將它與您當前的工具和平台一起使用。
它支持多種編程語言,包括 Python、Java 和 R。由於其用戶友好的設計,您還可以快速跟踪、保存和比較不同的模型版本。
試試 MLflow,讓我們知道您的體驗!
發表評論