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 访问数据时使用标识。 它可以是用户标识配置托管标识配置 或 None。 对于 UserIdentityConfiguration,将会使用作业提交者的标识来访问输入数据并将结果写入输出文件夹。 否则,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_fileuri_foldermltablemlflow_model 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_mountdownloaddirect ro_mount

作业输出

类型 说明 允许的值 默认值
type string 作业输出类型。 对于默认的 uri_folder 类型,输出对应于某个文件夹。 uri_fileuri_foldermltablemlflow_model uri_folder
mode string 将输出文件或文件发送到目标存储的模式。 对于读-写装载模式 (rw_mount),输出目录是装载的目录。 对于上传模式,写入的文件会在作业结束时上传。 rw_mountupload 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:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest
    compute: azureml:cpu-cluster
  world_job:
    command: echo "world"
    environment: azureml:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@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.0/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.0/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.0/labels/latest
  world_job:
    command: echo 202204190 & echo "hello"
    environment: azureml://registries/azureml/environments/sklearn-1.0/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:azureml-sklearn-1.0:23
    inputs:
      hello_string: ${{parent.inputs.hello_string_top_level_input}}
  b:
    command: echo "world" >> ${{outputs.world_output}}/world.txt
    environment: azureml:azureml-sklearn-1.0:23
    outputs:
      world_output:
  c:
    command: echo ${{inputs.world_input}}/world.txt
    environment: azureml:azureml-sklearn-1.0:23
    inputs:
      world_input: ${{parent.jobs.b.outputs.world_output}}