Azure Machine Learning 環境是什麼?
Azure 機器學習 環境是機器學習訓練或推斷發生所在的環境封裝。 這些環境指定關於訓練和評分指令碼的 Python 套件和軟體設定。 這些環境是 Machine Learning 工作區內受控和版本化的實體,可使機器學習工作流程在各種計算目標之間重現、稽核且可攜。 您可以使用 Environment
物件來執行下列動作:
- 開發您的訓練指令碼。
- 在 Azure Machine Learning Compute 中重複使用相同的環境,以進行大規模的模型訓練。
- 使用該相同環境來部署模型。
- 重回已定型現有模型的環境。
下圖說明如何在作業組態 (用於定型) 及推斷和部署組態 (用於 Web 服務部署) 中使用單一 Environment
物件。
環境、計算目標和訓練指令碼一起形成作業組態:訓練作業的完整規格。
環境類型
環境可大致分為三種類別:策展、使用者管理和系統管理。
策展環境由 Azure Machine Learning 提供,依預設在工作區中可用。 主要是依原樣使用,含有 Python 封裝和設定的集合,協助您開始使用各種機器學習架構。 這些預先建立的環境也能加快部署時間。 策劃的環境裝載在 AzureML 登錄中,這是由 Microsoft 所裝載的機器學習登錄。 如需完整清單,請參閱 AzureML 登錄中的環境。
在使用者管理的環境中,您負責設定環境,並在計算目標上安裝定型指令碼所需的每個封裝。 也請務必包含模型部署所需的任何相依性。 使用者管理的環境可以是 BYOC(自備容器)或 Docker 建置內容,以將映像具體化委派給 Azure 機器學習。 與策展環境類似,您可以使用您所建立和管理的 機器學習登錄 ,跨工作區共用使用者管理的環境。
希望 Conda 為您管理 Python 環境時,請使用系統管理的環境。 新的 Conda 環境是在基礎 Docker 映像上從 Conda 規格具體化。
建立與管理環境
您可以從 Azure 機器學習 Python SDK、Azure 機器學習 CLI、Azure Machine Learning 工作室 和 VS Code 擴充功能建立環境。 每個用戶端都可讓您視需要自訂基礎映像、Dockerfile 和 Python 層。
如需特定的程式碼範例,請參閱如何使用環境的「建立環境」一節。
透過工作區也可以輕鬆管理環境,讓您能夠:
- 註冊環境。
- 從工作區擷取環境來用於定型或部署。
- 編輯現有環境來建立環境的新執行個體。
- 檢視環境經過一段時間的變更,以確保重現性。
- 從環境自動組建 Docker 映像。
當您提交實驗時,自動會在工作區中註冊「匿名」環境。 它們並未列出,但您可以使用版本來擷取它們。
如需程式碼範例,請參閱如何使用環境的「管理環境」一節。
組建、快取和重複使用環境
Azure Machine Learning 會將環境定義組建至 Docker 映像。 也會快取環境,以重複用於後續的定型作業和服務端點部署。 遠端執行定型指令碼需要建立 Docker 映像。 根據預設,如果工作區沒有針對工作區設定專用的計算,Azure 機器學習 會在可用的工作區無伺服器計算配額上管理映像建置目標。
注意
Azure 機器學習 工作區中的任何網路限制可能需要專用的使用者受控映像建置計算設定。 請遵循步驟以保護工作區資源。
使用環境提交作業
當您使用環境第一次提交遠端作業,或是手動建立環境執行個體時,Azure Machine Learning 會針對所提供的規格建立映像。 結果映像會快取至與工作區相關聯的容器登錄執行個體中。 已快取 Azure 機器學習 登錄中的策展環境。 在作業執行開始時,計算目標會從相關的容器登錄擷取映像。
將環境組建為 Docker 映像
如果特定環境定義的映像尚未存在於與 Azure 機器學習 工作區相關聯的容器登錄實例中,則會建置新的映像。 若是系統管理環境,映像的建立包含兩個步驟:
- 下載基礎映像,並執行任何 Docker 步驟
- 根據環境定義中指定的 Conda 相依性來組建 Conda 環境。
針對使用者受控環境,提供和目前一樣建置的 Docker 內容。 在此情況下,您負責將 Python 封裝加入基礎映像中,或指定自訂 Docker 步驟,以安裝任何 Python 封裝。
快取和重複使用映像
如果您針對另一個作業使用相同的環境定義,Azure Machine Learning 會重複使用來自與您的工作區相關聯之容器登錄的已快取映像。
若要檢視快取映像的詳細資料,請參閱 Azure Machine Learning 工作室的 [環境] 頁面,或使用 MLClient.environments
,取得或檢查環境。
若要判斷是否要重複使用快取映像或建置新的映像,Azure 機器學習 會從環境定義計算哈希值。 然後,它會比較哈希與現有環境的哈希。 雜湊值會作為環境的唯一識別碼,而且以環境定義的下列項目為基礎:
- 基礎映像
- 自訂 Docker 映像
- Python 套件
環境名稱和版本對哈希沒有任何影響。 如果您重新命名環境,或使用與另一個環境相同的設定和封裝來建立新環境,則雜湊值會維持不變。 不過,如果變更環境定義,例如新增或移除 Python 封裝或變更封裝版本,則會變更產生的雜湊值。 變更環境中的相依性或通道順序會變更哈希,而且需要新的映射建置。 同樣地,對策展環境所做的任何變更都會導致建立自訂環境。
注意
除非變更環境名稱,否則無法提交策展環境的任何本機變更。 前置詞 "AzureML-" 和 "Microsoft" 專門保留給策展環境,如果名稱以其中之一開頭,則作業提交會失敗。
環境的計算哈希值會與工作區容器登錄中的哈希進行比較。 如果有相符專案,則會提取並使用快取的映像,否則會觸發映射組建。
下圖顯示三個環境定義。 其中兩個具有不同的名稱和版本,但相同的基底映像和 Python 套件,這會導致相同的哈希和對應的快取映像。 第三個環境有不同的 Python 封裝和版本,導致產生不同的雜湊和快取映像。
工作區容器登錄中實際快取的映像名稱與 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 資產。
如需基礎映像的詳細資訊,請參閱下列連結:
- Azure Machine Learning 基礎映像 GitHub 存放庫。
- 使用自訂容器將模型部署至線上端點
- 管理環境和容器映像