일괄 처리 엔드포인트에 대한 작업 및 입력 데이터 만들기

일괄 처리 엔드포인트를 사용하면 대량의 데이터에 대해 긴 일괄 처리 작업을 수행할 수 있습니다. 이러한 데이터는 다른 위치에 배치할 수 있습니다. 일부 형식의 일괄 처리 엔드포인트는 리터럴 매개 변수를 입력으로 받을 수도 있습니다. 이 자습서에서는 이러한 입력을 지정하는 방법과 지원되는 다양한 형식 또는 위치를 다룹니다.

엔드포인트를 호출하기 전에

일괄 처리 엔드포인트를 성공적으로 호출하고 작업을 만들려면 다음이 있는지 확인합니다.

  • 일괄 처리 엔드포인트 배포를 실행할 권한이 있습니다. AzureML 데이터 과학자, 기여자소유자 역할을 사용하여 배포를 실행할 수 있습니다. 사용자 지정 역할 정의를 보려면 일괄 처리 엔드포인트에 대한 권한 부여를 읽고 필요한 특정 권한을 알아봅니다.

  • 엔드포인트를 호출할 보안 주체를 나타내는 유효한 Microsoft Entra ID 토큰이 있습니다. 이 주체는 사용자 주체 또는 서비스 주체일 수 있습니다. 어쨌든 엔드포인트가 호출되면 토큰과 연결된 ID 아래에 일괄 처리 배포 작업이 만들어집니다. 테스트를 위해 아래에 설명된 대로 호출에 고유한 자격 증명을 사용할 수 있습니다.

    Azure CLI를 사용하여 대화형 또는 디바이스 코드 인증을 사용하여 로그인합니다.

    az login
    

    여러 유형의 자격 증명으로 인증하는 방법에 대해 자세히 알아보려면 일괄 처리 엔드포인트에 대한 권한 부여를 읽어보세요.

  • 엔드포인트가 배포되는 컴퓨팅 클러스터는 입력 데이터를 읽을 수 있는 액세스 권한이 있습니다.

    자격 증명이 없는 데이터 저장소 또는 외부 Azure Storage 계정을 데이터 입력으로 사용하는 경우 데이터 액세스를 위해 컴퓨팅 클러스터를 구성해야 합니다. 컴퓨팅 클러스터의 관리 ID는 스토리지 계정을 탑재하는 데 사용됩니다. 작업의 ID(호출자)는 여전히 기본 데이터를 읽는 데 사용되어 세분화된 액세스 제어를 달성할 수 있도록 합니다.

작업 만들기 기본 사항

일괄 처리 엔드포인트에서 작업을 만들려면 해당 작업을 호출해야 합니다. 호출은 Azure CLI, Python용 Azure Machine Learning SDK 또는 REST API 호출을 사용하여 수행할 수 있습니다. 다음 예에서는 처리를 위해 단일 입력 데이터 폴더를 수신하는 일괄 처리 엔드포인트 호출의 기본 사항을 보여 줍니다. 다양한 입력과 출력의 예를 보려면 입력과 출력 이해를 참조하세요.

일괄 처리 엔드포인트에서 invoke 작업을 사용합니다.

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

특정 배포 호출

일괄 처리 엔드포인트는 동일한 엔드포인트에서 여러 배포를 호스트할 수 있습니다. 사용자가 달리 지정하지 않는 한 기본 엔드포인트가 사용됩니다. 다음과 같이 사용되는 배포를 변경할 수 있습니다.

인수 --deployment-name 또는 -d를 사용하여 배포 이름을 지정합니다.

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --deployment-name $DEPLOYMENT_NAME \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

작업 속성 구성

호출 시 만들어진 작업의 일부 속성을 구성할 수 있습니다.

참고 항목

작업 속성 구성은 현재 파이프라인 구성 요소 배포가 포함된 일괄 처리 엔드포인트에서만 사용할 수 있습니다.

실험 이름 구성

실험 이름을 지정하려면 인수 --experiment-name을 사용합니다.

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --experiment-name "my-batch-job-experiment" \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

입출력 이해

일괄 처리 엔드포인트는 소비자가 일괄 작업을 만드는 데 사용할 수 있는 내구성 있는 API를 제공합니다. 동일한 인터페이스를 사용하여 배포에 필요한 입력과 출력을 지정할 수 있습니다. 입력을 사용하여 엔드포인트가 작업을 수행하는 데 필요한 정보를 전달합니다.

일괄 처리 엔드포인트에서 입력과 출력이 사용되는 방식을 보여 주는 다이어그램.

