你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

CLI (v2) 管道作业 YAML 架构

适用于:Azure CLI ml 扩展 v2(当前)

可以从 https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json 找到源 JSON 架构。

注意

本文档中详细介绍的 YAML 语法基于最新版本的 ML CLI v2 扩展的 JSON 架构。 此语法必定仅适用于最新版本的 ML CLI v2 扩展。 可以在 https://azuremlschemasprod.azureedge.net/ 上查找早期扩展版本的架构。

YAML 语法

密钥 类型 说明 允许的值 默认值
$schema 字符串 YAML 架构。 如果使用 Azure 机器学习 VS Code 扩展创作 YAML 文件,可以通过在文件顶部包含 $schema 来调用架构和资源完成操作。
type const 必需。 作业类型。 pipeline
name 字符串 作业的名称。 对工作区中的所有作业必须唯一。 如果省略,Azure 机器学习将自动生成该名称的 GUID。
display_name 字符串 作业在工作室 UI 中的显示名称。 在工作区中可以不唯一。 如果省略此项,Azure 机器学习将为显示名称自动生成人类可读的形容词-名词标识符。
experiment_name string 在试验名称下组织作业。 工作室的“试验”选项卡中相应的试验下整理了每项作业的运行记录。 如果省略,Azure 机器学习会将 experiment_name 默认为创建作业的工作目录的名称。
tags object 作业的标记字典。
settings object 管道作业的默认设置。 访问可配置属性集的 settings 键的特性
jobs object 必需。 在管道中作为步骤运行的一组单个作业的字典。 这些作业被视为父管道作业的子作业。

键是步骤在管道作业的上下文中的名称。 此名称不同于子作业的唯一作业名称。 该值是作业规范,可以遵循命令作业架构扫描作业架构。 目前,只能在管道中运行命令作业和扫描作业。 以后的版本将支持其他作业类型。
inputs object 管道作业的输入字典。 该键是作业上下文中的输入的名称。 该值是输入值。

管道中单个步骤作业的输入可以用 ${{ parent.inputs.<input_name> }} 表达式引用这些管道输入。 有关将管道步骤的输入绑定到顶级管道作业的输入的详细信息,请访问用于在管道作业的步骤之间绑定输入和输出的表达式语法
inputs.<input_name> 数字、整数、布尔值、字符串或对象 文字值(数字、整数、布尔值或字符串类型)或包含作业输入数据规范的对象之一。
outputs object 管道作业的输出配置字典。 该键是作业上下文中的输出的名称。 该值是输出配置。

管道中单个步骤作业的输出可以用 ${{ parents.outputs.<output_name> }} 表达式引用这些管道输出。 有关将管道步骤的输出绑定到顶级管道作业的输出的详细信息,请访问用于在管道作业的步骤之间绑定输入和输出的表达式语法
outputs.<output_name> object 可以将对象留空。 在这种情况下,输出的类型默认为 uri_folder,Azure 机器学习将基于此模板化路径系统生成输出的输出位置:{settings.datastore}/azureml/{job-name}/{output-name}/。 到输出目录的文件将通过读-写装载写入。 要指定不同的输出模式,请提供包含作业输出规范的对象。
identity object 此标识用于数据访问。 该标识可以是 UserIdentityConfigurationManagedIdentityConfiguration 或 None。 如果是 UserIdentityConfiguration,则作业提交者的标识将用于访问输入数据并将结果写入输出文件夹,否则将使用计算目标的托管标识。

settings 键的属性

类型 说明 默认值
default_datastore 字符串 要用作管道作业的默认数据存储的数据存储的名称。 此值必须是使用 azureml:<datastore-name> 语法对工作区中的现有数据存储的引用。 父管道作业或子步骤作业的 outputs 属性中定义的任何输出都存储在此数据存储中。 如果省略,则输出将存储在工作区 blob 数据存储中。
default_compute string 要用作管道中所有步骤的默认计算的计算目标的名称。 在步骤级别定义的计算将替代该特定步骤的此默认计算。 default_compute 值必须是使用 azureml:<compute-name> 语法对工作区中的现有计算的引用。
continue_on_step_failure boolean 此设置决定了当管道中的某个步骤失败时会发生什么情况。 默认情况下,即使一个步骤失败,管道也会继续运行。 这意味着任何不依赖于失败步骤的步骤仍将执行。 但是,如果将此设置更改为“False”,则当某个步骤失败时,整个管道都将停止运行,当前正在运行的任何步骤都将被取消。 True
force_rerun boolean 是否强制重新运行整个管道。 默认值为 False。 这意味着,默认情况下,如果管道满足重用条件,则它会尝试重用上一作业的输出。 如果设置为 True,则管道中的所有步骤都将重新运行。 False

作业输入

类型 说明 允许的值 默认值
type 字符串 作业输入的类型。 为指向单个文件源的输入数据指定 uri_file,或为指向文件夹源的输入数据指定 uri_folder。 有关详细信息,请访问详细了解数据访问。 uri_folder
path 字符串 用作输入的数据的路径。 可通过几种方式来执行它:

- 数据源文件或文件夹的本地路径,例如 path: ./iris.csv。 数据会在作业提交期间上传。

- 要用作输入的文件或文件夹的云路径的 URI。 支持的 URI 类型为 azuremlhttpswasbsabfssadl。 有关如何使用 azureml:// URI 格式的详细信息,请访问核心 yaml 语法

- 要用作输入的现有已注册的 Azure 机器学习数据资产。 要引用已注册的数据资产,请使用 azureml:<data_name>:<data_version> 语法或 azureml:<data_name>@latest(引用该数据资产的最新版本),例如 path: azureml:cifar10-data:1path: azureml:cifar10-data@latest
mode string 将数据传送到计算目标的模式。

对于只读装载 (ro_mount),数据将用作装载路径。 文件夹是文件夹装载的,而文件则作为文件装载。 Azure 机器学习会将输入解析为装载路径。

对于 download 模式,数据将下载到计算目标。 Azure 机器学习会将输入解析为下载的路径。

对于数据项目或项目存储位置的 URL,请使用 direct 模式,而不是装载或下载数据本身。 这会将存储位置的 URL 作为作业输入传入。 在这种情况下,你全权负责处理凭证以访问存储。
.- . ro_mount

作业输出

类型 说明 允许的值 默认值
type string 作业输出类型。 对于默认的 uri_folder 类型,输出对应于某个文件夹。 uri_folder
mode string 将输出文件或文件发送到目标存储的模式。 对于读-写装载模式 (rw_mount),输出目录是装载的目录。 对于上传模式,写入的文件会在作业结束时上传。 %> 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}}

后续步骤