注意
本文档中详细介绍的 YAML 语法基于 ML CLI 扩展 v1 版本的 JSON 架构。 此语法仅保证适用于 ML CLI v1 扩展。 若要了解 ML CLI v2 的语法,请切换到 v2(当前版本)。
重要
本文中的 Azure CLI 命令需要将 azure-cli-ml、v1 或扩展用于 Azure 机器学习。 对 v1 扩展的支持将于 2025 年 9 月 30 日结束。 在该日期之前,你将能够安装和使用 v1 扩展。
建议在 2025 年 9 月 30 日之前转换为 ml 或 v2 扩展。 有关 v2 扩展的详细信息,请参阅 Azure ML CLI 扩展和 Python SDK v2。
在 YAML 中定义机器学习管道。 使用适用于 Azure CLI v1 的机器学习扩展时,许多管道相关的命令都要求提供一个用于定义管道的 YAML 文件。
下表列出了在 YAML 中定义用于 CLI v1 的管道时目前支持和不支持的内容:
| 步骤类型 | 支持? | 
|---|---|
| PythonScriptStep | 是 | 
| ParallelRunStep | 是 | 
| AdlaStep | 是 | 
| AzureBatchStep | 是 | 
| DatabricksStep | 是 | 
| DataTransferStep | 是 | 
| AutoMLStep | 否 | 
| HyperDriveStep | 否 | 
| ModuleStep | 是 | 
| MPIStep | 否 | 
| EstimatorStep | 否 | 
管道定义
管道定义使用以下对应于 Pipelines 类的键:
| YAML 键 | 说明 | 
|---|---|
| name | 管道的说明。 | 
| parameters | 管道的参数。 | 
| data_reference | 定义在运行中提供数据的方式和位置。 | 
| default_compute | 默认的计算目标,管道中的所有步骤将在其上运行。 | 
| steps | 管道中使用的步骤。 | 
parameters
parameters 节使用以下对应于 PipelineParameter 类的键:
| YAML 键 | 说明 | 
|---|---|
| type | 参数的值类型。 有效类型为 string、int、float、bool或datapath。 | 
| default | 默认值。 | 
每个参数已命名。 例如,以下 YAML 代码片段定义名为 NumIterationsParameter、DataPathParameter 和 NodeCountParameter 的三个参数:
pipeline:
    name: SamplePipelineFromYaml
    parameters:
        NumIterationsParameter:
            type: int
            default: 40
        DataPathParameter:
            type: datapath
            default:
                datastore: workspaceblobstore
                path_on_datastore: sample2.txt
        NodeCountParameter:
            type: int
            default: 4
数据引用
data_references 节使用以下对应于 DataReference 的键:
| YAML 键 | 说明 | 
|---|---|
| datastore | 要引用的数据存储。 | 
| path_on_datastore | 数据引用在后备存储中的相对路径。 | 
每个数据引用包含在一个键中。 例如,以下 YAML 代码片段定义存储在键中的名为 employee_data 的数据引用:
pipeline:
    name: SamplePipelineFromYaml
    parameters:
        PipelineParam1:
            type: int
            default: 3
    data_references:
        employee_data:
            datastore: adftestadla
            path_on_datastore: "adla_sample/sample_input.csv"
