Azure Machine Learning 環境是什麼?

Azure Machine Learning 環境是您機器學習訓練所執行環境的封裝。 他們會指定訓練和評分腳本周圍的 Python 套件和軟體設定。 這些環境是在 機器學習 工作區中管理和版本設定的實體,可在各種計算目標之間啟用可重現、可稽核和可攜式機器學習工作流程。

您可以使用 Environment 物件來:

  • 開發您的定型腳本。
  • 在 Azure 機器學習 Compute 上重複使用相同的環境,以進行大規模模型定型。
  • 使用相同的環境部署您的模型。
  • 重新流覽已定型現有模型的環境。

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

Diagram of an environment in machine learning workflow

環境、計算目標和定型腳本會共同組成作業組態:定型作業的完整規格。

環境類型

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

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

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

當您想要 conda 為您管理 Python 環境時,您可以使用系統管理環境。 新的 conda 環境會從基底 Docker 映像上的 conda 規格具體化。

建立與管理環境

您可以從 Azure 機器學習 Python SDK、Azure 機器學習 CLI、Azure Machine Learning 工作室 中的 [環境] 頁面和 VS Code 擴充功能等用戶端建立環境。 每個用戶端都可讓您視需要自定義基底映像、Dockerfile 和 Python 層。

如需特定程式代碼範例,請參閱如何使用環境的一節

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

  • 註冊環境。
  • 從工作區擷取環境,以用於定型或部署。
  • 藉由編輯現有的實例來建立環境的新實例。
  • 檢視一段時間內環境變更,以確保重現性。
  • 從您的環境自動建置 Docker 映像。

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

如需程式代碼範例,請參閱如何使用環境的一節

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

Azure 機器學習 會將環境定義建置至 Docker 映射。 它也會快取環境,以便在後續的定型作業和服務端點部署中重複使用它們。 從遠端執行定型腳本需要建立 Docker 映像。 根據預設,如果工作區沒有針對工作區設定專用的計算,AzureML 會在可用的工作區 無伺服器計算配額 上管理映射建置目標。

注意

AzureML 工作區中的任何網路限制可能需要專用的使用者受控映射組建計算設定。 請遵循步驟來保護 工作區資源

使用環境提交作業

當您第一次使用環境或手動建立環境實例提交遠端作業時,Azure 機器學習 會建置所提供規格的映像。 結果映像會在與工作區相關聯的容器登錄實例中快取。 已快取 AzureML 登錄中的策展環境。 在作業執行開始時,計算目標會從相關的容器登錄擷取映像。

將環境建置為 Docker 映像

如果特定環境定義的映像尚未存在於與 AzureML 工作區相關聯的容器登錄實例中,則會建置新的映像。 針對系統管理的環境,映射組建包含兩個步驟:

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

針對使用者管理的環境,提供的 Docker 內容將會依目前方式建置。 在此情況下,您必須負責安裝任何 Python 套件,方法是將它們包含在基底映射中,或指定自定義 Docker 步驟。

映像快取和重複使用

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

若要檢視快取映像的詳細數據,請檢查 Azure Machine Learning 工作室 中的 [環境] 頁面,或使用 MLClient.environments 來取得及檢查環境。

若要判斷是否要重複使用快取映射或建置新的映像,Azure 機器學習 會從環境定義計算哈希值,並將其與現有環境的哈希進行比較。 哈希會作為環境的唯一標識符,並且以環境定義的 為基礎:

  • 基底映像
  • 自訂 Docker 步驟
  • Python 套件

哈希不會受到環境名稱或版本的影響。 如果您重新命名環境,或建立與另一個環境相同的設定和套件的新環境,則哈希值會維持不變。 不過,環境定義變更,例如新增或移除 Python 套件,或變更套件版本會變更產生的哈希值。 變更環境中的相依性或通道順序也會變更哈希,而且需要新的映射建置。 同樣地,對策劃環境所做的任何變更都會導致建立自定義環境。

注意

您將無法在不變更環境名稱的情況下,將任何本機變更提交至策劃的環境。 前置詞 “AzureML-” 和 “Microsoft” 會專門保留給策劃環境,如果名稱開頭為其中之一,則您的作業提交將會失敗。

環境的計算哈希值會與工作區容器登錄中的哈希值進行比較。 如果有相符專案,則會提取並使用快取的映像,否則會觸發映射組建。

下圖顯示三個環境定義。 其中兩個有不同的名稱和版本,但相同的基底映像和 Python 套件,這會導致相同的哈希和對應的快取映像。 第三個環境有不同的 Python 套件和版本,導致不同的哈希和快取映像。

Diagram of environment caching and Docker images

工作區容器登錄中實際快取的映像名稱與 azureml/azureml_e9607b2514b066c851012848913ba19f 結尾出現的哈希類似。

重要

  • 如果您使用未釘選的套件相依性建立環境(例如numpy,),環境會使用建立環境時可用的套件版本。 任何使用比對定義的未來環境都會使用原始版本。

    若要更新套件,請指定版本號碼以強制重建映像。 其中一個範例會變更 numpynumpy==1.18.1。 將會安裝新的相依性,包括巢狀相依性,而且可能會中斷先前運作的案例。

  • 使用未釘選的基底映射,就像在環境定義中一樣 mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 ,可能會導致每次更新標記時 latest 重建映像。 這有助於映像接收最新的修補程式和系統更新。

映射修補

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

您必須更新相關聯的 Azure 機器學習 資產,才能使用新修補的映像。 例如,使用受控在線端點時,您必須重新部署端點以使用已修補的映像。

如果您提供自己的映像,您必須負責更新映像,以及更新使用這些映射的 Azure 機器學習 資產。

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

下一步