Batch 엔드포인트는 다음 두 가지 유형의 입력을 지원합니다.

  • 특정 스토리지 위치 또는 Azure Machine Learning 자산에 대한 포인터인 데이터 입력.
  • 작업에 전달하려는 리터럴 값(예: 숫자 또는 문자열)인 리터럴 입력.

입출력의 수와 형식은 일괄 처리 배포 형식에 따라 다릅니다. 모델 배포에는 항상 1개의 데이터 입력이 필요하고 1개의 데이터 출력이 생성됩니다. 리터럴 입력은 지원되지 않습니다. 그러나 파이프라인 구성 요소 배포는 엔드포인트를 빌드하는 보다 일반적인 구문을 제공하고 입력(데이터 및 리터럴) 및 출력 수를 지정할 수 있습니다.

다음 표에는 일괄 처리 배포에 대한 입력 및 출력이 요약되어 있습니다.

배포 유형 입력 번호 지원되는 입력 형식 출력 번호 지원되는 출력 형식
모델 배포 1 데이터 입력 1 데이터 출력
파이프라인 구성 요소 배포 [0..N] 데이터 입력리터럴 입력 [0..N] 데이터 출력

입력과 출력에는 항상 이름이 지정됩니다. 이러한 이름은 이를 식별하고 호출 중에 실제 값을 전달하는 키 역할을 합니다. 모델 배포의 경우 항상 1개의 입출력이 필요하므로 호출 중에 이름이 무시됩니다. "sales_estimation"와 같이 사용 사례를 가장 잘 설명하는 이름을 할당할 수 있습니다.

데이터 입력

데이터 입력은 데이터가 배치된 위치를 가리키는 입력을 나타냅니다. 일괄 처리 엔드포인트는 일반적으로 많은 양의 데이터를 소비하므로 호출 요청의 일부로 입력 데이터를 전달할 수 없습니다. 대신 데이터를 찾기 위해 일괄 처리 엔드포인트가 이동해야 하는 위치를 지정합니다. 성능 개선을 위해 입력 데이터가 대상 컴퓨팅에 탑재되고 스트리밍됩니다.

일괄 처리 엔드포인트는 다음 스토리지 옵션에 있는 파일 읽기를 지원합니다.

  • 폴더(uri_folder) 및 파일(uri_file)을 포함한 Azure Machine Learning 데이터 자산.
  • Azure Blob Storage, Azure Data Lake Storage Gen1 및 Azure Data Lake Storage Gen2를 포함한 Azure Machine Learning 데이터 저장소.
  • Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2 및 Azure Blob Storage를 포함한 Azure Storage 계정.
  • 로컬 데이터 폴더/파일(Azure Machine Learning CLI 또는 Python용 Azure Machine Learning SDK). 그러나 이 작업으로 인해 작업 중인 작업 영역의 기본 Azure Machine Learning 데이터 저장소에 로컬 데이터가 업로드됩니다.

Important

사용 중단 알림: FileDataset(V1) 형식의 데이터 세트는 더 이상 사용되지 않으며 나중에 사용 중지될 예정입니다. 이 기능에 의존하는 기존 일괄 처리 엔드포인트는 계속 작동하지만 GA CLIv2(2.4.0 이상) 또는 GA REST API(2022-05-01 이상)로 만들어진 일괄 처리 엔드포인트는 V1 데이터 세트를 지원하지 않습니다.

리터럴 입력

리터럴 입력은 문자열, 숫자, 부울 값과 같이 호출 시 표시되고 분석될 수 있는 입력을 나타냅니다. 일반적으로 리터럴 입력을 사용하여 파이프라인 구성 요소 배포의 일부로 매개 변수를 엔드포인트에 전달합니다. 일괄 처리 엔드포인트는 다음 리터럴 형식을 지원합니다.

  • string
  • boolean
  • float
  • integer

리터럴 입력은 파이프라인 구성 요소 배포에서만 지원됩니다. 리터럴 입력을 사용하여 작업 만들기를 참조하여 지정하는 방법을 알아봅니다.

데이터 출력

데이터 출력은 일괄 작업의 결과가 일괄 처리되어야 하는 위치를 나타냅니다. 출력은 이름으로 식별되며 Azure Machine Learning은 명명된 각 출력에 고유한 경로를 자동으로 할당합니다. 그러나 필요한 경우 다른 경로를 지정할 수 있습니다.

Important

Batch 엔드포인트는 Azure Blob Storage 데이터 저장소에서 출력 작성만 지원합니다. 계층 구조 네임스페이스가 사용하도록 설정된 스토리지 계정(Azure Datalake Gen2 또는 ADLS Gen2라고도 함)에 써야 하는 경우 해당 스토리지 서비스는 완전히 호환되므로 Azure Blob Storage 데이터 저장소로 등록할 수 있습니다. 이러한 방식으로 일괄 처리 엔드포인트의 출력을 ADLS Gen2에 쓸 수 있습니다.

