CLI (v2) 平行作業 YAML 結構描述
重要
平行作業只能當做 Azure 機器學習 管線作業內的單一步驟使用。 因此,目前沒有平行作業的來源 JSON 架構。 本檔列出在管線中建立平行作業時的有效索引鍵及其值。
注意
本文件中詳述的 YAML 語法是以最新版 ML CLI v2 延伸模組的 JSON 結構描述為基礎。 此語法僅保證能與最新版的 ML CLI v2 延伸模組搭配運作。 您可以在 https://azuremlschemasprod.azureedge.net/ 找到舊版延伸模組的結構描述。
YAML 語法
機碼 | 類型 | 描述 | 允許的值 | 預設值 |
---|---|---|---|---|
type |
const | 必要。 作業類型。 | parallel |
|
inputs |
object | 平行作業輸入的字典。 索引鍵是作業內容中的輸入名稱,值則是輸入值。 您可以使用 ${{ inputs.<input_name> }} 表示式在 中program_arguments 參考輸入。 您可以使用表示式的管線輸入來參考平行作業輸入 ${{ parent.inputs.<input_name> }} 。 如需如何將平行步驟的輸入系結至管線輸入,請參閱 管線作業中步驟之間系結輸入和輸出的表達式語法。 |
||
inputs.<input_name> |
number、integer、boolean、string 或 object | 其中一個常值(類型為 number、integer、boolean 或 string),或包含 作業輸入數據規格的物件。 | ||
outputs |
object | 平行作業之輸出組態的字典。 索引鍵是作業內容中的輸出名稱,值則是輸出設定。 您可以使用 表示式,透過管線輸出來參考平行作業輸出 ${{ parents.outputs.<output_name> }} 。 如需如何將平行步驟的輸出系結至管線輸出,請參閱 管線作業中步驟之間系結輸入和輸出的表達式語法。 |
||
outputs.<output_name> |
object | 您可以將物件保留空白,根據預設,輸出的類型為 uri_folder ,而 Azure 機器學習 會根據下列範本化路徑為輸出產生輸出位置:{settings.datastore}/azureml/{job-name}/{output-name}/ 。 輸出目錄的檔案會透過讀寫掛接寫入。 如果您想要為輸出指定不同的模式,請提供包含 作業輸出規格的物件。 |
||
compute |
字串 | 要對其執行作業的計算目標名稱。 此值可以是工作區中現有計算的參考(使用 azureml:<compute_name> 語法),或 local 指定本機執行。 在管線中使用平行作業時,您可以將此設定保留空白,在此情況下,管線會自動選取 default_compute 計算。 |
local |
|
task |
object | 必要。 用於定義平行作業之分散式工作的範本。 請參閱索引鍵的屬性task 。 |
||
input_data |
object | 必要。 定義要分割成迷你批次的輸入數據,以執行平行作業。 僅適用於使用${{ inputs.<input_name> }} 表達式參考其中一個平行作業inputs |
||
mini_batch_size |
字串 | 定義每個迷你批次的大小,以分割輸入。 如果input_data是資料夾或一組檔案,此數位會定義每個迷你批次的 檔案計數 。 例如,10、100。 如果input_data是 來自 mltable 的表格式數據,這個數位會定義每個迷你批次的親和實體大小。 例如,100 kb、100 mb。 |
1 | |
partition_keys |
清單 | 用來將數據數據集分割成迷你批次的索引鍵。 如果指定,具有相同索引鍵的數據將會分割成相同的迷你批次。 如果同時 partition_keys 指定 和 mini_batch_size ,分割區索引鍵將會生效。 |
||
mini_batch_error_threshold |
整數 | 定義在此平行作業中可忽略的失敗迷你批次數目。 如果失敗的迷你批次計數高於此臨界值,平行作業將會標示為失敗。 如果出現下列情況,會將迷你批次標示為失敗: - run() 傳回的計數小於迷你批次輸入計數。 - 攔截自訂 run () 程式碼中的例外狀況。 「-1」是預設數字,表示在平行作業期間忽略所有失敗的迷你批次。 |
[-1, int.max] | -1 |
logging_level |
字串 | 定義將傾印至使用者記錄檔的記錄層級。 | INFO、WARNING、DEBUG | INFO |
resources.instance_count |
整數 | 要用於作業的節點數目。 | 1 | |
max_concurrency_per_instance |
整數 | 定義計算的每個節點上的進程數目。 若為 GPU 計算,預設值為 1。 若為 CPU 計算,預設值為核心數目。 |
||
retry_settings.max_retries |
整數 | 定義迷你批次失敗或逾時時的重試次數。 如果所有重試都失敗,迷你批次將會標示為無法由計算 mini_batch_error_threshold 進行計算。 |
2 | |
retry_settings.timeout |
整數 | 以秒為單位定義執行自訂 run () 函式的逾時。 如果執行時間高於此閾值,便會中止迷你批次,並標示為失敗的迷你批次以觸發重試。 | (0, 259200] | 60 |
environment_variables |
object | 環境變數索引鍵/值組的字典,可在執行命令的進程上設定。 |
索引鍵的屬性task
機碼 | 類型 | 描述 | 允許的值 | 預設值 |
---|---|---|---|---|
type |
const | 必要。 工作的類型。 run_function 僅適用於現在。在模式中 run_function ,您必須提供 code 、 entry_script 和 program_arguments ,才能使用可執行的函式和自變數來定義 Python 腳本。 注意:平行作業僅支援此模式中的 Python 腳本。 |
run_function | run_function |
code |
字串 | 要上傳並用於作業的原始程式碼目錄本機路徑。 | ||
entry_script |
string | 包含預先定義平行函式實作的 Python 檔案。 如需詳細資訊,請參閱 準備專案腳本至平行作業。 | ||
environment |
字串或物件 | 必要 環境,用於執行工作。 此值可以是工作區中現有版本設定環境的參考或內嵌環境規格。 若要參考現有的環境,請使用 azureml:<environment_name>:<environment_version> 語法 或 azureml:<environment_name>@latest (參考最新版的環境)。 若要定義內嵌環境,請遵循 環境架構。 name 排除和 version 屬性,因為內嵌環境不支持它們。 |
||
program_arguments |
字串 | 要傳遞至專案腳本的自變數。 可能包含 “--<arg_name> ${{inputs。<>intput_name}“ 輸入或輸出的參考。 平行作業提供預先定義的自變數清單,以設定平行執行的組態。 如需詳細資訊,請參閱 平行作業的預先定義自變數。 |
||
append_row_to |
字串 | 匯總每個迷你批次回合的所有傳回,並將其輸出到此檔案中。 可以使用運算式 ${{outputs.<output_name>}} 參考其中一個平行作業輸出。 |
作業輸入
機碼 | 類型 | 描述 | 允許的值 | 預設值 |
---|---|---|---|---|
type |
字串 | 作業輸入的類型。 指定 mltable 指向具有 mltable 元數據的位置的輸入資料,或 uri_folder 指定指向資料夾來源的輸入數據。 |
mltable , uri_folder |
uri_folder |
path |
字串 | 要作為輸入的數據路徑。 值可以透過幾種方式指定: - 資料來源檔案或資料夾的本機路徑,例如 path: ./iris.csv 。 數據會在作業提交期間上傳。 - 要作為輸入之檔案或資料夾之雲端路徑的 URI。 支援的 URI 型態為 azureml 、、https 、wasbs abfss 、 adl 。 如需詳細資訊,請參閱如何使用 URI 格式的核心 azureml:// yaml 語法。 - 現有的已註冊 Azure 機器學習 數據資產,用來作為輸入。 若要參考已註冊的數據資產,請使用 azureml:<data_name>:<data_version> 語法 或 azureml:<data_name>@latest (參考該數據資產的最新版本),例如 path: azureml:cifar10-data:1 或 path: azureml:cifar10-data@latest 。 |
||
mode |
字串 | 如何將數據傳遞至計算目標的模式。 針對唯讀掛接 ( ro_mount ),數據會以掛接路徑的形式取用。 資料夾會掛接為資料夾,並將檔案掛接為檔案。 Azure 機器學習 會將輸入解析為掛接路徑。 若為 download 模式,數據將會下載至計算目標。 Azure 機器學習 會將輸入解析為下載的路徑。 如果您只想要資料成品儲存位置的 URL,而不是掛接或下載數據本身,您可以使用 direct 模式。 它會傳入記憶體位置的 URL 做為作業輸入。 在此情況下,您完全負責處理認證以存取記憶體。 |
ro_mount 、 、 download direct |
ro_mount |
工作輸出
機碼 | 類型 | 描述 | 允許的值 | 預設值 |
---|---|---|---|---|
type |
字串 | 作業輸出的類型。 針對預設 uri_folder 類型,輸出會對應至資料夾。 |
uri_folder |
uri_folder |
mode |
字串 | 輸出檔案將如何傳遞至目的地記憶體的模式。 針對讀寫掛接模式 (rw_mount ) ,輸出目錄會是掛接的目錄。 針對上傳模式,寫入的檔案將會在作業結束時上傳。 |
rw_mount , upload |
rw_mount |
平行作業的預先定義自變數
關鍵 | 描述 | 允許的值 | 預設值 |
---|---|---|---|
--error_threshold |
失敗項目的臨界值。 失敗項目會依輸入與每個迷你批次傳回之間的間距來計算。 如果失敗項目的總和高於此閾值,便會將平行作業標示為失敗。 注意:「-1」是預設數字,表示在平行作業期間忽略所有失敗。 |
[-1, int.max] | -1 |
--allowed_failed_percent |
類似於 mini_batch_error_threshold ,但會使用失敗的迷你批次百分比,而不是計數。 |
[0, 100] | 100 |
--task_overhead_timeout |
第二個用於初始化每個迷你批次的逾時。 例如,載入迷你批次資料並傳遞至 run() 函式。 | (0, 259200] | 30 |
--progress_update_timeout |
用來監視迷你批次執行進度的秒數逾時。 如果沒有在此設定的逾時內收到任何進度更新,便會將平行作業標示為失敗。 | (0, 259200] | 由其他設定動態計算。 |
--first_task_creation_timeout |
第二秒的逾時,用於監視作業開始執行第一個迷你批次之間的時間。 | (0, 259200] | 600 |
--copy_logs_to_parent |
是否將作業進度、概觀和記錄複製到父管線作業的佈林值選項。 | True、False | False |
--metrics_name_prefix |
在此平行作業中提供計量的自定義前置詞。 | ||
--push_metrics_to_parent |
布爾值選項,指出是否將計量推送至父管線作業。 | True、False | False |
--resource_monitor_interval |
將節點資源使用量 (例如 cpu、記憶體) 傾印到「logs/sys/perf」路徑下的記錄資料夾所用的時間間隔,以秒為單位。 注意:經常傾印資源記錄會稍微降低迷你批次的執行速度。 將此值設定為「0」即可停止傾印資源使用量。 |
[0, int.max] | 600 |
備註
az ml job
命令可用來管理 Azure 機器學習 作業。
範例
範例 GitHub 存放庫中有範例可用。 以下顯示其中幾個。
YAML:在管線中使用平行作業
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: iris-batch-prediction-using-parallel
description: The hello world pipeline job with inline parallel job
tags:
tag: tagvalue
owner: sdkteam
settings:
default_compute: azureml:cpu-cluster
jobs:
batch_prediction:
type: parallel
compute: azureml:cpu-cluster
inputs:
input_data:
type: mltable
path: ./neural-iris-mltable
mode: direct
score_model:
type: uri_folder
path: ./iris-model
mode: download
outputs:
job_output_file:
type: uri_file
mode: rw_mount
input_data: ${{inputs.input_data}}
mini_batch_size: "10kb"
resources:
instance_count: 2
max_concurrency_per_instance: 2
logging_level: "DEBUG"
mini_batch_error_threshold: 5
retry_settings:
max_retries: 2
timeout: 60
task:
type: run_function
code: "./script"
entry_script: iris_prediction.py
environment:
name: "prs-env"
version: 1
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
conda_file: ./environment/environment_parallel.yml
program_arguments: >-
--model ${{inputs.score_model}}
--error_threshold 5
--allowed_failed_percent 30
--task_overhead_timeout 1200
--progress_update_timeout 600
--first_task_creation_timeout 600
--copy_logs_to_parent True
--resource_monitor_interva 20
append_row_to: ${{outputs.job_output_file}}