跳轉到主要內容
工程的博客

使用MLOps MLflow和Azure

2020年10月13日 工程的博客

分享這篇文章
博客包含代碼示例在Azure磚,Azure DevOps和純Python。請注意,大部分的代碼取決於在Azure磚Community Edition的環境和不工作或AWS-based磚。

今天的大多數組織有一個已定義過程促進代碼(例如Java或Python)從開發到QA /測試和生產。許多人使用持續集成和/或持續交付(CI / CD)流程和經常使用工具,如Azure DevOps或詹金斯協助這一過程。磚提供了許多資源的細節如何磚統一分析平台可以集成用這些工具(見Beplay体育安卓版本Azure DevOps集成,詹金斯集成)。此外,有一個磚實驗室項目CI / CD模板——以及一個相關的博客提供自動模板GitHub行動和Azure DevOps,使集成更容易和更快。

機器學習時,大多數組織沒有同樣的紀律過程。有許多不同的原因:

  • 數據科學團隊不遵循相同的軟件開發生命周期(SDLC)過程規律的開發人員。機器學習生命周期的關鍵差異(MLLC)相關目標、質量、工具和結果(參見下麵的圖)。
  • 機器學習仍然是一個年輕的學科,它通常不是好集成組織。
  • 數據科學和部署團隊不治療產生的模型作為單獨的工件需要妥善管理。
  • 數據科學家正在使用大量的工具和環境不整合好,不容易插入上述CI / CD的工具。
玩這個視頻,請點擊這裏,接受餅幹

為了解決這些問題和其他一些問題,磚是帶頭MLflow一個開源平台,機器學習生命周期。Beplay体育安卓版本雖然MLflow有許多不同的組件,我們將關注MLflow模型注冊在這個博客。

MLflow模型注冊組件是一個集中式模型商店,api,和一個UI,協同管理整個生命周期的機器學習模型。beplay娱乐ios它提供了模型譜係(MLflow實驗和運行產生模型),模型版本,階段轉換(例如從暫存到生產),和注釋。

Azure磚統一數據管理和分析平台包括MLflow和使它很容易利用先進MLflow MLflowBeplay体育安卓版本模型注冊等功能。此外,與其他Azure Azure磚緊密集成的服務,如Azure DevOpsAzure毫升

Azure DevOps是一個基於雲的CI / CD環境與許多Azure服務集成。Azure毫升是一個機器學習的平台,在這個例子將生成的模型。Beplay体育安卓版本這個博客提供了一個端到端的例子,所有這些作品都可以有效地連接。

一個端到端的模式治理過程

