CLI (v2) 并行作业 YAML 架构

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

重要

只能将并行作业用作Azure 机器学习管道作业内的单个步骤。 因此,并行作业没有源 JSON 架构。 本文列出了在管道中创建并行作业时的有效键及其值。

注意

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

YAML 语法

密钥 类型 说明 允许的值 默认值
type const 必需。 作业类型。 parallel
inputs 对象 并行作业的输入字典。 键是作业上下文中的输入名称,值是输入值。

可以使用表达式引用输入program_arguments${{ inputs.<input_name> }}

管道输入可以使用表达式引用并行作业输入 ${{ parent.inputs.<input_name> }} 。 有关如何将并行步骤的输入绑定到管道输入的信息,请参阅 管道作业中步骤之间的绑定输入和输出的表达式语法
inputs.<input_name> 数字、整数、布尔值、字符串或对象 文字值(数字、整数、布尔值或字符串类型)或包含作业输入数据规范的对象之一。
outputs 对象 并行作业的输出配置字典。 键是作业上下文中的输出名称,值是输出配置。

管道输出可以使用表达式引用并行作业输出 ${{ parents.outputs.<output_name> }} 。 有关如何将并行步骤的输出绑定到管道输出的信息,请参阅 管道作业中步骤之间的绑定输入和输出的表达式语法
outputs.<output_name> 对象 可以将对象留空。 默认情况下,输出的类型uri_folder和Azure 机器学习系统根据以下模板化路径生成输出的输出位置: {settings.datastore}/azureml/{job-name}/{output-name}/ 作业通过读写装载将文件写入输出目录。 如果要为输出指定不同的模式,请提供一个包含作业输出规范的对象。
compute 字符串 要在其上执行作业的计算目标的名称。 该值是对工作区中现有计算的引用(使用 azureml:<compute_name> 语法),也可以是对 local 的引用,以指定本地执行。

在管道中使用并行作业时,可以将此设置留空。 default_compute管道自动选择计算。
local
task 对象 必需。 用于定义并行作业的分布式任务的模板。 请参阅 task 键的属性
input_data 对象 必需。 定义将哪些输入数据拆分为小型批处理以运行并行作业。 仅适用于使用inputs表达式引用其中一个并行作业${{ inputs.<input_name> }}
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 对象 要在执行命令的进程上设置的环境变量键/值对的字典。

task 键的属性

密钥 类型 说明 允许的值 默认值
type const 必需。 任务的类型。 目前仅适用于 run_function

run_function 模式下,需要提供 codeentry_scriptprogram_arguments 以定义具有可执行函数和参数的 Python 脚本。 注意:并行作业仅支持此模式下的 Python 脚本。
run_function run_function
code 字符串 要上传并用于作业的源代码目录的本地路径。
entry_script 字符串 包含预定义并行函数的实现的 Python 文件。 有关详细信息,请参阅准备并行作业的入口脚本
environment 字符串或对象 必填 用于运行任务的环境。 此值可以是对工作区中现有版本受控环境的引用,也可以是对内联环境规范的引用。

若要引用现有环境,请使用 azureml:<environment_name>:<environment_version> 语法或 azureml:<environment_name>@latest(引用环境的最新版本)。

若要定义内联环境,请遵循环境架构。 排除 nameversion 属性,因为内联环境不支持这些属性。
program_arguments 字符串 要传递给入口脚本的参数。 可能包含对输入和输出的“--<arg_name> ${{inputs.<intput_name>}}”引用。

并行作业提供预定义参数列表,用于设置并行运行的配置。 有关详细信息,请参阅并行作业的预定义参数
append_row_to 字符串 聚合每次运行微批后的所有返回值并将其输出到此文件中。 可以使用表达式 ${{outputs.<output_name>}} 引用并行作业的输出之一

作业输入

密钥 类型 说明 允许的值 默认值
type 字符串 作业输入的类型。 为指向具有 mltable 元文件的位置的输入数据指定 mltable,或为指向文件夹源的输入数据指定 uri_folder mltableuri_folder uri_folder
path 字符串 用作输入的数据的路径。 使用以下方法之一指定值:

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

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

- 要用作输入的现有已注册的 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_mountdownloaddirect ro_mount

作业输出

密钥 类型 说明 允许的值 默认值
type 字符串 作业输出的类型。 对于默认的 uri_folder 类型,输出对应于某个文件夹。 uri_folder uri_folder
mode 字符串 输出文件如何传送到目标存储的模式。 对于读写装载模式(rw_mount) 输出目录是装载的目录。 对于上传模式,写入的文件会在作业结束时上传。 rw_mountupload 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 错误
--metrics_name_prefix 提供此并行作业中指标的自定义前缀。
--push_metrics_to_parent 布尔选项,用于选择是否将指标推送到父管道作业。 True、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}}

后续步骤