實現MLOps磚使用磚筆記本和Azure DevOps,第2部分
2022年1月5日 在工程的博客
這是一個由兩部分組成的係列文章的第二部分的博客顯示一個端到端的MLOps框架磚,這是基於筆記本電腦。第一篇文章中,我們提出了一個完整的CI / CD框架磚用的筆記本。這種方法是基於AzureDevOps生態係統的持續集成(CI)和回購API持續交付的一部分(CD)。這篇文章擴展了CI / CD與機器學習框架提供了一個完整的ML運維解決方案。
文章的結構如下:
- 引入毫升行動方法。
- 在開發和部署生命周期中使用筆記本電腦。
- 一個詳細的例子,包括代碼片段,展示了一個完整的管道ML-specific測試套件,版本控製和發展、過渡和生產環境。
為什麼我們需要MLOps嗎?
人工智能和機器學習的一些最大的現象在過去的二十年裏,改變和塑造我們的日常生活。這個自動化的決策來了,然而,有自己的的挑戰和風險,這裏沒有免費的午餐。Productionizing毫升是困難的,因為它不僅是底層軟件的變更影響輸出但更,所以一個好的質量模型是由高質量的數據。
此外,版本控製的數據、代碼和模型變得更加困難,如果一個組織試圖在大規模應用成為了一個真正愛一公司。把單一的機器學習模型使用有完全不同的成本和風險比擁有成千上萬的迭代模型和改進的頻繁。因此,需要一個全麵的方法在整個產品生命周期,每一個版本的早期原型,多次測試結果的多個方麵和高亮顯示終端客戶接觸之前的任何問題。隻有這種做法讓團隊和公司規模經營和交付高質量的自治係統。這對數據產品的開發實踐由毫升叫做MLOps。
MLOps是什麼?
DevOps實踐是一種常見的工具箱和哲學,使快速、穩定和高效迭代軟件在發布過程。這對軟件工程實際標準機器學習中變得更加具有挑戰性的項目,有新的維度的複雜性——數據和導出模型構件,需要占。的變化數據,俗稱漂移,這可能會影響到模型和model-related輸出,收益率的誕生新的術語:MLOps。
簡而言之,MLOps延伸和深刻繼承實踐從DevOps,添加新的工具和方法,使CI / CD係統上的過程,不僅代碼,而且數據的變化。因此所需的工具套件地址典型的軟件開發技術也增加了類似的編程和自動精確底層數據。
因此,與日益增長的適應AI和ML跨企業和組織,越來越多的需要一流MLOps實踐和監測。這種基本功能為組織提供了必要的工具,安全網,並自動化解決方案的信心使他們規模和推動價值。磚平台配備了所有必要的解決方案Beplay体育安卓版本為管理服務,允許公司自動化和使用技術專注於高級業務挑戰做好了準備。
為什麼很難實現MLOps使用筆記本電腦?
雖然筆記本普遍盛行在過去的十年中,已經成為數據科學的代名詞,仍有一些機器學習從業者所麵臨的挑戰在敏捷開發工作。大多數的機器學習項目在筆記本根部,可以輕鬆地探索、想象和理解數據。大多數編碼開始在一個筆記本,數據科學家可以立即實驗中,頭腦風暴,建立和實施一個協作的建模方法和靈活的方式。beplay娱乐ios雖然從曆史上看,大多數的硬化和產品代碼必須重寫和重新實現ide,在過去的幾年裏,我們已經觀察到急劇上升為生產工作負載使用筆記本。通常可行每當代碼庫小,可管理的相互依賴關係和主要消耗庫。在這種情況下,團隊可以減少和簡化代碼庫的實現時間,同時保持透明、健壯、敏捷的筆記本。這戲劇性的轉變的一個關鍵原因是日益增長的財富CI / CD工具現在在我們處理。然而,機器學習,增添了另一個維度的複雜性CI / CD管道交付與多個模塊之間的依賴關係/筆記本電腦筆記本。
持續交付和ML的監控項目
在前麵的段落中,我們描述了一個框架,用於測試我們的代碼庫,以及測試和質量保證的新訓練——MLOps毫升模型。現在我們可以討論如何使用這些工具來實現我們毫升項目使用以下原則:
- 模型接口是統一的。建立每個模型的常見結構,類似於包像scikit-learn常見.fit()和.predict()方法,至關重要的可重用性各種毫升技術框架,可以很容易地交換。讓我們開始與潛在的更簡單的基線毫升模型在一個端到端的時尚和迭代與其他管道ML算法在不改變代碼。
- 模型訓練必須與評價和評分和實現為獨立管道/筆記本。解耦原理使代碼模塊化,並允許我們,再一次,比較各種毫升架構/框架。MLOps的一個重要組成部分,我們可以很容易地評估各種毫升模型和測試前的預測能力提升。此外,堅持MLflow訓練模型可以很容易地重用在其他工作和框架,沒有依賴於培訓/環境設置,例如,作為一個REST API部署服務。
- 得分模型必須能夠總是依賴一個模型庫模型的最新批準的版本。結合j MLOps框架,隻有測試和良好的模型推廣,確保正確的、高質量的模型版本完全自動化的方式被部署到我們的生產環境,同時保持訓練使用新的數據輸入管道定期提出新模式。
早些時候我們可以滿足定義的需求通過使用架構描述了以下說明:
如上所示,培訓管道(您可以查看代碼在這裏他們MLflow)火車模型和日誌。我們可以有多個培訓管道不同的模型體係結構或不同的模式類型。所有這些管道模型的訓練,可以記錄到MLflow和用於評分使用一個統一的MLflow接口。評估管道(您可以查看代碼在這裏)可以運行每次訓練後管道和被使用在一開始比較所有這些新模型。這樣,候選模型可以評估針對當前生產模型。理想的評價管道的一個例子,使用MLFlow實現,下麵討論。
讓我們實現模型比較和選擇!
我們需要兩個構建塊來實現完整的功能,我們將為單個功能。第一個將使我們能夠從培訓中獲得所有新訓練的模型我們MLflow管道。要做到這一點,我們將利用MLflow-experiment數據源允許我們使用Apache火花™查詢MLflow實驗數據。有MLflow實驗數據作為火花dataframe使工作很簡單:
defget_candidate_models(自我):spark_df = self.spark.read。格式(“mlflow-experiment”).load (str(self.experimentID))pdf = spark_df.where (“tags.candidate =‘真正的’”).select (“run_id”).toPandas ()返回pdf (“run_id”). values
比較模型,我們需要想出一些指標。這是通常情況下特定,應該與業務需求保持一致。如下所示的函數加載模型使用MLflow run_id實驗和計算預測使用最新的可用數據。更健壯的評價,我們引導和派生出多個指標申請樣品,從最初的評價集。然後重複計算中華民國AUC為每個隨機指標繪製設置將用於比較模型。如果候選人模型優於當前版本至少90%的樣本,然後晉升為生產。在實際的項目中,這個指標必須仔細選擇。
defevaluate_model(自我,run_id, X, Y):模型= mlflow.sklearn.load_model (f 'runs: /{run_id}/模型”)預測= model.predict (X)n =One hundred.sampled_scores = []分數=0.5rng = np.random.RandomState ()為我在範圍(n):#放回抽樣的預測指標指數= rng.randint (0,len(預測)len(預測)如果len(np.unique (Y.iloc(指標)))
下麵的函數評估提供多個模型作為run_ids列表和計算多個指標為他們每個人。這讓我們發現模型與最好的指標:
defget_best_model(自我,run_ids, X, Y):best_roc = -1best_run_id =沒有一個為run_id在run_ids:中華民國=自我。evaluate_model(run_id,X, Y)如果np。意思是(roc > best_roc) >0.9:best_roc =中華民國best_run_id = run_id返回best_roc, best_run_id
現在讓我們一起把這些積木,看看我們如何評估所有新模型和比較最好的新模型的生產。確定最好的新訓練模型後,我們將利用MLflow API加載所有生產模型版本和比較它們使用相同的函數,我們使用比較新培訓的模式。
之後,我們可以比較的指標最好的生產模型和新的和決定是否將最新的生產模式。在積極的決定的情況下,我們可以利用MLflow API模型注冊登記我們最好的新培訓的模型作為一個注冊模型,促進生產狀態。
cand_run_ids = self.get_candidate_models ()best_cand_roc best_cand_run_id = self.get_best_model(X_test cand_run_ids Y_test)打印(最好的中華民國(候選模型):np.mean (best_cand_roc))試一試:版本=mlflow_client.get_latest_versions (self.model_name階段= [“生產”])prod_run_ids = [v.run_id為v在版本)best_prod_roc best_prod_run_id =自我。get_best_model (prod_run_ids X_test Y_test)除了RestException:best_prod_roc = -1打印(的中華民國(生產模型):np.mean (best_prod_roc))如果np。意思是(best_cand_roc > = best_prod_roc) >0.9:#部署新模型model_version =mlflow.register_model (f: /{best_cand_run_id}/模式”,self.model_name)time . sleep (5)
mlflow_client.transition_model_version_stage (name =自我。= model_version.version model_name,版本,階段=“生產”)打印(的部署版本:model_version.version)#刪除候選標簽為run_id在cand_run_ids:mlflow_client.set_tag (run_id“候選人”,“假”)
總結
在這篇文章中,我們提出了一個端到端的方法MLOps磚使用notebook-based項目。這個機器學習工作流基於回購API功能,不僅讓數據團隊結構和版本控製他們的項目以更實用的方式也大大簡化了CI / CD工具的實現和執行。我們展示了一個架構,所有操作環境完全隔離,確保高度的安全生產工作負載由毫升。討論了一個典型的工作流,跨越生命周期模型中的所有步驟強烈關注自動化測試套件中。這些質量檢查不僅可以涵蓋典型的軟件開發步驟(單元測試、集成測試等)也關注自動化評估的任何新的迭代重新訓練模型。CI / CD管道是由一個框架的選擇和集成數據磚Lakehouse平台順利,觸發執行的代碼和基礎設施提供端到端。Beplay体育安卓版本回購API不僅從根本上簡化版本管理,代碼結構,和開發項目生命周期的一部分,但也持續交付,允許部署生產環境之間工件和代碼。這是一個重要的改進,增加了整體效率和可伸縮性的磚,大大提高軟件開發的經驗。
引用:
- Github庫的實現示例項目:https://github.com/mshtelma/databricks_ml_demo/
- //m.eheci.com/blog/2021/06/23/need-for-data-centric-ml-Beplay体育安卓版本platforms.html
- 持續交付機器學習,馬丁,https://martinfowler.com/articles/cd4ml.html,
- MLOps的概述,https://www.kdnuggets.com/2021/03/overview-mlops.html
- 第1部分:實施CI / CD使用磚筆記本和Azure DevOps的磚,//m.eheci.com/blog/2021/09/20/part-1-implementing-ci-cd-on-databricks-using-databricks-notebooks-and-azure-devops.html
- 介紹Azure DevOps,https://azure.microsoft.com/en-us/blog/introducing-azure-devops/