步骤
步骤定义计算环境,以及要在环境中运行的文件。 若要定义步骤的类型,请使用 type 键:
| 步骤类型 | 说明 | 
|---|---|
| AdlaStep | 使用 Azure Data Lake Analytics 运行 U-SQL 脚本。 对应于 AdlaStep 类。 | 
| AzureBatchStep | 使用 Azure Batch 运行作业。 对应于 AzureBatchStep 类。 | 
| DatabricsStep | 添加 Databricks 笔记本、Python 脚本或 JAR。 对应于 DatabricksStep 类。 | 
| DataTransferStep | 在存储选项之间传输数据。 对应于 DataTransferStep 类。 | 
| PythonScriptStep | 运行 Python 脚本。 对应于 PythonScriptStep 类。 | 
| ParallelRunStep | 运行 Python 脚本,以异步方式并行处理大量数据。 对应于 ParallelRunStep 类。 | 
ADLA 步骤
| YAML 键 | 说明 | 
|---|---|
| script_name | U-SQL 脚本的名称(相对于 source_directory)。 | 
| compute | 用于此步骤的 Azure Data Lake 计算目标。 | 
| parameters | 管道的参数。 | 
| inputs | 输入可以是 InputPortBinding、DataReference、PortDataReference、PipelineData、Dataset、DatasetDefinition 或 PipelineDataset。 | 
| outputs | 输出可以是 PipelineData 或 OutputPortBinding。 | 
| source_directory | 包含脚本、程序集等的目录。 | 
| priority | 用于当前作业的优先级值。 | 
| params | 名称/值对的字典。 | 
| degree_of_parallelism | 用于此作业的并行度。 | 
| runtime_version | Data Lake Analytics 引擎的运行时版本。 | 
| allow_reuse | 确定当使用相同的设置再次运行时,该步骤是否应重用以前的结果。 | 
以下示例包含 ADLA 步骤定义:
pipeline:
    name: SamplePipelineFromYaml
    parameters:
        PipelineParam1:
            type: int
            default: 3
    data_references:
        employee_data:
            datastore: adftestadla
            path_on_datastore: "adla_sample/sample_input.csv"
    default_compute: adlacomp
    steps:
        Step1:
            runconfig: "D:\\Yaml\\default_runconfig.yml"
            parameters:
                NUM_ITERATIONS_2:
                    source: PipelineParam1
                NUM_ITERATIONS_1: 7
            type: "AdlaStep"
            name: "MyAdlaStep"
            script_name: "sample_script.usql"
            source_directory: "D:\\scripts\\Adla"
            inputs:
                employee_data:
                    source: employee_data
            outputs:
                OutputData:
                    destination: Output4
                    datastore: adftestadla
                    bind_mode: mount
Azure Batch 步骤
| YAML 键 | 说明 | 
|---|---|
| compute | 用于此步骤的 Azure Batch 计算目标。 | 
| inputs | 输入可以是 InputPortBinding、DataReference、PortDataReference、PipelineData、Dataset、DatasetDefinition 或 PipelineDataset。 | 
| outputs | 输出可以是 PipelineData 或 OutputPortBinding。 | 
| source_directory | 包含模块二进制文件、可执行文件、程序集等的目录。 | 
| executable | 要作为此作业的一部分运行的命令/可执行文件的名称。 | 
| create_pool | 布尔标志,指示在运行作业之前是否创建池。 | 
| delete_batch_job_after_finish | 布尔标志,指示在完成作业后是否从 Batch 帐户中删除该作业。 | 
| delete_batch_pool_after_finish | 布尔标志,指示在完成作业后是否删除池。 | 
| is_positive_exit_code_failure | 布尔标志,指示在任务退出并返回正代码时作业是否失败。 | 
| vm_image_urn | 如果 create_pool为True,则 VM 将使用VirtualMachineConfiguration。 | 
| pool_id | 要在其中运行作业的池的 ID。 | 
| allow_reuse | 确定当使用相同的设置再次运行时,该步骤是否应重用以前的结果。 | 
以下示例包含 Azure Batch 步骤定义:
pipeline:
    name: SamplePipelineFromYaml
    parameters:
        PipelineParam1:
            type: int
            default: 3
    data_references:
        input:
            datastore: workspaceblobstore
            path_on_datastore: "input.txt"
    default_compute: testbatch
    steps:
        Step1:
            runconfig: "D:\\Yaml\\default_runconfig.yml"
            parameters:
                NUM_ITERATIONS_2:
                    source: PipelineParam1
                NUM_ITERATIONS_1: 7
            type: "AzureBatchStep"
            name: "MyAzureBatchStep"
            pool_id: "MyPoolName"
            create_pool: true
            executable: "azurebatch.cmd"
            source_directory: "D:\\scripts\\AureBatch"
            allow_reuse: false
            inputs:
                input:
                    source: input
            outputs:
                output:
                    destination: output
                    datastore: workspaceblobstore
