共用方式為


CLI (v2) 管線作業 YAML 架構

適用於:Azure CLI ml 擴充功能 v2(目前)

您可以在 找到來源 JSON 架構 https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json

注意

本文件中詳述的 YAML 語法是以最新版 ML CLI v2 延伸模組的 JSON 結構描述為基礎。 此語法僅保證能與最新版的 ML CLI v2 延伸模組搭配運作。 您可以在 https://azuremlschemasprod.azureedge.net/ 找到舊版延伸模組的結構描述。

YAML 語法

機碼 類型 描述 允許的值 預設值
$schema string YAML 結構描述。 如果您使用 Azure 機器學習 VS Code 擴充功能來撰寫 YAML 檔案,您可以在檔案頂端包含$schema架構和資源完成。
type const 必要。 作業類型。 pipeline
name 字串 作業的名稱。 工作區中的所有作業都必須是唯一的。 如果省略,Azure 機器學習 將會自動產生名稱的 GUID。
display_name 字串 在 Studio UI 中顯示作業的名稱。 在工作區中可以是非唯一的。 如果省略,Azure 機器學習 會自動產生顯示名稱的人類可讀取形容詞-名詞標識符。
experiment_name 字串 在實驗名稱下組織作業。 每個作業的執行記錄會組織在工作室的 [實驗] 索引標籤中對應的實驗之下。 如果省略,Azure 機器學習 預設experiment_name為建立作業的工作目錄名稱。
tags object 作業標籤的字典。
settings object 管線作業的預設設定。 請瀏覽索引鍵的屬性settings,以取得一組可設定的屬性。
jobs object 必要。 要在管線內作為步驟執行的個別作業集合的字典。 這些作業可視為父管線作業的子作業。

索引鍵是管線作業內容中的步驟名稱。 此名稱與子作業的唯一作業名稱不同。 值是作業規格,可以遵循 命令作業架構掃掠作業架構。 目前,只有命令作業和掃掠作業可以在管線中執行。 後續版本將支援其他作業類型。
inputs object 管線作業的輸入字典。 索引鍵是作業內容內輸入的名稱。 值是輸入值。