데이터 입력을 사용하여 작업 만들기

다음 예제에서는 작업을 만들고 데이터 자산, 데이터 저장소Azure Storage 계정에서 데이터 입력을 가져오는 방법을 보여줍니다.

데이터 자산의 입력 데이터

Azure Machine Learning 데이터 자산(이전의 데이터 세트)은 작업에 대한 입력으로 지원됩니다. 다음 단계에 따라 Azure Machine Learning의 등록된 데이터 자산에 저장된 데이터를 사용하여 일괄 처리 엔드포인트 작업을 실행합니다.

Warning

테이블(MLTable) 형식의 데이터 자산은 현재 지원되지 않습니다.

  1. 먼저 데이터 자산을 만듭니다. 이 데이터 자산은 일괄 처리 엔드포인트를 사용하여 병렬로 처리할 여러 CSV 파일이 있는 폴더로 구성됩니다. 데이터가 데이터 자산으로 이미 등록되어 있는 경우 이 단계를 건너뛰어도 됩니다.

    YAML에서 데이터 자산 정의를 만듭니다.

    heart-dataset-unlabeled.yml

    $schema: https://azuremlschemas.azureedge.net/latest/data.schema.json
    name: heart-dataset-unlabeled
    description: An unlabeled dataset for heart classification.
    type: uri_folder
    path: heart-classifier-mlflow/data
    

    그런 다음, 데이터 자산을 만듭니다.

    az ml data create -f heart-dataset-unlabeled.yml
    
  2. 입력 또는 요청을 만듭니다.

    DATASET_ID=$(az ml data show -n heart-dataset-unlabeled --label latest | jq -r .id)
    

    참고 항목

    데이터 자산 ID는 /subscriptions/<subscription>/resourcegroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/data/<data-asset>/versions/<version>과 같습니다. 입력을 지정하는 방법으로 azureml:/<datasset_name>@latest를 사용할 수도 있습니다.

  3. 엔드포인트를 실행합니다.

    --set 인수를 사용하여 입력을 지정합니다.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$DATASET_ID
    

    모델 배포를 제공하는 엔드포인트의 경우 모델 배포에는 항상 하나의 데이터 입력만 필요하므로 --input 인수를 사용하여 데이터 입력을 지정할 수 있습니다.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $DATASET_ID
    

    인수 --set는 여러 입력이 지정될 때 긴 명령을 생성하는 경향이 있습니다. 이러한 경우 입력을 YAML 파일에 배치하고 --file을 사용하여 엔드포인트 호출에 필요한 입력을 지정합니다.

    inputs.yml

    inputs:
      heart_dataset: azureml:/<datasset_name>@latest
    
    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

데이터 저장소의 입력 데이터

Azure Machine Learning에 등록된 데이터 저장소의 데이터는 일괄 처리 배포 작업에서 직접 참조할 수 있습니다. 이 예제에서는 먼저 Azure Machine Learning 작업 영역의 기본 데이터 저장소에 일부 데이터를 업로드한 다음, 일괄 처리 배포를 실행합니다. 다음 단계에 따라 데이터 저장소에 저장된 데이터를 사용하여 일괄 처리 엔드포인트 작업을 실행합니다.

  1. Azure Machine Learning 작업 영역의 기본 데이터 저장소에 액세스합니다. 데이터가 다른 저장소에 있는 경우 해당 저장소를 대신 사용할 수 있습니다. 기본 데이터 저장소를 사용할 필요는 없습니다.

    DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
    

    참고 항목

    데이터 저장소 ID는 /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>와 같습니다.

    작업 영역의 기본 Blob 데이터 저장소를 workspaceblobstore라고 합니다. 작업 영역에서 기본 데이터 저장소의 리소스 ID를 이미 알고 있는 경우 이 단계를 건너뛰어도 됩니다.

  2. 일부 샘플 데이터를 데이터 저장소에 업로드해야 합니다. 이 예제에서는 Blob Storage 계정의 폴더 heart-disease-uci-unlabeled에 있는 폴더 sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/data에 리포지토리에 포함된 샘플 데이터를 이미 업로드했다고 가정합니다. 계속 진행하기 전에 이 작업을 수행했는지 확인합니다.

  3. 입력 또는 요청을 만듭니다.

    다음 변수에 파일 경로를 추가합니다.

    DATA_PATH="heart-disease-uci-unlabeled"
    INPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
    

    참고 항목

    뒤에 나오는 항목이 포함된 경로임을 나타내기 위해 경로 paths가 데이터 저장소의 리소스 ID에 추가되는 방법을 확인하세요.

    입력을 지정하는 방법으로 azureml://datastores/<data-store>/paths/<data-path>를 사용할 수도 있습니다.

  4. 엔드포인트를 실행합니다.

    --set 인수를 사용하여 입력을 지정합니다.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_PATH
    

    모델 배포를 제공하는 엔드포인트의 경우 모델 배포에는 항상 하나의 데이터 입력만 필요하므로 --input 인수를 사용하여 데이터 입력을 지정할 수 있습니다.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_PATH --input-type uri_folder
    

    인수 --set는 여러 입력이 지정될 때 긴 명령을 생성하는 경향이 있습니다. 이러한 경우 입력을 YAML 파일에 배치하고 --file을 사용하여 엔드포인트 호출에 필요한 입력을 지정합니다.

    inputs.yml

    inputs:
      heart_dataset:
        type: uri_folder
        path: azureml://datastores/<data-store>/paths/<data-path>
    
    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

    데이터가 파일인 경우 대신 uri_file을 형식으로 사용합니다.

