다음을 통해 공유


CLI(v2) 병렬 작업 YAML 스키마

적용 대상: Azure CLI ml 확장 v2(현재)

Important

병렬 작업은 Azure Machine Learning 파이프라인 작업 내의 단일 단계로만 사용할 수 있습니다. 따라서 현재 병렬 작업에 대한 원본 JSON 스키마가 없습니다. 이 문서에는 파이프라인에서 병렬 작업을 만드는 경우 유효한 키와 해당 값이 나와 있습니다.

참고 항목

이 문서에 자세히 설명된 YAML 구문은 최신 버전의 ML CLI v2 확장에 대한 JSON 스키마를 기반으로 합니다. 이 구문은 최신 버전의 ML CLI v2 확장에서만 작동하도록 보장됩니다. https://azuremlschemasprod.azureedge.net/에서 이전 확장 버전에 대한 스키마를 찾을 수 있습니다.

YAML 구문

형식 설명 허용된 값 Default value
type const 필수입니다. 작업의 유형입니다. parallel
inputs 개체 병렬 작업에 대한 입력 사전입니다. 키는 작업의 컨텍스트 내에서 입력에 대한 이름이고 값은 입력 값입니다.

${{ inputs.<input_name> }} 식을 사용하여 program_arguments에서 입력을 참조할 수 있습니다.

병렬 작업 입력은 ${{ parent.inputs.<input_name> }} 식을 사용하여 파이프라인 입력에서 참조할 수 있습니다. 병렬 단계의 입력을 파이프라인 입력에 바인딩하는 방법은 파이프라인 작업의 단계 간에 입력 및 출력 바인딩을 위한 식 구문을 참조하세요.
inputs.<input_name> 숫자, 정수, 부울, 문자열, 개체 리터럴 값(형식 번호, 정수, 부울 또는 문자열) 또는 작업 입력 데이터 사양이 포함된 개체 중 하나입니다.
outputs 개체 병렬 작업의 출력 구성 사전. 키는 작업의 컨텍스트 내에서 출력에 대한 이름이고 값은 출력 구성입니다.

${{ parents.outputs.<output_name> }} 식을 사용하여 파이프라인 출력에서 ​​병렬 작업 출력을 참조할 수 있습니다. 병렬 단계의 출력을 파이프라인 출력에 바인딩하는 방법은 파이프라인 작업의 단계 간 입력 및 출력을 바인딩하는 식 구문을 참조하세요.
outputs.<output_name> 개체 개체를 비워 둘 수 있습니다. 이 경우 기본적으로 출력은 형식 uri_folder 이며 Azure Machine Learning은 다음 템플릿화된 경로를 {settings.datastore}/azureml/{job-name}/{output-name}/기반으로 출력에 대한 출력 위치를 시스템 생성합니다. 출력 디렉터리에 대한 파일은 읽기-쓰기 탑재를 통해 작성됩니다. 출력에 대해 다른 모드를 지정하려면 작업 출력 사양이 포함된 개체를 제공합니다.
compute string 작업을 실행할 컴퓨팅 대상의 이름입니다. 값은 작업 영역의 기존 컴퓨팅에 대한 참조(azureml:<compute_name> 구문 사용)이거나 로컬 실행을 지정하는 local일 수 있습니다.

파이프라인에서 병렬 작업을 사용하는 경우 이 설정을 비워 둘 수 있습니다. 이 경우 컴퓨팅은 파이프라인의 default_compute에서 자동으로 선택됩니다.
local
task 개체 필수입니다. 병렬 작업에 대한 분산 작업을 정의하는 템플릿입니다. task 키의 특성을 참조하세요.
input_data 개체 필수입니다. 병렬 작업을 실행하기 위해 미니 일괄 처리로 분할할 입력 데이터를 정의합니다. ${{ inputs.<input_name> }} 식을 사용하여 inputs 병렬 작업 중 하나를 참조하는 경우에만 적용할 수 있습니다.
mini_batch_size string 입력을 분할할 각 미니 일괄 처리의 크기를 정의합니다.

input_data가 폴더 또는 파일 집합인 경우 이 숫자는 각 미니 일괄 처리에 대한 파일 수를 정의합니다. 예를 들어 10, 100입니다.
input_data가 mltable의 테이블 형식 데이터인 경우 이 숫자는 각 미니 일괄 처리에 대한 대략적인 물리적 크기를 정의합니다. 예를 들어 100kb, 100mb입니다.
1
partition_keys list 데이터 세트를 미니 일괄 처리로 분할하는 데 사용되는 키입니다.

지정할 경우 키가 같은 데이터가 동일한 미니 일괄 처리로 분할됩니다. 둘 다 partition_keys mini_batch_size 지정되면 파티션 키가 적용됩니다.
mini_batch_error_threshold 정수 이 병렬 작업에서 무시할 수 있는, 실패한 미니 일괄 처리 수를 정의합니다. 실패한 미니 일괄 처리 수가 이 임계값보다 높으면 병렬 작업이 실패한 것으로 표시됩니다.

다음과 같은 경우 미니 일괄 처리가 실패한 것으로 표시됩니다.
- run()의 반환 수가 미니 일괄 처리 입력 수보다 적은 경우
- 사용자 지정 run() 코드에서 예외를 catch한 경우

“-1”은 기본 수로, 병렬 작업 중에 실패한 모든 미니 일괄 처리를 무시한다는 의미입니다.
[-1, int.max] -1
logging_level string 사용자 로그 파일에 덤프할 로그 수준을 정의합니다. 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 키의 특성

형식 설명 허용된 값 Default value
type const 필수입니다. 작업의 유형입니다. 현재 run_function에만 적용됩니다.