Databricks 步骤
| YAML 键 | 说明 | 
|---|---|
| compute | 用于此步骤的 Azure Databricks 计算目标。 | 
| inputs | 输入可以是 InputPortBinding、DataReference、PortDataReference、PipelineData、Dataset、DatasetDefinition 或 PipelineDataset。 | 
| outputs | 输出可以是 PipelineData 或 OutputPortBinding。 | 
| run_name | 此运行在 Databricks 中的名称。 | 
| source_directory | 包含脚本和其他文件的目录。 | 
| num_workers | Databricks 运行群集的辅助角色的静态编号。 | 
| runconfig | .runconfig文件的路径。 此文件是 RunConfiguration 类的 YAML 表示形式。 有关此文件的结构的详细信息,请参阅 runconfigschema.json。 | 
| allow_reuse | 确定当使用相同的设置再次运行时,该步骤是否应重用以前的结果。 | 
以下示例包含 Databricks 步骤:
pipeline:
    name: SamplePipelineFromYaml
    parameters:
        PipelineParam1:
            type: int
            default: 3
    data_references:
        adls_test_data:
            datastore: adftestadla
            path_on_datastore: "testdata"
        blob_test_data:
            datastore: workspaceblobstore
            path_on_datastore: "dbtest"
    default_compute: mydatabricks
    steps:
        Step1:
            runconfig: "D:\\Yaml\\default_runconfig.yml"
            parameters:
                NUM_ITERATIONS_2:
                    source: PipelineParam1
                NUM_ITERATIONS_1: 7
            type: "DatabricksStep"
            name: "MyDatabrickStep"
            run_name: "DatabricksRun"
            python_script_name: "train-db-local.py"
            source_directory: "D:\\scripts\\Databricks"
            num_workers: 1
            allow_reuse: true
            inputs:
                blob_test_data:
                    source: blob_test_data
            outputs:
                OutputData:
                    destination: Output4
                    datastore: workspaceblobstore
                    bind_mode: mount
数据传输步骤
| YAML 键 | 说明 | 
|---|---|
| compute | 用于此步骤的 Azure 数据工厂计算目标。 | 
| source_data_reference | 充当数据传输操作的源的输入连接。 支持的值为 InputPortBinding、DataReference、PortDataReference、PipelineData、Dataset、DatasetDefinition 或 PipelineDataset。 | 
| destination_data_reference | 充当数据传输操作的目标的输入连接。 支持的值为 PipelineData 和 OutputPortBinding。 | 
| allow_reuse | 确定当使用相同的设置再次运行时,该步骤是否应重用以前的结果。 | 
以下示例包含数据传输步骤:
pipeline:
    name: SamplePipelineFromYaml
    parameters:
        PipelineParam1:
            type: int
            default: 3
    data_references:
        adls_test_data:
            datastore: adftestadla
            path_on_datastore: "testdata"
        blob_test_data:
            datastore: workspaceblobstore
            path_on_datastore: "testdata"
    default_compute: adftest
    steps:
        Step1:
            runconfig: "D:\\Yaml\\default_runconfig.yml"
            parameters:
                NUM_ITERATIONS_2:
                    source: PipelineParam1
                NUM_ITERATIONS_1: 7
            type: "DataTransferStep"
            name: "MyDataTransferStep"
            adla_compute_name: adftest
            source_data_reference:
                adls_test_data:
                    source: adls_test_data
            destination_data_reference:
                blob_test_data:
                    source: blob_test_data
