分享方式:


Azure Machine Learning 環境是什麼?

Azure Machine Learning 環境是您機器學習定型發生所在環境的封裝。 這些環境指定關於定型和評分指令碼的 Python 套件和軟體設定。 這些環境是 Machine Learning 工作區內受控和版本化的實體,可使機器學習工作流程在各種計算目標之間重現、稽核且可攜。

您可以使用 Environment 物件來執行下列動作:

  • 開發您的訓練指令碼。
  • 在 Azure Machine Learning Compute 中重複使用相同的環境,以進行大規模的模型訓練。
  • 使用該相同環境來部署模型。
  • 重回已定型現有模型的環境。

下圖說明如何在作業組態 (用於定型) 及推斷和部署組態 (用於 Web 服務部署) 中使用單一 Environment 物件。

機器學習工作流程中的環境圖表

環境、計算目標和定型指令碼一起形成作業組態:定型作業的完整規格。

環境類型

環境可大致分為三種類別:策展、使用者管理和系統管理

策展環境由 Azure Machine Learning 提供,依預設在工作區中可用。 主要是依原樣使用,含有 Python 封裝和設定的集合,協助您開始使用各種機器學習架構。 這些預先建立的環境也能加快部署時間。 策展環境裝載於 AzureML 登錄。 如需完整清單,請參閱 azureml 登錄中的環境

在使用者管理的環境中,您負責設定環境,並在計算目標上安裝定型指令碼所需的每個封裝。 也請務必包含模型部署所需的任何相依性。 使用者管理環境可以是 BYOC (自備容器),或是以將映像具體化委派給 AzureML 為基礎的 Docker 組建內容。

希望 Conda 為您管理 Python 環境時,請使用系統管理的環境。 新的 Conda 環境是在基礎 Docker 映像上從 Conda 規格具體化。

建立與管理環境

您可以從用戶端建立環境,例如 Azure Machine Learning Python SDK、Azure Machine Learning CLI、Azure Machine Learning 工作室的 [環境] 頁面,以及 VS Code 擴充功能。 每個用戶端都可讓您視需要自訂基礎映像、Dockerfile 和 Python 層。

如需特定的程式碼範例,請參閱如何使用環境的「建立環境」一節。

透過工作區也可以輕鬆管理環境,讓您能夠:

  • 註冊環境。
  • 從工作區擷取環境來用於定型或部署。
  • 編輯現有環境來建立環境的新執行個體。
  • 檢視環境經過一段時間的變更,以確保重現性。
  • 從環境自動組建 Docker 映像。

當您提交實驗時,自動會在工作區中註冊「匿名」環境。 這種環境不會列出,但可依版本擷取。

如需程式碼範例,請參閱如何使用環境的「管理環境」一節。

組建、快取和重複使用環境

Azure Machine Learning 會將環境定義組建至 Docker 映像。 也會快取環境,以重複用於後續的定型作業和服務端點部署。 遠端執行定型指令碼需要建立 Docker 映像。 根據預設,如果工作區沒有專用的計算集,AzureML 會在可用工作區的無伺服器計算配額上管理映像組建目標。

注意

AzureML 工作區中的任何網路限制可能都需要專用的計算設定,以用於使用者管理的映像組建。 請遵循步驟以保護工作區資源

使用環境提交作業

當您使用環境第一次提交遠端作業,或是手動建立環境執行個體時,Azure Machine Learning 會針對所提供的規格建立映像。 結果映像會快取至與工作區相關聯的容器登錄執行個體中。 AzureML 登錄中已有快取的策展環境。 開始執行作業時,計算目標會從相關聯的容器登錄擷取映像。

將環境組建為 Docker 映像

在與 AzureML 工作區相關聯的容器登錄執行個體中,如果特定環境定義的映像尚未存在,則會建立新的映像。 若是系統管理環境,映像的建立包含兩個步驟:

  1. 下載基礎映像,並執行任何 Docker 步驟
  2. 根據環境定義中指定的 Conda 相依性來組建 Conda 環境。

若是使用者管理環境,則會依原樣建立所提供的 Docker 內容。 在此情況下,您負責將 Python 封裝加入基礎映像中,或指定自訂 Docker 步驟,以安裝任何 Python 封裝。

快取和重複使用映像

如果您針對另一個作業使用相同的環境定義,Azure Machine Learning 會重複使用從相關聯工作區的容器登錄中快取的映像。

若要檢視快取映像的詳細資料,請參閱 Azure Machine Learning 工作室的 [環境] 頁面,或使用 MLClient.environments,取得或檢查環境。

為了決定重複使用快取映像還是組建新映像,Azure Machine Learning 會從環境定義計算雜湊值,並與現有環境的雜湊相互比較。 雜湊值作為環境的唯一識別碼,以環境定義的下列項目為基礎:

  • 基礎映像
  • 自訂 Docker 映像
  • Python 套件

雜湊不受環境名稱或版本所影響。 如果您重新命名環境,或使用另一個環境的相同設定和封裝來建立新環境,則雜湊值會維持不變。 不過,如果變更環境定義,例如新增或移除 Python 封裝或變更封裝版本,則會變更產生的雜湊值。 變更環境中的相依性或通道順序也會變更雜湊,將需要新的映像組建。 同樣地,對策展環境所做的任何變更都會導致建立自訂環境。

注意

除非變更環境名稱,否則無法提交策展環境的任何本機變更。 前置詞 "AzureML-" 和 "Microsoft" 專門保留給策展環境,如果名稱以其中之一開頭,則作業提交會失敗。

環境的已計算雜湊值會與工作區容器登錄中的雜湊值相比較。 若相符,則會提取並使用快取的映像,否則會觸發映像的建立。

下圖顯示三個環境定義。 其中兩個有不同的名稱和版本,但有相同的基礎映像和 Python 封裝,因此產生相同的雜湊和對應的快取映像。 第三個環境有不同的 Python 封裝和版本,導致產生不同的雜湊和快取映像。

環境快取與 Docker 映像的圖表

工作區容器登錄中實際快取的映像名稱與 azureml/azureml_e9607b2514b066c851012848913ba19f 類似,結尾處顯示雜湊值。

重要

  • 如果您以取消釘選的封裝相依性 (例如 numpy) 建立環境,則環境會使用「建立環境時可用的」封裝版本。 使用相符定義的任何未來環境會使用原始版本。

    若要更新封裝,請指定版本號碼以強制映像重建。 例如,將 numpy 變更為 numpy==1.18.1。 將會安裝新的相依性 (包括巢狀相依性),可能中斷先前可運作的情節。

  • 在環境定義中使用取消固定的基礎映像,例如 mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04,可能會導致 latest 標記每次更新時都要重新建立映像。 這有助於映像接收最新的修補檔和系統更新。

映像修補

Microsoft 負責修補基礎映像以解決已知的安全性弱點。 每兩週為支援的映像發行一次更新,承諾最新版的映像中不會有超過 30 天未修補的弱點。 修補的映像以新的不可變標籤發行,:latest 標籤會更新為修補映像的最新版本。

您必須更新相關聯的 Azure Machine Learning 資產,才能使用新修補的映像。 例如,使用受控線上端點時,您必須重新部署端點,才能使用已修補的映像。

若您提供自己的映像,則必須負責更新映像,以及更新使用這些映像的 Azure Machine Learning 資產。

如需基礎映像的詳細資訊,請參閱下列連結:

下一步