Azure Storage 계정의 입력 데이터

Azure Machine Learning 일괄 처리 엔드포인트는 퍼블릭 및 프라이빗 둘 다에 해당하는 Azure Storage 계정의 클라우드 위치에서 데이터를 읽을 수 있습니다. 스토리지 계정에 저장된 데이터를 사용하여 일괄 처리 엔드포인트 작업을 실행하려면 다음 단계를 사용합니다.

참고 항목

스토리지 accoutns에서 데이터를 성공적으로 읽는 데 필요한 추가 구성에 대해 자세히 알아보려면 데이터 액세스에 대한 컴퓨팅 클러스터 구성 섹션을 확인하세요.

  1. 입력 또는 요청을 만듭니다.

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
    

    데이터가 파일인 경우:

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data/heart.csv"
    
  2. 엔드포인트를 실행합니다.

    --set 인수를 사용하여 입력을 지정합니다.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_DATA
    

    모델 배포를 제공하는 엔드포인트의 경우 모델 배포에는 항상 하나의 데이터 입력만 필요하므로 --input 인수를 사용하여 데이터 입력을 지정할 수 있습니다.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_DATA --input-type uri_folder
    

    인수 --set는 여러 입력이 지정될 때 긴 명령을 생성하는 경향이 있습니다. 이러한 경우 입력을 YAML 파일에 배치하고 --file을 사용하여 엔드포인트 호출에 필요한 입력을 지정합니다.

    inputs.yml

    inputs:
      heart_dataset:
        type: uri_folder
        path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
    
    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

    데이터가 파일인 경우 대신 uri_file을 형식으로 사용합니다.

리터럴 입력을 사용하여 작업 만들기

파이프라인 구성 요소 배포는 리터럴 입력을 사용할 수 있습니다. 다음 예에서는 append 값을 사용하여 string 형식의 score_mode라는 입력을 지정하는 방법을 보여줍니다.

입력을 YAML 파일에 배치하고 --file을 사용하여 엔드포인트 호출에 필요한 입력을 지정합니다.

inputs.yml

inputs:
  score_mode:
    type: string
    default: append
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml

값을 지정하기 위해 --set 인수를 사용할 수도 있습니다. 그러나 여러 입력이 지정되면 긴 명령을 생성하는 경향이 있습니다.

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
    --set inputs.score_mode.type="string" inputs.score_mode.default="append"

데이터 출력을 사용하여 작업 만들기

다음 예에서는 score라는 출력이 배치되는 위치를 변경하는 방법을 보여 줍니다. 완전성을 높이기 위해 이 예에서는 heart_dataset라는 입력도 구성합니다.

  1. Azure Machine Learning 작업 영역의 기본 데이터 저장소를 사용하여 출력을 저장합니다. Blob Storage 계정이라면 작업 영역의 다른 데이터 스토리지를 사용할 수 있습니다.

    DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
    

    참고 항목

    데이터 저장소 ID는 /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>와 같습니다.

  2. 데이터 출력을 만듭니다.

    DATA_PATH="batch-jobs/my-unique-path"
    OUTPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
    

    완전성을 위해 데이터 입력도 만들어 봅니다.

    INPUT_PATH="https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
    

    참고 항목

    뒤에 나오는 항목이 포함된 경로임을 나타내기 위해 경로 paths가 데이터 저장소의 리소스 ID에 추가되는 방법을 확인하세요.

  3. 배포를 실행합니다.

    인수 --set를 사용하여 입력을 지정합니다.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.path=$INPUT_PATH \
        --set outputs.score.path=$OUTPUT_PATH
    

다음 단계