모드에서는 run_function 실행 함수 및 program_arguments 인수를 사용하여 Python 스크립트를 제공하고 codeentry_script정의해야 합니다. 참고: 병렬 작업은 이 모드에서 Python 스크립트만 지원합니다.
run_function run_function
code string 업로드하여 작업에 사용할 소스 코드 디렉터리의 로컬 경로입니다.
entry_script string 미리 정의된 병렬 함수의 구현을 포함하는 Python 파일입니다. 자세한 내용은 병렬 작업에 대한 항목 스크립트 준비를 참조하세요.
environment 문자열 또는 개체 필수 작업을 실행하는 데 사용할 환경입니다. 값은 작업 영역의 버전이 지정된 기존 환경에 대한 참조이거나 인라인 환경 사양일 수 있습니다.

기존 환경을 참조하려면 azureml:<environment_name>:<environment_version> 구문 또는 azureml:<environment_name>@latest(최신 버전의 환경 참조)를 사용합니다.

인라인 환경을 정의하려면 환경 스키마를 따릅니다. 인라인 환경에서 지원되지 않으므로 nameversion 속성을 제외합니다.
program_arguments string 항목 스크립트에 전달할 인수입니다. 입력 또는 출력에 대한 "--<arg_name> ${{inputs.<intput_name>}}" 참조를 포함할 수 있습니다.

병렬 작업은 병렬 실행 구성을 설정하도록 미리 정의된 인수 목록을 제공합니다. 자세한 내용은 미리 정의된 병렬 작업 인수를 참조하세요.
append_row_to string 각 미니 일괄 처리 실행의 모든 반환을 집계하고 이 파일에 출력합니다. ${{outputs.<output_name>}} 식을 사용하여 병렬 작업의 출력 중 하나를 참조할 수 있습니다.

작업 입력

형식 설명 허용된 값 기본값
type string 작업 입력의 형식입니다. mltable 메타 파일이 있는 위치를 가리키는 입력 데이터의 경우 mltable을 지정하거나, 폴더 원본을 가리키는 입력 데이터의 경우 uri_folder를 지정합니다. mltable, uri_folder uri_folder
path string 입력으로 사용할 데이터의 경로입니다. 값은 다음과 같은 몇 가지 방법으로 지정할 수 있습니다.

- 데이터 원본 파일 또는 폴더에 대한 로컬 경로(예: path: ./iris.csv). 데이터는 작업 제출 중에 업로드됩니다.

- 입력으로 사용할 파일 또는 폴더에 대한 클라우드 경로의 URI입니다. 지원되는 URI 형식은 azureml, https, wasbs, abfss, adl입니다. 자세한 내용은 azureml:// URI 형식을 사용하는 방법에 대한 핵심 yaml 구문을 참조하세요.

- 입력으로 사용할 기존 등록된 Azure Machine Learning 데이터 자산입니다. 등록된 데이터 자산을 참조하려면 azureml:<data_name>:<data_version> 구문 또는 azureml:<data_name>@latest(해당 데이터 자산의 최신 버전 참조)를 사용합니다(예: path: azureml:cifar10-data:1 또는 path: azureml:cifar10-data@latest).
mode string 컴퓨팅 대상에 데이터를 제공하는 방법의 모드입니다.

읽기 전용 탑재(ro_mount)의 경우 데이터는 탑재 경로로 사용됩니다. 폴더는 폴더로 탑재되고 파일은 파일로 탑재됩니다. Azure Machine Learning은 탑재 경로에 대한 입력을 확인합니다.

download 모드의 경우 데이터는 컴퓨팅 대상에 다운로드됩니다. Azure Machine Learning은 다운로드한 경로에 대한 입력을 확인합니다.

데이터 자체를 탑재하거나 다운로드하는 대신 데이터 아티팩트의 스토리지 위치 URL만 원하는 경우 direct 모드를 사용할 수 있습니다. 스토리지 위치의 URL을 작업 입력으로 전달합니다. 이 경우 스토리지에 액세스하기 위한 자격 증명을 처리하는 것은 사용자의 책임입니다.
ro_mount, , downloaddirect ro_mount

작업 출력

형식 설명 허용된 값 기본값
type string 작업 출력의 형식입니다. 기본 uri_folder 형식의 경우 출력은 폴더에 해당합니다. uri_folder uri_folder
mode string 출력 파일을 대상 스토리지에 제공하는 방법의 모드입니다. 읽기-쓰기 탑재 모드(rw_mount)의 경우 출력 디렉터리는 탑재된 디렉터리가 됩니다. 업로드 모드의 경우 작성된 파일은 작업 종료 시 업로드됩니다. rw_mount, upload rw_mount

미리 정의된 병렬 작업 인수

설명 허용된 값 Default value
--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 False
--metrics_name_prefix 이 병렬 작업에서 메트릭의 사용자 지정 접두사를 제공합니다.
--push_metrics_to_parent 메트릭을 부모 파이프라인 작업에 푸시할지 여부에 대한 부울 옵션입니다. True, False False
--resource_monitor_interval 노드 리소스 사용량(예: cpu, 메모리)을 "logs/sys/perf" 경로 아래의 로그 폴더에 덤프하는 시간 간격(초)입니다.

참고: 덤프 리소스 로그를 자주 사용하면 미니 일괄 처리의 실행 속도가 약간 느려집니다. 리소스 사용량 덤프를 중지하려면 이 값을 ‘0’으로 설정합니다.
[0, int.max] 600

설명

az ml job 명령은 Azure Machine Learning 작업을 관리하는 데 사용할 수 있습니다.

예제

예제는 예제 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}}

다음 단계