Python 脚本步骤
| YAML 键 | 说明 | 
|---|---|
| inputs | 输入可以是 InputPortBinding、DataReference、PortDataReference、PipelineData、Dataset、DatasetDefinition 或 PipelineDataset。 | 
| outputs | 输出可以是 PipelineData 或 OutputPortBinding。 | 
| script_name | Python 脚本的名称(相对于 source_directory)。 | 
| source_directory | 包含脚本、Conda 环境等的目录。 | 
| runconfig | .runconfig文件的路径。 此文件是 RunConfiguration 类的 YAML 表示形式。 有关此文件的结构的详细信息,请参阅 runconfig.json。 | 
| allow_reuse | 确定当使用相同的设置再次运行时,该步骤是否应重用以前的结果。 | 
以下示例包含 Python 脚本步骤:
pipeline:
    name: SamplePipelineFromYaml
    parameters:
        PipelineParam1:
            type: int
            default: 3
    data_references:
        DataReference1:
            datastore: workspaceblobstore
            path_on_datastore: testfolder/sample.txt
    default_compute: cpu-cluster
    steps:
        Step1:
            runconfig: "D:\\Yaml\\default_runconfig.yml"
            parameters:
                NUM_ITERATIONS_2:
                    source: PipelineParam1
                NUM_ITERATIONS_1: 7
            type: "PythonScriptStep"
            name: "MyPythonScriptStep"
            script_name: "train.py"
            allow_reuse: True
            source_directory: "D:\\scripts\\PythonScript"
            inputs:
                InputData:
                    source: DataReference1
            outputs:
                OutputData:
                    destination: Output4
                    datastore: workspaceblobstore
                    bind_mode: mount
并行运行步骤
| YAML 键 | 说明 | 
|---|---|
| inputs | 输入可以是 Dataset、DatasetDefinition 或 PipelineDataset。 | 
| outputs | 输出可以是 PipelineData 或 OutputPortBinding。 | 
| script_name | Python 脚本的名称(相对于 source_directory)。 | 
| source_directory | 包含脚本、Conda 环境等的目录。 | 
| parallel_run_config | parallel_run_config.yml文件的路径。 此文件是 ParallelRunConfig 类的 YAML 表示形式。 | 
| allow_reuse | 确定当使用相同的设置再次运行时,该步骤是否应重用以前的结果。 | 
以下示例包含并行运行步骤:
pipeline:
    description: SamplePipelineFromYaml
    default_compute: cpu-cluster
    data_references:
        MyMinistInput:
            dataset_name: mnist_sample_data
    parameters:
        PipelineParamTimeout:
            type: int
            default: 600
    steps:        
        Step1:
            parallel_run_config: "yaml/parallel_run_config.yml"
            type: "ParallelRunStep"
            name: "parallel-run-step-1"
            allow_reuse: True
            arguments:
            - "--progress_update_timeout"
            - parameter:timeout_parameter
            - "--side_input"
            - side_input:SideInputData
            parameters:
                timeout_parameter:
                    source: PipelineParamTimeout
            inputs:
                InputData:
                    source: MyMinistInput
            side_inputs:
                SideInputData:
                    source: Output4
                    bind_mode: mount
            outputs:
                OutputDataStep2:
                    destination: Output5
                    datastore: workspaceblobstore
                    bind_mode: mount
包含多个步骤的管道
| YAML 键 | 说明 | 
|---|---|
| steps | 具有一个或多个 PipelineStep 定义的序列。 请注意,步骤 outputs的destination键将成为下一步inputs的source键。 | 
pipeline:
    name: SamplePipelineFromYAML
    description: Sample multistep YAML pipeline
    data_references:
        TitanicDS:
            dataset_name: 'titanic_ds'
            bind_mode: download
    default_compute: cpu-cluster
    steps:
        Dataprep:
            type: "PythonScriptStep"
            name: "DataPrep Step"
            compute: cpu-cluster
            runconfig: ".\\default_runconfig.yml"
            script_name: "prep.py"
            arguments:
            - '--train_path'
            - output:train_path
            - '--test_path'
            - output:test_path
            allow_reuse: True
            inputs:
                titanic_ds:
                    source: TitanicDS
                    bind_mode: download
            outputs:
                train_path:
                    destination: train_csv
                    datastore: workspaceblobstore
                test_path:
                    destination: test_csv
        Training:
            type: "PythonScriptStep"
            name: "Training Step"
            compute: cpu-cluster
            runconfig: ".\\default_runconfig.yml"
            script_name: "train.py"
            arguments:
            - "--train_path"
            - input:train_path
            - "--test_path"
            - input:test_path
            inputs:
                train_path:
                    source: train_csv
                    bind_mode: download
                test_path:
                    source: test_csv
                    bind_mode: download
