設定並提交定型作業
適用於: Python SDK azureml v1 (部分機器翻譯)
在此文章中,您將了解如何設定和提交 Azure Machine Learning 作業以將模型定型。 程式碼片段會說明設定和提交訓練指令碼的重點部分。 接著使用其中一個範例筆記本以找出完整的端對端工作範例。
訓練時,通常會從您的本機電腦開始,接著再擴增至雲端式叢集。 使用 Azure Machine Learning 時,您無須變更訓練指令碼,即可在各種計算目標上執行指令碼。
您需要做的是在指令碼作業組態內為每個計算目標定義環境。 然後,當您想要在不同的計算目標上執行定型實驗時,為該計算指定作業組態。
必要條件
- 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。 立即試用免費或付費版本的 Azure Machine Learning
- 適用於 Python 的 Azure Machine Learning SDK(v1) (>= 1.13.0)
- Azure Machine Learning 工作區,
ws
- 計算目標,
my_compute_target
。 建立計算目標
什麼是指令碼回合組態?
ScriptRunConfig 可用來設定提交訓練作業作為實驗一部分的必要資訊。
您可以使用 ScriptRunConfig 物件提交訓練實驗。 此物件包含:
- source_directory:包含定型指令碼的來源目錄
- script:要執行的訓練指令碼
- compute_target:要在上面執行的計算目標
- environment:執行指令碼時使用的環境
- 以及一些其他可設定的選項 (如需詳細資訊,請參閱參考文件)
定型您的模型
提交定型作業的程式碼模式對於所有類型的計算目標皆相同:
- 建立要執行的實驗
- 建立指令碼執行的環境
- 建立 ScriptRunConfig 以指定計算目標和環境
- 提交作業
- 請等待作業完成
或者您可以:
- 提交用於超參數微調的 HyperDrive 回合。
- 透過 VS Code 擴充功能來提交實驗。
建立實驗
在您的工作區中建立實驗。 實驗是一種輕量型容器,有助於安排執行作業並追蹤程式碼。
適用於: Python SDK azureml v1 (部分機器翻譯)
from azureml.core import Experiment
experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)
選取計算目標
選取將要執行訓練指令碼的計算目標。 如果 ScriptRunConfig 中未指定任何計算目標,或是如果 compute_target='local'
,則 Azure Machine Learning 會在本機執行您的指令碼。
本文中的範例程式碼假設您已在「必要條件」一節中建立計算目標 my_compute_target
。
注意
- Azure Databricks 不支援做為模型訓練的計算目標。 您可以使用 Azure Databricks 進行資料準備和部署工作。
- 若要在已啟用 Azure Arc 的 Kubernetes 叢集上建立和連結計算目標以進行定型,請參閱設定已啟用 Azure Arc 的機器學習
建立環境
Azure Machine Learning 環境是您機器學習訓練所執行環境的封裝。 這些封裝會針對您的訓練和評分指令碼指定 Python 套件、Docker 映像、環境變數和軟體設定。 封裝也會指定執行時間 (Python、Spark 或 Docker)。
您可以定義自己的環境,或使用 Azure Machine Learning 經過編選的環境。 已編選環境是預先定義的環境,預設在您的工作區中提供。 這些環境是由快取的 Docker 映像所支援,可降低作業準備成本。 如需已編選環境的完整可用清單,請參閱 Azure Machine Learning 經過編選的環境。
針對遠端計算目標,您可以使用下列其中一個常用的已編選環境來開始作業:
適用於: Python SDK azureml v1 (部分機器翻譯)
from azureml.core import Workspace, Environment
ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")
如需有關環境的詳細資訊,請參閱在 Azure Machine Learning 中建立和使用軟體環境 (部分機器翻譯)。
本機計算目標
如果您的計算目標是您的本機電腦,您必須負責確保執行指令碼的 Python 環境中具備所有必要套件。 使用 python.user_managed_dependencies
以使用您目前的 python 環境,或是您指定路徑上的 Python。
適用於: Python SDK azureml v1 (部分機器翻譯)
from azureml.core import Environment
myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True
# You can choose a specific Python environment by pointing to a Python path
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'
建立指令碼作業組態
現在您有計算目標 (my_compute_target
,請參閱必要條件 (部分機器翻譯)) 和環境 (myenv
,請參閱建立環境 (部分機器翻譯)),建立指令碼作業組態以執行位於您 project_folder
目錄的訓練指令碼 (train.py
):
適用於: Python SDK azureml v1 (部分機器翻譯)
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory=project_folder,
script='train.py',
compute_target=my_compute_target,
environment=myenv)
如果您未指定環境,系統會建立預設環境。
如果您有想要傳遞給訓練指令碼的命令列引數,您可以透過 ScriptRunConfig 函式的 arguments
參數指定這些引數,例如 arguments=['--arg1', arg1_val, '--arg2', arg2_val]
。
如果您想要覆寫作業所允許的預設最大時間,可以透過 max_run_duration_seconds
參數進行。 如果作業所花費的時間超過此值,系統會嘗試自動取消執行。
指定分散式作業設定
如果您想執行分散式訓練作業,請向 distributed_job_config
參數提供分散式作業特定的設定。 支援的設定類型包括 MpiConfiguration、TensorflowConfiguration 和 PyTorchConfiguration。
如需執行分散式 Horovod、TensorFlow 和 PyTorch 作業的詳細資訊和範例,請參閱:
- 在 Azure 上深度學習模型的分散式訓練 (部分機器翻譯)
提交實驗
run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)
重要
當您提交定型作業時,系統將會對包含定型指令碼的目錄建立快照集,並傳送到計算目標。 其也會儲存為工作區中實驗的一部分。 如果您變更檔案並再次提交作業,則只會上傳已變更的檔案。
若要避免在快照中包含不必要的檔案,請在目錄中建立忽略檔案 (.gitignore
或 .amlignore
)。 將要排除的檔案和目錄新增到這個檔案中。 如需此檔案中可用語法的詳細資訊,請參閱 .gitignore
的語法和模式。 .amlignore
檔案會使用相同的語法。 如果兩個檔案都存在,則會使用 .amlignore
檔案,不會使用 .gitignore
檔案。
如需有關快照集的更多資訊,請參閱快照集。
重要
特殊資料夾 Azure Machine Learning 會特別對待 outputs 與 logs, 這兩個資料夾。 在定型期間,當您將檔案寫入到相對於根目錄且名為 outputs 與 logs 的資料夾 (分別是 ./outputs
與 ./logs
) 時,這些檔案會自動上傳到作業歷程記錄,因此當您的作業完成之後,您就能存取檔案。
若要在定型期間建立成品 (例如模型檔案、檢查點、資料檔案或繪製的影像),請將這些成品寫入到 ./outputs
資料夾。
同樣地,您也可以將來自您定型作業的任何記錄寫入到 ./logs
資料夾。 若要利用 Azure Machine Learning 的 TensorBoard 整合,請務必將您的 TensorBoard 記錄寫入到此資料夾。 當您的作業在執行時,您將能啟動 TensorBoard 並串流這些記錄。 稍後,您也可以從任何先前的作業還原記錄。
例如,若要在您的遠端定型作業執行完成之後將寫入到 outputs 資料夾的檔案下載到您的本機電腦,請執行:run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')
Git 追蹤與整合
當您啟動來源目錄是本機 Git 存放庫的定型作業時,該存放庫的相關資訊會儲存在作業歷程記錄中。 如需詳細資訊,請參閱 Azure Machine Learning 的 Git 整合。
筆記本範例
請參閱這些筆記本,以取得設定各種訓練案例作業的範例:
了解如何依照使用 Jupyter 筆記本來探索這項服務一文來執行筆記本。
疑難排解
AttributeError: 'RoundTripLoader' 物件沒有屬性 'comment_handling':此錯誤來自
ruamel-yaml
的新版本 (v0.17.5),azureml-core
相依性,將中斷性變更導入了azureml-core
。 為修正此錯誤,請執行pip uninstall ruamel-yaml
以解除安裝ruamel-yaml
,並安裝ruamel-yaml
的其他版本;支援的版本為 v0.15.35 到 v0.17.4 (包含)。 您可以執行pip install "ruamel-yaml>=0.15.35,<0.17.5"
來達成此目的。作業發生
jwt.exceptions.DecodeError
失敗:確切的錯誤訊息:jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode()
。請考慮升級至 azureml 核心的最新版本:
pip install -U azureml-core
。如果 . 如果您在本機作業時遇到此問題,請在啟動作業的環境中檢查所安裝 PyJWT 版本。 您正在啟動作業。 支援的 PyJWT 版本為 < 2.0.0。 如果版本是 >= 2.0.0,請從環境中解除安裝 PyJWT。 您可以檢查 PyJWT 版本、將其解除安裝並安裝正確的版本,如下所示:
- 啟動命令殼層,並啟用已安裝 azureml-core 的 conda 環境。
- 輸入
pip freeze
並尋找PyJWT
,如果找到,則列出的版本應為 < 2.0.0 - 如果列出的版本不是支援的版本,請在命令殼層中執行
pip uninstall PyJWT
,並輸入 y 以確認。 - 使用
pip install 'PyJWT<2.0.0'
進行安裝
如果 . 您正在使用您的作業提交使用者建立的環境,請考慮在該環境中使用最新版本的 azureml-core。 版本 >= 1.18.0 的 azureml-core 已鎖定 PyJWT < 2.0.0。 如果您需要在您提交的環境中使用 < 1.18.0 的 azureml-core 版本,請務必在您的鎖定相依性中指定 PyJWT < 2.0.0。
ModuleErrors (未命名的模組):如果 您在 Azure Machine Learning 中提交實驗時遇到 ModuleErrors,表示訓練腳本預期會安裝套件,但卻未新增。 提供套件名稱之後,Azure Machine Learning 會在用於訓練作業的環境中安裝套件。
如果 . 你正在使用估算器來提交實驗,您可以根據您要安裝套件的來源,在估算器中透過
pip_packages
或conda_packages
參數指定套件名稱。 您也可以使用conda_dependencies_file
指定具有所有相依性的 yml 檔案,或使用pip_requirements_file
參在 txt 檔案中列出所有 pip 需求。 如果您有自己的 Azure Machine Learning 環境物件,而您想要覆寫估算器所使用的預設映射,您可以透過估算器建構函式的environment
參數來指定該環境。您可以在 Azure Machine Learning 容器中看到 Azure Machine Learning 維護的 Docker 映像及其內容。 架構特定的相依性會列在個別的架構文件中:
注意
如果您認為特定套件經常使用,應新增至 Azure ML 維護的映像和環境中,請在 Azure Machine Learning 容器 (英文) 中提出 GitHub 問題。
NameError (未定義名稱)、AttributeError (物件沒有屬性):此例外狀況應該來自您的訓練指令碼。 您可以在 Azure 入口網站檢閱記錄檔,以進一步了解未定義的特定名稱或屬性錯誤。 從 SDK 中,您可以使用
run.get_details()
來查看錯誤訊息。 這也會列出針對您的作業所產生的所有記錄檔。 請務必檢查您的訓練指令碼並修正錯誤,再重新提交作業。作業或實驗刪除:您可以使用 Experiment.archive 方法來封存實驗,或從 Azure Machine Learning 工作室用戶端中的 [實驗] 索引標籤檢視,透過 [封存實驗] 按鈕來封存。 此動作會隱藏清單查詢和檢視中的實驗,但不會將其刪除。
目前不支援永久刪除個別實驗或作業。 如需刪除工作區資產的詳細資訊,請參閱匯出或刪除您的機器學習服務工作區資料。
計量文件過大:Azure Machine Learning 對於可從一次定型作業中記錄的計量物件大小,有其內部限制。 如果在記錄清單值計量時發生「計量文件太大」錯誤,請嘗試將清單分割為較小的區塊,例如:
run.log_list("my metric name", my_metric[:N]) run.log_list("my metric name", my_metric[N:])
在內部,Azure Machine Learning 會將具有相同計量名稱的區塊串連為連續清單。
計算目標的啟動時間過長:計算目標的 Docker 映像是載入自 Azure Container Registry (ACR)。 根據預設,Azure Machine Learning 會建立使用基本服務層級的 ACR。 將工作區的 ACR 變更為「標準」或「進階層」,可減少建立和載入映像所需的時間。 如需詳細資訊,請參閱 Azure Container Registry 服務層級。
下一步
- 教學課程:訓練和部署模型使用受控的計算目標來訓練模型。
- 了解如何透過特定 ML 架構訓練模型,例如 Scikit-learn、TensorFlow 和 PyTorch。
- 了解如何有效率地微調超參數以便建置更好的模型。
- 擁有定型的模型之後,請了解部署模型的方式和位置。
- 檢視 ScriptRunConfig 類別 SDK 參考。
- 搭配使用 Azure Machine Learning 與 Azure 虛擬網路