為了說明為什麼MLOps管道是有用的,讓我們考慮以下業務場景:比利是一個數據科學家在葡萄酒有限公司葡萄酒公司工作是一個全球性的葡萄酒批發商引以為榮的是能夠找到,促進高質量的葡萄酒,很多更便宜的比質量的葡萄酒。葡萄酒公司的關鍵成功因素是葡萄酒的機器學習模型可以預測葡萄酒的質量(例如我們使用公共目的葡萄酒的品質數據集(由科爾特斯et al。)。等關鍵特征數據集包括化學的固定酸度、檸檬酸、殘糖、氯化物、密度、pH值和酒精。它還包括一個基於感官質量分數在0和10之間。比利不斷推出改進模型,使其盡可能準確。領域模型的主要消費者是葡萄酒測試人員。領域全球葡萄酒中測試人員測試,能夠快速分析葡萄酒的關鍵特性。葡萄酒測試人員立即進入葡萄酒特性的移動應用,立即返回一個品酒師預測質量分數。如果一個分數足夠高,葡萄酒的品酒師可以獲得批發分銷。

比利已經開始使用MLFlow模型注冊存儲和管理不同版本的葡萄酒質量模型。MLflow模型注冊中心建立在MLflow現有的能力,為組織提供一個中心位置分享ML模式,合作將他們從實驗測試和生產,並實現審批和管理工作流。

注冊表是一個巨大的幫助在管理模型及其生命周期的不同版本。

一旦機器學習模型是適當的訓練和測試,這需要投入生產。這種模型也被稱為服務或得分的環境。有多種類型的為毫升模型架構。正確的類型的ML生產架構是依賴於兩個關鍵問題的答案:

  1. 數據刷新頻率:頻率將數據提供,如一天一次,一天幾次,不斷,還是臨時?
  2. 推理請求響應時間:我們需要多快響應推理請求這個模型,如幾小時,分鍾,秒或次秒級/毫秒?

如果頻率一天幾次,推理所需請求響應時間是幾分鍾至幾小時一批評分模型將是理想的。如果數據是不斷提供的,流體係結構應該考慮,特別是如果答案是需要很快。如果數據提供特別的答案是需要在秒或毫秒,基於REST api的評分模型將是理想的。

的葡萄酒公司,我們假設後者情況,即現場測試人員請求特設的結果立即響應。有多個選項來提供基於REST模型,例如使用磚REST模型服務或一個簡單的基於Python的模型服務器這是由MLFlow支持。另一個流行的選擇模型在Azure服務生態係統是使用AzureML。Azure毫升的部署提供了一個基於容器的後端,允許基於rest的評分模型。MLflow直接支持Azure毫升作為服務端點。這個博客的其餘部分將集中在如何最好地利用該內置MLflow功能。

玩這個視頻,請點擊這裏,接受餅幹

上麵的圖表說明了端到端步驟是必需的。我將使用圖表作為指導步行穿過管道的不同步驟。請注意,這個管道仍有些簡化用於演示目的。

主要步驟是:

  • 步驟1、2和3:訓練模型和部署模型中注冊表
  • 步驟4到9:管道安裝和運行毫升部署到QA
  • 步驟10到13:促進毫升模型來生產

步驟1、2和3:訓練模型和部署模型中注冊表

請看以下筆記本指導:

通過MLflow Azure磚模型訓練和部署

比利不斷發展他的葡萄酒使用Azure磚統一的數據模型和分析平台。Beplay体育安卓版本他使用磚MLflow培訓管理的模型和使用MLflow運行許多模型變化的跟蹤服務器找到最可能的模型。一旦比利發現一個更好的模型,他將生成的模型存儲在MLflow模型注冊表,使用下麵的Python代碼。

結果=mlflow.register_model (model_uri,model_name)time . sleep (10)版本=result.version

(睡眠步驟確保注冊表需要有足夠的時間來注冊模型)。
一旦比利已經確定了他最好的模型,模型中他登記注冊作為一個“登台”模型。

客戶= mlflow.tracking.MlflowClient ()client.transition_model_version_stage (name = model_name,version =版本,階段=“暫存”)

Azure DevOps提供了一種方法來自動化促進端到端流程,測試和部署模型在Azure的生態係統。它需要Azure DevOps的創建管道。這個博客的其餘部分將深入討論如何最好定義Azure DevOps管道和集成Azure磚和Azure。

一旦比利定義了Azure DevOps管道,他可以觸發管道以編程方式,將測試和模型推廣到生產環境中使用的移動應用程序。

Azure的管道是Azure DevOps的核心組件。它包含所有必要的步驟來訪問和運行代碼,允許測試、推廣和部署毫升的管道。可以找到更多的信息在Azure管道在這裏

Azure DevOps的另一個核心組件是回購。回購包含所有相關的代碼構建和部署管道。回購商店所需的所有工件,包括:

  1. Python筆記本和/或源代碼
  2. Python腳本,磚和MLflow交互
  3. 管道源文件(YAML)
  4. 文檔/我讀等等。

下圖顯示了DevOps項目和回購的葡萄酒公司管道:

管道的示例DevOps項目和庫。

DevOps管道是YAML中定義。這是一個管道YAML文件在這個博客中,

示例YAML文件定義DevOps管道。

第3行:觸發:通常,管道將自動觸發代碼更改。自推廣模型在模型中注冊中心不是一個代碼更改,可以使用Azure DevOps REST API以編程方式觸發管道。管道通過UI也可以手動觸發。

這是代碼培訓的筆記本使用DevOps REST API來觸發管道:

azure.devops.connection進口連接msrest.authentication進口BasicAuthenticationazure.devops.v6_0.pipelines.models進口RunPipelineParameters、變量#填寫你的個人訪問令牌和org URLpersonal_access_token = dbutils.secrets.get (“ml-gov”,“ado-token”)organization_url =“https://dev.azure.com/ML-Governance”#創建連接組織憑證= BasicAuthentication (personal_access_token)連接=連接(base_url = organization_url信譽=憑證)#得到一個客戶端(“核心”客戶端可以訪問項目,團隊,等等)pipeline_client = connection.clients_v6_0.get_pipelines_client ()#設置變量的管道變量=變量(值= model_name)變量= {“model_name”:變量}run_parameters = RunPipelineParameters(變量=變量)打印(run_parameters)#運行管道MKL治理項目V2 id 6 (ML治理V3))runPipeline = pipeline_client.run_pipeline (run_parameters = run_parameters項目=“ML治理V2”pipeline_id =6)

步驟4到9:管道安裝和運行毫升部署到QA

Azure管道是一個YAML文件。它首先設置環境(所有基於Python的),然後將模型部署到Azure QA環境中,它可以進行測試。

15到19行:先決條件:管道安裝一組庫,它需要運行腳本。我們是使用Python運行腳本。有各種不同的選項來運行代碼時在Python中使用Azure磚。我們將使用其中的一些在這個博客。

使用磚命令行接口:磚CLI提供了一個簡單的方式與REST API進行交互。它可以創建和運行工作,上傳代碼等。CLI是最有用的,當不需要複雜的交互。管道的示例中用於上傳Azure毫升代碼部署到一個孤立的一部分Azure磚工作區可以執行。執行更複雜,所以它將進一步在Python腳本中使用REST API。

行32 37:這一步執行Python腳本executenotebook.py。需要大量的值作為參數,如磚主機名,等等。它還將允許傳遞參數到筆記本,如模型的名稱應該部署和測試。

代碼存儲在Azure DevOps庫隨著磚筆記本和管道本身。因此它總是可能繁殖的具體配置執行時使用的管道。

- - - - - -任務:PythonScript@0輸入:scriptSource:“filePath”scriptPath:“$ (Build.Repository.LocalPath) / cicd-scripts / executenotebook.py”參數:”——碎片(DATABRICKS_HOST)——令牌美元(DATABRICKS_TOKEN)——集群(EXISTING_CLUSTER_ID)——localpath (Build.Repository.LocalPath)美元/筆記本電腦/用戶/(電子郵件保護)/毫升/部署——workspacepath /演示/測試outfilepath /home/vsts/work/1/s/notebooks/Users/(電子郵件保護)——params model_name = $ (model_name)”displayName:“從注冊表MLflow模型部署到Azure毫升為測試的

筆記本“deploy_azure_ml_model”執行的一個關鍵任務在該方案中,主要MLflow模型部署到Azure毫升環境使用建於MLflow部署能力。筆記本是參數化的,所以這對不同的模型可以重用,階段等。

樣本Azure磚與代碼片段在Azure毫升部署模型使用MLflow庫。

下麵的代碼片段的筆記本是部署模型的關鍵部分在Azure毫升使用MLflow庫:

進口mlflow.azureml
              model_image azure_model = mlflow.azureml.build_image (model_uri = model_uri,工作區=工作區,model_name = model_name +“-”+階段,image_name = model_name +“-”+階段+“圖像”,描述= model_name,標簽= {“阿爾法”:str(latest_sk_model.alpha),“l1_ratio”:str(latest_sk_model.l1_ratio),},同步=真正的)

這將創建一個容器的形象在Azure毫升工作區。下麵是生成的視圖在Azure毫升工作區:

試樣容器在ML工作區創建形象通過代碼在Azure磚筆記本。

下一步是創建一個部署提供一個REST API:

與必要的REST API創建通過代碼示例部署在Azure磚筆記本。

這個筆記本的執行需要大約10 - 12分鍾。executenotebook。py Azure DevOps環境提供了所有的代碼,允許等到Azure毫升部署任務已經完成。它會檢查每10秒如果工作仍在運行,如果確實是回到睡眠。當模型成功地部署到Azure ML,筆記本將返回的URL生成的模型REST API。這將進一步使用REST API來測試如果模型是正確得分值。

當管道運行時,用戶可以監控進展。屏幕截圖顯示之間的API調用,然後10秒等待調用。

示例部署毫升模型執行AzureML從Azure磚筆記本。

下一步是執行測試的筆記本。像前一步驟觸發executenotebook。py代碼和通過測試筆記本的名稱(“test_api”)以及前一步的REST API。

任務:PythonScript@0輸入:scriptSource:“filePath”scriptPath:“$ (Build.Repository.LocalPath) / cicd-scripts / executenotebook.py”參數:”——碎片(DATABRICKS_HOST)——令牌美元(DATABRICKS_TOKEN)——集群(EXISTING_CLUSTER_ID)——localpath (Build.Repository.LocalPath)美元/筆記本電腦/用戶/(電子郵件保護)/毫升/測試——workspacepath /演示/測試outfilepath /home/vsts/work/1/s/notebooks/Users/(電子郵件保護)- - - params model_name = $ (model_name) scoring_uri = $(響應)displayName:“從注冊表對REST API測試MLflow模型”

測試代碼可以是簡單或複雜的。的“test_api”筆記本僅僅使用一個記錄從最初的訓練數據和提交通過REST API模型從Azure毫升。如果它返回一個有意義的值測試被認為是成功的。一個更好的方法來測試將定義一組預期結果使用API和使用更大的組記錄。

步驟10到13:促進毫升模型來生產

給定一個成功的測試,需要隨後發生的兩件事:

  1. MLflow模型中的模型注冊應該提升到“生產”,這將告訴比利和其他數據科學家在使用模型是最新生產模型。
  2. 該模型需要在Azure毫升本身投入生產。

下一步將照顧的第一步。它使用托管在Azure磚MLflow REST API。使用該API,可以提升(使用mlflow模型。py腳本在Dev Ops) w / o在Azure磚本身執行任何代碼。它隻需要幾秒鍾。

這個腳本可以促進最新的模型與名字分期投入生產

這個腳本可以促進最新的模型名字的分期投入生產進口importlib pprint, json,操作係統mlflow_http_client進口MlflowHttpClient、get_host get_token進口pprint
              客戶= MlflowHttpClient(主機= get_host(),令牌= get_token ())頁= pprint.PrettyPrinter(縮進=4)model_name = os.environ.get (“MODEL_NAME”)打印(”模式的名字是:“+ model_name)負責= client.get (“registered-models / get-latest-versions ? name = "+ model_name +“階段=分期”)如果len(負責)> =1:version =負責(“model_versions”][0][“版本”]其他的:提高BaseException (沒有分段模型模型命名為:“+ model_name)結果=負責(“model_versions”][0][“版本”]data = {“名稱”:model_name,“版本”:版本,“舞台”:“生產”,“archive_existing_versions”:}負責= client.post (“模型版本/過渡階段”、數據)pp.pprint(負責)響應=負責(“model_version”][“版本”]打印(返回值是:“+反應)打印(“# # vso[任務。setvariable變量=反應;]% s的%(響應))

我們可以用Azure磚模型驗證UI,這確實發生了:我們可以看到,有一個新的生產水平模型(版本4)。邊注,雖然有可能有多個模型在生產,我們不認為好的做法,所以所有其他生產版本應該存檔(MLflow提供自動啟用這個特性通過設置archive_existing_versions = true)。

示例毫升模型部署到生產環境中執行AzureML從Azure磚筆記本。

下一步是簡單重複步驟4到11。我們將在Azure毫升和重新部署模型表明,這是生產環境。請注意,Azure DevOps有一組獨立的部署管道中我們不使用這個博客是為了讓事情更簡單。

討論

這篇文章展示了如何MLLC可以自動通過使用Azure磚,Azure DevOps和Azure毫升。它展示了不同的方式在Azure磚可以集成不同的服務使用磚REST API,筆記本和磚CLI。參見下麵的三個筆記本中引用這個博客的鏈接

問題或意見,請聯係(電子郵件保護)

免費試著磚

相關的帖子

看到所有工程的博客的帖子
Baidu
map