计划
为管道定义计划时,该计划可以由数据存储触发,或根据某个时间间隔重复运行。 下面是用于定义计划的键:
| YAML 键 | 说明 | 
|---|---|
| description | 计划的说明。 | 
| recurrence | 包含重复设置(如果计划是重复性的)。 | 
| pipeline_parameters | 管道所需的任何参数。 | 
| wait_for_provisioning | 是否等待计划预配完成。 | 
| wait_timeout | 超时之前等待的秒数。 | 
| datastore_name | 要在其中监视已修改/已添加的 Blob 的数据存储。 | 
| polling_interval | 轮询已修改/已添加的 Blob 的间隔时间(分钟)。 默认值:5 分钟。 仅支持数据存储计划。 | 
| data_path_parameter_name | 要使用更改的 Blob 路径设置的数据路径管道参数的名称。 仅支持数据存储计划。 | 
| continue_on_step_failure | 当某个步骤失败时,是否继续执行提交的 PipelineRun 中的其他步骤。 如果提供此键,将替代管道的 continue_on_step_failure设置。 | 
| path_on_datastore | 可选。 要在其中监视已修改/已添加的 Blob 的数据存储上的路径。 该路径位于数据存储的容器下,因此,计划监视的实际路径是 container/ path_on_datastore。 如果没有此路径,将监视数据存储容器。 不会监视在path_on_datastore的子文件夹中进行的添加/修改。 仅支持数据存储计划。 | 
以下示例包含数据存储触发的计划的定义:
Schedule: 
      description: "Test create with datastore" 
      recurrence: ~ 
      pipeline_parameters: {} 
      wait_for_provisioning: True 
      wait_timeout: 3600 
      datastore_name: "workspaceblobstore" 
      polling_interval: 5 
      data_path_parameter_name: "input_data" 
      continue_on_step_failure: None 
      path_on_datastore: "file/path" 
定义重复性计划时,请在 recurrence 下使用以下键:
| YAML 键 | 说明 | 
|---|---|
| frequency | 计划的重复频率。 有效值为 "Minute"、"Hour"、"Day"、"Week"或"Month"。 | 
| interval | 计划的激发频率。 整数值为再次激发计划之前要等待的时间单位数。 | 
| start_time | 计划的开始时间。 该值的字符串格式为 YYYY-MM-DDThh:mm:ss。 如果未提供开始时间,则第一个工作负荷会即时运行,以后的工作负荷将按计划运行。 如果开始时间是过去的时间,则第一个工作负荷将在下一个计算的运行时间运行。 | 
| time_zone | 开始时间所用的时区。 如果未提供时区,将使用 UTC。 | 
| hours | 如果 frequency是"Day"或"Week",可以指定从 0 到 23 的一个或多个整数(用逗号分隔),表示一天中应运行管道的小时时间。 只能使用time_of_day或hours和minutes。 | 
| minutes | 如果 frequency是"Day"或"Week",可以指定从 0 到 59 的一个或多个整数(用逗号分隔),表示指定的小时中应运行管道的分钟时间。 只能使用time_of_day或hours和minutes。 | 
| time_of_day | 如果 frequency是"Day"或"Week",可以指定一天中要运行计划的时间。 该值的字符串格式为hh:mm。 只能使用time_of_day或hours和minutes。 | 
| week_days | 如果 frequency是"Week",可以指定应运行计划的一个或多个星期日期(用逗号分隔)。 有效值为"Monday"、"Tuesday"、"Wednesday"、"Thursday"、"Friday"、"Saturday"和"Sunday"。 | 
以下示例包含重复性计划的定义:
Schedule: 
    description: "Test create with recurrence" 
    recurrence: 
        frequency: Week # Can be "Minute", "Hour", "Day", "Week", or "Month". 
        interval: 1 # how often fires 
        start_time: 2019-06-07T10:50:00 
        time_zone: UTC 
        hours: 
        - 1 
        minutes: 
        - 0 
        time_of_day: null 
        week_days: 
        - Friday 
    pipeline_parameters: 
        'a': 1 
    wait_for_provisioning: True 
    wait_timeout: 3600 
    datastore_name: ~ 
    polling_interval: ~ 
    data_path_parameter_name: ~ 
    continue_on_step_failure: None 
    path_on_datastore: ~ 