管線中個別步驟作業的輸入可以參考這些管線輸入與 ${{ 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}/。 輸出目錄的檔案會透過讀寫掛接寫入。 若要指定不同的輸出模式,請提供包含 作業輸出規格的物件。
identity object 身分識別用於數據存取。 它可以是 UserIdentityConfiguration、ManagedIdentityConfiguration 或 None。 如果是UserIdentityConfiguration,作業送出者的身分識別將用來存取輸入數據,並將結果寫入輸出資料夾,否則將會使用計算目標的受控識別。

索引鍵的屬性settings

機碼 類型 描述 預設值
default_datastore 字串 要作為管線作業之預設數據存放區的數據存放區名稱。 這個值必須是工作區中現有數據存放區的參考,使用 azureml:<datastore-name> 語法。 父管線作業或子步驟作業之 屬性中 outputs 定義的任何輸出會儲存在此數據存放區中。 如果省略,輸出會儲存在工作區 Blob 資料存放區中。
default_compute 字串 要作為管線中所有步驟之預設計算的計算目標名稱。 在步驟層級定義的計算會覆寫該特定步驟的這個預設計算。 值 default_compute 必須是工作區中現有計算的參考,並使用 azureml:<compute-name> 語法。
continue_on_step_failure boolean 此設定會決定管線中的步驟失敗時會發生什麼情況。 根據預設,即使一個步驟失敗,管線仍會繼續執行。 這表示任何不相依於失敗步驟的步驟仍會執行。 不過,如果您將此設定變更為 False,整個管線就會停止執行,如果一個步驟失敗,則會取消任何目前執行的步驟。 True
force_rerun boolean 是否要強制重新執行整個管線。 預設值是 False。 這表示,如果管線符合重複使用準則,則管線預設會嘗試重複使用上一個作業的輸出。 如果設定為 True,管線中的所有步驟都會重新執行。 False

作業輸入

機碼 類型 描述 允許的值 預設值
type 字串 作業輸入的類型。 指定 uri_file 指向單一檔案來源的輸入數據,或 uri_folder 指定指向資料夾來源的輸入數據。 如需詳細資訊,請流覽 深入了解數據存取。 uri_file、 、 uri_foldermltablemlflow_model uri_folder
path 字串 要作為輸入的數據路徑。 這可以透過幾種方式指定:

- 資料來源檔案或資料夾的本機路徑,例如 path: ./iris.csv。 數據會在作業提交期間上傳。

- 要作為輸入之檔案或資料夾之雲端路徑的 URI。 支援的 URI 型態為 azureml、、httpswasbsabfssadl。 如需 URI 格式使用 azureml:// 的詳細資訊,請流覽 Core yaml 語法

- 現有的已註冊 Azure 機器學習 數據資產,以做為輸入。 若要參考已註冊的數據資產,請使用 azureml:<data_name>:<data_version> 語法 或 azureml:<data_name>@latest (參考該數據資產的最新版本),例如 path: azureml:cifar10-data:1path: azureml:cifar10-data@latest
mode 字串 如何將數據傳遞至計算目標的模式。

針對唯讀掛接 (ro_mount),數據會以掛接路徑的形式取用。 資料夾會掛接為資料夾,而檔案會掛接為檔案。 Azure 機器學習 會將輸入解析為掛接路徑。

若為 download 模式,數據會下載至計算目標。 Azure 機器學習 會將輸入解析為下載的路徑。

若只是數據成品或成品儲存位置的 URL,而不是掛接或下載數據本身,請使用 direct 模式。 這會傳入記憶體位置的 URL 做為作業輸入。 在此情況下,您完全負責處理認證以存取記憶體。
ro_mount、 、 downloaddirect ro_mount

工作輸出

機碼 類型 描述 允許的值 預設值
type 字串 作業輸出類型。 針對預設 uri_folder 類型,輸出會對應至資料夾。 uri_file、 、 uri_foldermltablemlflow_model uri_folder
mode 字串 將輸出檔案或檔案傳遞至目的地記憶體的模式。 針對讀寫掛接模式 (rw_mount),輸出目錄將會是掛接的目錄。 針對上傳模式,寫入的檔案會在作業結尾上傳。 rw_mount, upload rw_mount

身分識別組態

UserIdentityConfiguration

機碼 類型 描述 允許的值
type const 必要。 識別類型。 user_identity

ManagedIdentityConfiguration

機碼 類型 描述 允許的值
type const 必要。 識別類型。 managedmanaged_identity

備註

您可以使用 az ml job 命令來管理 Azure 機器學習 作業。

範例

如需範例, 請流覽 GitHub 存放庫 範例。 這裡顯示數個:

YAML:hello 管線

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: hello_pipeline
jobs:
  hello_job:
    command: echo "hello"
    environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest
    compute: azureml:cpu-cluster
  world_job:
    command: echo "world"
    environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest
    compute: azureml:cpu-cluster

YAML:輸入/輸出相依性

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: hello_pipeline_io
jobs:
  hello_job:
    command: echo "hello" && echo "world" > ${{outputs.world_output}}/world.txt
    environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest
    compute: azureml:cpu-cluster
    outputs:
      world_output:
  world_job:
    command: cat ${{inputs.world_input}}/world.txt
    environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest
    compute: azureml:cpu-cluster
    inputs:
      world_input: ${{parent.jobs.hello_job.outputs.world_output}}

YAML:常見的管線作業設定

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: hello_pipeline_settings

settings:
  default_datastore: azureml:workspaceblobstore
  default_compute: azureml:cpu-cluster
jobs:
  hello_job:
    command: echo 202204190 & echo "hello"
    environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest
  world_job:
    command: echo 202204190 & echo "hello"
    environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest

YAML:最上層輸入和覆寫一般管線作業設定

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: hello_pipeline_abc
settings:
    default_compute: azureml:cpu-cluster
  
inputs:
  hello_string_top_level_input: "hello world"
jobs:
  a:
    command: echo hello ${{inputs.hello_string}}
    environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest
    inputs:
      hello_string: ${{parent.inputs.hello_string_top_level_input}}
  b:
    command: echo "world" >> ${{outputs.world_output}}/world.txt
    environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest
    outputs:
      world_output:
  c:
    command: echo ${{inputs.world_input}}/world.txt
    environment: azureml://registries/azureml/environments/sklearn-1.5/labels/latest
    inputs:
      world_input: ${{parent.jobs.b.outputs.world_output}}

下一步