設定並提交定型作業

適用於:Python SDK azureml v1

在此文章中,您將了解如何設定和提交 Azure Machine Learning 作業以將模型定型。 程式碼片段會說明設定和提交訓練指令碼的重點部分。 接著使用其中一個範例筆記本以找出完整的端對端工作範例。

訓練時,通常會從您的本機電腦開始,接著再擴增至雲端式叢集。 使用 Azure Machine Learning 時,您無須變更訓練指令碼,即可在各種計算目標上執行指令碼。

您需要做的是在指令碼作業組態內為每個計算目標定義環境。 然後,當您想要在不同的計算目標上執行定型實驗時,為該計算指定作業組態。

必要條件

什麼是指令碼回合組態?

ScriptRunConfig 可用來設定提交訓練作業作為實驗一部分的必要資訊。

您可以使用 ScriptRunConfig 物件提交訓練實驗。 此物件包含:

  • source_directory:包含定型指令碼的來源目錄
  • script:要執行的訓練指令碼
  • compute_target:要在上面執行的計算目標
  • environment:執行指令碼時使用的環境
  • 以及一些其他可設定的選項 (如需詳細資訊,請參閱參考文件)

定型您的模型

提交定型作業的程式碼模式對於所有類型的計算目標皆相同:

  1. 建立要執行的實驗
  2. 建立指令碼執行的環境
  3. 建立 ScriptRunConfig 以指定計算目標和環境
  4. 提交作業
  5. 請等待作業完成

或者您可以:

建立實驗

在您的工作區中建立實驗。 實驗是一種輕量型容器,有助於安排執行作業並追蹤程式碼。

適用於: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 參數提供分散式作業特定的設定。 支援的設定類型包括 MpiConfigurationTensorflowConfigurationPyTorchConfiguration

如需執行分散式 Horovod、TensorFlow 和 PyTorch 作業的詳細資訊和範例,請參閱:

提交實驗

適用於:Python SDK azureml v1

run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)

重要

當您提交定型作業時,系統將會對包含定型指令碼的目錄建立快照集,並傳送到計算目標。 其也會儲存為工作區中實驗的一部分。 如果您變更檔案並再次提交作業,則只會上傳已變更的檔案。

若要避免在快照中包含不必要的檔案,請在目錄中建立忽略檔案 (.gitignore.amlignore)。 將要排除的檔案和目錄新增到這個檔案中。 如需此檔案中可用語法的詳細資訊,請參閱 .gitignore語法和模式.amlignore 檔案會使用相同的語法。 如果兩個檔案都存在,則會使用 .amlignore 檔案,不會使用 .gitignore 檔案。

如需有關快照集的更多資訊,請參閱快照集

重要

特殊資料夾 Azure Machine Learning 會特別對待 outputslogs, 這兩個資料夾。 在定型期間,當您將檔案寫入到相對於根目錄且名為 outputslogs 的資料夾 (分別是 ./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 版本、將其解除安裝並安裝正確的版本,如下所示:

    1. 啟動命令殼層,並啟用已安裝 azureml-core 的 conda 環境。
    2. 輸入 pip freeze 並尋找 PyJWT,如果找到,則列出的版本應為 < 2.0.0
    3. 如果列出的版本不是支援的版本,請在命令殼層中執行 pip uninstall PyJWT,並輸入 y 以確認。
    4. 使用 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_packagesconda_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 服務層級

下一步