Azure Machine Learning 環境是什麼?
Azure Machine Learning 環境是您機器學習定型發生所在環境的封裝。 這些環境指定關於定型和評分指令碼的 Python 封裝、環境變數和軟體設定。 封裝也會指定執行時間 (Python、Spark 或 Docker)。 這些環境是 Machine Learning 工作區內受控和版本化的實體,可在各種計算目標之間啟用可重現、可稽核且可攜式機器學習工作流程。
Environment
物件在本機計算上的用途:
- 開發您的訓練指令碼。
- 在 Azure Machine Learning Compute 中重複使用相同的環境,以進行大規模的模型訓練。
- 使用該相同環境來部署模型。
- 重回已定型現有模型的環境。
下圖說明如何在作業組態 (用於定型) 及推斷和部署組態 (用於 Web 服務部署) 中使用單一 Environment
物件。
環境、計算目標和定型指令碼一起形成作業組態:定型作業的完整規格。
環境的類型
環境可大致分為三種類別:策展、使用者管理和系統管理。
策展環境由 Azure Machine Learning 提供,依預設在工作區中可用。 主要是依原樣使用,含有 Python 封裝和設定的集合,協助您開始使用各種機器學習架構。 這些預先建立的環境也能加快部署時間。 如需完整清單,請參閱策展環境文章。
在使用者管理的環境中,您負責設定環境,並在計算目標上安裝定型指令碼所需的每個封裝。 也請務必包含模型部署所需的任何相依性。
希望 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 映像和 Conda 環境中。 也會快取環境,以重複用於後續的定型作業和服務端點部署。 從遠端執行定型指令碼需要建立 Docker 映像,但本機作業可以直接使用 Conda 環境。
使用環境提交作業
當您第一次使用環境提交遠端作業時,Azure Machine Learning 服務會在與工作區相關的 Azure Container Registry (ACR) 上叫用 ACR 組建工作。 然後,組建的 Docker 映像會快取在工作區 ACR 上。 全域 ACR 中快取的 Docker 映像支援策展環境。 開始執行作業時,系統會從相關 ACR 的計算目標擷取映像。
若是本機作業,將會根據環境定義建立 Docker 或 Conda 環境。 然後在目標計算上執行指令碼 - 本機執行階段環境或本機 Docker 引擎。
將環境組建為 Docker 映像
如果工作區 ACR 中尚無特定環境定義的映像,則會組建新的映像。 組建映像包含兩個步驟:
- 下載基礎映像,並執行任何 Docker 步驟
- 根據環境定義中指定的 Conda 相依性來組建 Conda 環境。
第二個步驟為選用,環境可能會改為來自 Docker 組建內容或基礎映像。 在此情況下,您負責將 Python 封裝加入基礎映像中,或指定自訂 Docker 步驟,以安裝任何 Python 封裝。 您也負責指定 Python 可執行檔的正確位置。 您也可以使用自訂 Docker 基礎映像。
快取和重複使用映像
如果您將相同的環境定義用於另一個作業,Azure Machine Learning 會從工作區 ACR 重複使用快取的映像,以節省時間。
若要檢視快取映像的詳細資料,請參閱 Azure Machine Learning 工作室的 [環境] 頁面,或使用 MLClient.environments
,取得或檢查環境。
若要判斷是否要重複使用快取映射或建置新的映射,Azure Machine Learning 會從環境定義計算 雜湊值 ,並將其與現有環境的雜湊進行比較。 雜湊是以環境定義的一些資料為基礎:
- Base image
- 自訂 Docker 映像
- Python 套件
- Spark 封裝
雜湊不受環境名稱或版本所影響。 如果您重新命名環境,或使用另一個環境的相同設定和封裝來建立新環境,則雜湊值維持不變。 不過,如果變更環境定義,例如新增或移除 Python 封裝或變更封裝版本,則會導致產生的雜湊值改變。 變更環境中的相依性或通道順序也會變更雜湊,將需要新的映像組建。 同樣地,策展環境的任何變更會導致建立新的「非策展」環境。
注意
除非變更環境名稱,否則無法提交策展環境的任何本機變更。 前置詞 "AzureML-" 和 "Microsoft" 專門保留給策展環境,如果名稱以其中之一開頭,則作業提交會失敗。
環境的計算雜湊值會與工作區和全域 ACR 中的雜湊值相比較,或與計算目標上的雜湊值相比較 (僅限本機作業)。 如果相符,則會提取並使用快取的映像,否則會觸發映像組建。
下圖顯示三個環境定義。 其中兩個有不同的名稱和版本,但有相同的基礎映像和 Python 封裝,因此產生相同的雜湊和對應的快取映像。 第三個環境有不同的 Python 封裝和版本,導致產生不同的雜湊和快取映像。
工作區 ACR 中實際快取的映像有類似 azureml/azureml_e9607b2514b066c851012848913ba19f
的名稱,結尾出現雜湊。
重要
如果您以取消釘選的封裝相依性 (例如
numpy
) 建立環境,則環境會使用「建立環境時可用的」封裝版本。 使用相符定義的任何未來環境會使用原始版本。若要更新封裝,請指定版本號碼以強制映像重建。 例如,將
numpy
變更為numpy==1.18.1
。 將會安裝新的相依性 (包括巢狀相依性),可能中斷先前可運作的情節。如果在環境定義中使用取消釘選的基礎映像,例如
mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04
,則會導致每次更新latest
標籤都重建映像。 這有助於映像接收最新的修補檔和系統更新。zzs
映像修補
Microsoft 負責修補基礎映像以解決已知的安全性弱點。 更新支援的映射會每隔兩周發行一次,承諾在最新版映射中沒有未修補的弱點超過 30 天。 修補的映像以新的不可變標籤發行,:latest
標籤會更新為修補映像的最新版本。
如果您提供自己的映像,則要負責更新。
如需基礎映像的詳細資訊,請參閱下列連結:
- Azure Machine Learning 基礎映像 GitHub 存放庫。
- 使用自訂容器將模型部署至線上端點