적용 대상:
Azure CLI ml 확장 v2(현재)
Python SDK azure-ai-ml v2(현재)
일괄 처리 엔드포인트를 사용하면 대량의 데이터에 대해 유추를 실행하는 모델을 배포할 수 있습니다. 이러한 엔드포인트는 일괄 처리 점수 매기기를 위한 호스팅 모델을 간소화하므로 인프라 대신 기계 학습에 집중할 수 있습니다.
일괄 처리 엔드포인트를 사용하여 다음과 같은 경우 모델을 배포합니다.
- 유추를 실행하는 데 더 오래 걸리는 비용이 많이 드는 모델을 사용합니다.
- 여러 파일에 분산된 대량의 데이터에 대해 유추를 수행합니다.
- 짧은 대기 시간이 필요하지 않습니다.
- 병렬 처리를 활용합니다.
이 문서에서는 일괄 처리 엔드포인트를 사용하여 클래식 MNIST(수정된 국립 표준 기술 연구소) 숫자 인식 문제를 해결하는 기계 학습 모델을 배포하는 방법을 보여 줍니다. 배포된 모델은 이미지 파일과 같은 많은 양의 데이터에 대해 일괄 처리 추론을 수행합니다. 이 프로세스는 Torch를 사용하여 빌드된 모델의 일괄 배포를 만드는 것으로 시작합니다. 이 배포는 엔드포인트의 기본값이 됩니다. 나중에 TensorFlow(Keras)를 사용하여 빌드된 모델의 두 번째 배포를 만들고 , 두 번째 배포를 테스트하고, 엔드포인트의 기본 배포로 설정합니다.
필수 구성 요소
이 문서의 단계를 수행하기 전에 다음과 같은 필수 구성 요소가 있는지 확인합니다.
Azure 구독 Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다. Azure Machine Learning 평가판 또는 유료 버전을 사용해 보세요.
Azure Machine Learning 작업 영역 작업 영역이 없으면 작업 영역 관리 방법 문서의 단계를 사용하여 작업 영역을 만듭니다.
다음 작업을 수행하려면 작업 영역에 다음 권한이 있는지 확인합니다.
일괄 처리 엔드포인트 및 배포를 만들고 관리하기:
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*를 허용하는 소유자, 기여자 또는 사용자 지정 역할을 사용합니다.작업 영역 리소스 그룹에서 ARM 배포 만들기: 작업 영역이 배포된 리소스 그룹에서
Microsoft.Resources/deployments/write를 허용하는 소유자, 기여자 또는 사용자 지정 역할을 사용합니다.
Azure Machine Learning을 사용하려면 다음 소프트웨어를 설치해야 합니다.
적용 대상:
Azure CLI ml 확장 v2(현재)Azure CLI 및
mlAzure Machine Learning용 확장입니다.az extension add -n ml
예제 리포지토리 복제
이 문서의 예는 azureml-examples 리포지토리에 포함된 코드 샘플을 기반으로 합니다. YAML 및 기타 파일을 복사/붙여넣기하지 않고 로컬로 명령을 실행하려면 먼저 리포지토리를 복제한 후 디렉터리를 폴더로 변경합니다.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli/endpoints/batch/deploy-models/mnist-classifier
시스템 준비
작업 영역에 연결
먼저 작업하는 Azure Machine Learning 작업 영역에 연결합니다.
Azure CLI에 대한 기본값을 아직 설정하지 않은 경우 기본 설정을 저장합니다. 구독, 작업 영역, 리소스 그룹 및 위치에 대한 값을 여러 번 입력하지 않도록 하려면 다음 코드를 실행합니다.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> ___location=<___location>
컴퓨팅 만들기
일괄 처리 엔드포인트는 컴퓨팅 클러스터에서 실행되고 Azure Machine Learning 컴퓨팅 클러스터(AmlCompute) 및 Kubernetes 클러스터를 모두 지원합니다. 클러스터는 공유 리소스이므로 하나의 클러스터가 하나 이상의 일괄 처리 배포를 호스트할 수 있습니다(원하는 경우 다른 워크로드와 함께).
다음 코드와 같이 이름이 batch-cluster인 컴퓨팅을 만듭니다. 필요에 따라 조정하고 azureml:<your-compute-name>를 사용하여 컴퓨팅을 참조하십시오.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
참고
일괄 처리 엔드포인트가 호출되고 일괄 처리 점수 매기기 작업이 제출될 때까지 클러스터가 0 노드에 남아 있기 때문에 이 시점에서 컴퓨팅에 대한 요금이 청구되지 않습니다. 컴퓨팅 비용에 대한 자세한 내용은 AmlCompute에 대한 비용 관리 및 최적화를 참조하세요.
일괄 처리 엔드포인트 만들기
일괄 처리 엔드포인트는 클라이언트가 일괄 처리 점수 매기기 작업을 트리거하기 위해 호출하는 HTTPS 엔드포인트입니다. 일괄 처리 점수 매기기 작업은 여러 입력을 채점합니다. 일괄 처리 배포는 일괄 처리 채점(또는 일괄 처리 추론)을 수행하는 모델을 호스팅하는 컴퓨팅 리소스 집합입니다. 하나의 일괄 처리 엔드포인트에 여러 일괄 처리 배포가 있을 수 있습니다. 일괄 처리 엔드포인트에 대한 자세한 내용은 일괄 처리 엔드포인트란?을 참조하세요.
팁
일괄 처리 배포 중 하나가 엔드포인트의 기본 배포 역할을 합니다. 엔드포인트가 호출되면 기본 배포에서 일괄 처리 채점을 수행합니다. 일괄 처리 엔드포인트 및 배포에 대한 자세한 내용은 일괄 처리 엔드포인트 및 일괄 처리 배포를 참조하세요.
엔드포인트를 명명합니다. 엔드포인트의 이름은 엔드포인트의 URI에 포함되어 있으므로 Azure 지역 내에서 고유해야 합니다. 예를 들어,
mybatchendpoint에는 이름이westus2인 일괄 처리 엔드포인트가 하나만 있을 수 있습니다.일괄 처리 엔드포인트 구성
다음 YAML 파일은 일괄 처리 엔드포인트를 정의합니다. 일괄 처리 엔드포인트를 만들기 위해 CLI 명령과 함께 이 파일을 사용합니다.
endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json name: mnist-batch description: A batch endpoint for scoring images from the MNIST dataset. tags: type: deep-learning다음 표에서는 엔드포인트의 주요 속성에 대해 설명합니다. 전체 일괄 처리 엔드포인트 YAML 스키마는 CLI(v2) 일괄 처리 엔드포인트 YAML 스키마를 참조하세요.
키 설명 name일괄 처리 엔드포인트의 이름입니다. Azure 지역 수준에서 고유해야 합니다. description일괄 처리 엔드포인트에 대한 설명입니다. 이 속성은 선택 사항입니다. tags엔드포인트에 포함할 태그입니다. 이 속성은 선택 사항입니다. 엔드포인트 만들기:
일괄 처리 배포 만들기
모델 배포는 실제 유추를 수행하는 모델을 호스트하는 데 필요한 리소스의 집합입니다. 일괄 처리 모델 배포를 만들려면 다음 항목이 필요합니다.
- 작업 영역에 등록된 모델
- 모델 채점하는 코드
- 모델의 종속성이 설치된 환경
- 미리 생성된 컴퓨팅 및 리소스 설정
먼저 배포할 모델, 즉 MNIST(인기 있는 숫자 인식 문제)에 대한 Torch 모델을 등록합니다. 일괄 처리 배포는 작업 영역에 등록된 모델만 배포할 수 있습니다. 배포하려는 모델이 이미 등록된 경우 이 단계를 건너뛸 수 있습니다.
팁
모델은 엔드포인트가 아닌 배포와 연결됩니다. 즉, 서로 다른 모델(또는 모델 버전)이 서로 다른 배포에 배포되는 한 단일 엔드포인트는 동일한 엔드포인트에서 서로 다른 모델(또는 모델 버전)을 제공할 수 있습니다.
이제 점수 매기기 스크립트를 만들 차례입니다. 일괄 처리 배포는 지정된 모델이 어떻게 실행되고 입력 데이터가 어떻게 처리되어야 하는지를 나타내는 채점 스크립트가 필요합니다. 일괄 처리 엔드포인트는 Python에서 만든 스크립트를 지원합니다. 이 경우 숫자를 나타내는 이미지 파일을 읽고 해당 숫자를 출력하는 모델을 배포합니다. 채점 스크립트는 다음과 같습니다.
참고
MLflow 모델의 경우 Azure Machine Learning에서 채점 스크립트를 자동으로 생성하므로 제공할 필요가 없습니다. 모델이 MLflow 모델인 경우 이 단계를 건너뛸 수 있습니다. 일괄 처리 엔드포인트가 MLflow 모델에서 작동하는 방식에 대한 자세한 내용은 일괄 처리 배포에서 MLflow 모델 사용 문서를 참조하세요.
경고
일괄 처리 엔드포인트에서 AutoML(자동화된 Machine Learning) 모델을 배포하는 경우 AutoML에서 제공하는 채점 스크립트는 온라인 엔드포인트에 대해서만 작동하며 일괄 처리 실행을 위해 설계되지 않았습니다. 일괄 배포를 위한 채점 스크립트를 만드는 방법에 대한 지침은 일괄 처리 배포에 대한 채점 스크립트 작성을 참조하세요.
deployment-torch/code/batch_driver.py
import os import pandas as pd import torch import torchvision import glob from os.path import basename from mnist_classifier import MnistClassifier from typing import List def init(): global model global device # AZUREML_MODEL_DIR is an environment variable created during deployment # It is the path to the model folder model_path = os.environ["AZUREML_MODEL_DIR"] model_file = glob.glob(f"{model_path}/*/*.pt")[-1] model = MnistClassifier() model.load_state_dict(torch.load(model_file)) model.eval() device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") def run(mini_batch: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] with torch.no_grad(): for image_path in mini_batch: image_data = torchvision.io.read_image(image_path).float() batch_data = image_data.expand(1, -1, -1, -1) input = batch_data.to(device) # perform inference predict_logits = model(input) # Compute probabilities, classes and labels predictions = torch.nn.Softmax(dim=-1)(predict_logits) predicted_prob, predicted_class = torch.max(predictions, axis=-1) results.append( { "file": basename(image_path), "class": predicted_class.numpy()[0], "probability": predicted_prob.numpy()[0], } ) return pd.DataFrame(results)일괄 처리 배포가 실행되는 환경을 만듭니다. 이 환경에는 일괄 처리 엔드포인트에 필요한 패키지
azureml-core및azureml-dataset-runtime[fuse]과 실행을 위해 코드에 필요한 종속성이 포함되어야 합니다. 이 경우 종속성은conda.yaml파일에서 캡처되었습니다.deployment-torch/environment/conda.yaml
name: mnist-env channels: - conda-forge dependencies: - python=3.8.5 - pip<22.0 - pip: - torch==1.13.0 - torchvision==0.14.0 - pytorch-lightning - pandas - azureml-core - azureml-dataset-runtime[fuse]중요합니다
패키지
azureml-core및azureml-dataset-runtime[fuse]는 일괄 배포에 필요하며 환경 종속성에 포함되어야 합니다.다음과 같이 환경을 지정합니다.
측면 메뉴의 환경 탭으로 이동합니다.
사용자 지정 환경 만들기를> 선택합니다.
환경 이름을 입력합니다(이 경우
torch-batch-env).환경 원본 선택에서 선택적 conda 파일과 함께 기존 Docker 이미지 사용을 선택합니다.
컨테이너 레지스트리 이미지 경로에
mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04를 입력합니다.다음을 선택하여 "사용자 지정" 섹션으로 이동합니다.
GitHub 리포지토리에서 deployment-torch/environment/conda.yaml 파일의 콘텐츠를 포털로 복사합니다.
"검토 페이지"에 도달할 때까지 다음 을 선택합니다.
만들기를 선택하고 환경이 준비될 때까지 기다립니다.
경고
큐레이팅된 환경은 일괄 처리 배포에서 지원되지 않습니다. 사용자 고유의 환경을 지정해야 합니다. 큐레이팅된 환경의 기본 이미지를 항상 자신의 이미지로 사용하여 프로세스를 단순화할 수 있습니다.
배포 정의 만들기
deployment-torch/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-torch-dpl description: A deployment using Torch to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-torch path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-torch-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csv retry_settings: max_retries: 3 timeout: 30 error_threshold: -1 logging_level: info다음 표에서는 일괄 배포의 주요 속성에 대해 설명합니다. 전체 일괄 처리 배포 YAML 스키마는 CLI(v2) 일괄 처리 배포 YAML 스키마를 참조하세요.
키 설명 name배포의 이름입니다. endpoint_name배포를 만들 엔드포인트의 이름입니다. model일괄 처리 채점에 사용할 모델입니다. 이 예제에서는 path를 사용하여 인라인으로 모델을 정의합니다. 이 정의를 통해 모델 파일이 자동으로 업로드되고 자동 생성되는 이름 및 버전으로 등록됩니다. 자세한 옵션은 모델 스키마를 참조하세요. 프로덕션 시나리오에 대한 모범 사례로 모델을 별도로 만들고 여기에서 참조해야 합니다. 기존 모델을 참조하려면azureml:<model-name>:<model-version>구문을 사용합니다.code_configuration.code모델을 채점하는 데 필요한 모든 Python 소스 코드가 포함된 로컬 디렉터리입니다. code_configuration.scoring_scriptcode_configuration.code디렉터리에 있는 Python 파일입니다. 이 파일에는init()함수와run()함수가 있어야 합니다. 비용이 많이 들거나 일반적인 준비에는init()함수를 사용합니다(예: 메모리에 모델 로드).init()(은)는 프로세스 시작 시 한 번만 호출됩니다.run(mini_batch)를 사용하여 각 항목의 점수를 매길 수 있습니다.mini_batch의 값은 파일 경로 목록입니다.run()함수는 pandas DataFrame 또는 배열을 반환해야 합니다. 반환되는 각 요소는mini_batch의 입력 요소의 성공적인 실행 1건을 나타냅니다. 채점 스크립트를 작성하는 방법에 대한 자세한 내용은 채점 스크립트 이해를 참조하세요.environment모델을 채점하는 환경입니다. 이 예제에서는 conda_file및image를 사용하여 환경 인라인을 정의합니다.conda_file종속성은image위에 설치됩니다. 환경은 자동 생성된 이름 및 버전으로 자동으로 등록됩니다. 자세한 옵션은 환경 스키마를 참조하세요. 프로덕션 시나리오에 대한 모범 사례로 환경을 별도로 만들고 여기에서 참조해야 합니다. 기존 환경을 참조하려면azureml:<environment-name>:<environment-version>구문을 사용합니다.compute일괄 처리 채점을 실행할 컴퓨팅입니다. 이 예에서는 처음에 만든 batch-cluster를 사용하고azureml:<compute-name>구문을 사용하여 참조합니다.resources.instance_count각 일괄 처리 채점 작업에 사용할 인스턴스 수입니다. settings.max_concurrency_per_instance인스턴스당 최대 병렬 scoring_script실행 수입니다.settings.mini_batch_sizescoring_script에서 한 번의run()호출로 처리할 수 있는 파일 수입니다.settings.output_action출력 파일에서 출력을 구성하는 방법입니다. append_row(은)는 반환된 모든run()출력 결과를output_file_name(이)라는 하나의 단일 파일로 병합합니다.summary_only는 출력 결과를 병합하지 않고error_threshold만 계산합니다.settings.output_file_nameappend_rowoutput_action의 일괄 처리 채점 출력 파일 이름입니다.settings.retry_settings.max_retries실패한 scoring_scriptrun()에 대한 최대 시도 횟수입니다.settings.retry_settings.timeoutscoring_scriptrun()의 미니 일괄 처리 채점에 대한 시간 제한(초)입니다.settings.error_threshold무시해야 하는 입력 파일 채점 오류 수입니다. 전체 입력의 오류 수가 이 값을 초과하면 일괄 처리 채점 작업이 종료됩니다. 이 예제에서는 일괄 처리 채점 작업을 종료하지 않고 허용되는 오류 수를 나타내는 -1를 사용합니다.settings.logging_level로그의 자세한 정도입니다. 세부 정보 표시가 증가하는 값은 WARNING, INFO 및 DEBUG입니다. settings.environment_variables각 일괄 처리 채점 작업에 대해 설정할 환경 변수 이름-값 쌍의 사전입니다. 측면 메뉴의 엔드포인트 탭으로 이동합니다.
일괄 처리 엔드포인트>만들기 탭을 선택합니다.
엔드포인트에 이름을 지정합니다(이 경우
mnist-batch). 나머지 필드를 구성하거나 비워 둘 수 있습니다.다음을 선택하여 "모델" 섹션으로 이동합니다.
mnist-classifier-torch 모델을 선택합니다.
다음을 선택하여 "배포" 페이지로 이동합니다.
배포에 이름을 지정합니다.
출력 작업의 경우 추가 행이 선택되어 있는지 확인합니다.
출력 파일 이름에서 일괄 처리 채점 출력 파일이 필요한 파일인지 확인합니다. 기본값은
predictions.csv입니다.미니 일괄 처리 크기에서 각 미니 일괄 처리에 포함될 파일의 크기를 조정합니다. 이 크기는 채점 스크립트가 일괄 처리당 수신하는 데이터의 양을 제어합니다.
채점 시간 제한(초)에서 배포가 지정된 파일 일괄 처리에 채점할 수 있는 충분한 시간을 제공하고 있는지 확인합니다. 파일 수를 늘리면 일반적으로 시간 제한 값도 늘려야 합니다. 더 비싼 모델(예: 딥 러닝 기반)에는 이 필드에 높은 값이 필요할 수 있습니다.
인스턴스당 최대 동시성에서 배포 시 얻은 각 컴퓨팅 인스턴스당 원하는 실행기 수를 구성합니다. 여기에서 더 높은 숫자는 더 높은 수준의 병렬화를 보장하지만 컴퓨팅 인스턴스의 메모리 압력도 증가시킵니다. 미니 일괄 처리 크기로 이 값을 모두 조정합니다.
그런 다음에 다음을 선택하여 "코드 + 환경" 페이지로 이동합니다.
"유추를 위한 채점 스크립트 선택"에서 deployment-torch/code/batch_driver.py 채점 스크립트 파일을 찾아 선택합니다.
"환경 선택" 섹션에서 이전에 만든 환경 torch-batch-env를 선택합니다.
다음을 선택하여 "컴퓨팅" 페이지로 이동합니다.
이전 단계에서 만든 컴퓨팅 클러스터를 선택합니다.
경고
Azure Kubernetes 클러스터는 일괄 처리 배포에서 지원되지만 Azure Machine Learning CLI 또는 Python SDK를 사용하여 만든 경우에만 지원됩니다.
인스턴스 수에 배포할 컴퓨팅 인스턴스 수를 입력합니다. 이 예제의 경우 2를 사용합니다.
다음을 선택합니다.
배포 만들기:
다음 코드를 실행하여 일괄 처리 배포를 일괄 처리 엔드포인트 아래에 만들고 기본 배포로 설정합니다.
az ml batch-deployment create --file deployment-torch/deployment.yml --endpoint-name $ENDPOINT_NAME --set-default팁
--set-default매개 변수는 새로 생성된 배포를 엔드포인트의 기본 배포로 설정합니다. 특히 첫 번째 배포를 만들 때 엔드포인트의 새 기본 배포를 편리하게 만들 수 있는 방법입니다. 프로덕션 시나리오의 모범 사례로, 새 배포를 기본값으로 설정하지 않고 만드는 것이 좋습니다. 배포가 예상대로 작동하는지 확인한 다음 나중에 기본 배포를 업데이트합니다. 이 프로세스를 구현하는 방법에 대한 자세한 내용은 새 모델 배포 섹션을 참조하세요.일괄 처리 엔드포인트 및 배포 세부 정보를 확인합니다.
Batch 엔드포인트 탭을 선택합니다.
보려는 일괄 처리 엔드포인트를 선택합니다.
엔드포인트 세부 정보 페이지에서는 엔드포인트에서 사용 가능한 모든 배포와 함께 엔드포인트의 세부 정보를 볼 수 있습니다.
일괄 처리 엔드포인트 실행 및 결과 액세스
데이터 흐름 이해
일괄 처리 엔드포인트를 실행하기 전에 데이터가 시스템을 통해 흐르는 방식을 이해합니다.
입력: 처리할 데이터(점수)입니다. 여기에는 다음이 포함됩니다.
- Azure Storage에 저장된 파일(Blob Storage, 데이터 레이크)
- 여러 파일이 있는 폴더
- Azure Machine Learning에 등록된 데이터 세트
처리: 배포된 모델은 입력 데이터를 일괄 처리(미니 일괄 처리)로 처리하고 예측을 생성합니다.
출력: Azure Storage에 파일로 저장된 모델의 결과입니다. 기본적으로 출력은 작업 영역의 기본 Blob Storage에 저장되지만 다른 위치를 지정할 수 있습니다.
일괄 처리 엔드포인트 호출
일괄 처리 엔드포인트를 호출하면 일괄 처리 채점 작업이 트리거됩니다. 작업은 name 호출 응답에서 반환되고 배치 채점 진행률을 추적합니다. 엔드포인트가 점수를 매길 데이터를 찾을 수 있도록 입력 데이터 경로를 지정합니다. 다음 예제에서는 Azure Storage 계정에 저장된 MNIST 데이터 세트의 샘플 데이터를 통해 새 작업을 시작하는 방법을 보여 줍니다.
Azure CLI, Azure Machine Learning SDK 또는 REST 엔드포인트를 사용하여 일괄 처리 엔드포인트를 실행하고 호출할 수 있습니다. 이러한 옵션에 대한 자세한 내용은 일괄 처리 엔드포인트에 대한 작업 및 입력 데이터 만들기를 참조하세요.
참고
병렬 처리는 어떻게 작동하나요?
Batch 배포는 파일 수준에서 작업을 배포합니다. 예를 들어 파일이 100개이고 미니 일괄 처리가 10개인 폴더는 각각 10개 파일의 10개 일괄 처리를 생성합니다. 파일 크기에 관계없이 발생합니다. 파일이 너무 커서 미니 일괄 처리에서 처리할 수 없을 경우 더 작은 파일로 분할하여 병렬 처리를 늘리거나 미니 일괄 처리당 파일 수를 줄입니다. 일괄 처리 배포는 현재 파일 크기 배포의 오차를 고려하지 않습니다.
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)
일괄 처리 엔드포인트는 다른 위치에 있는 파일 또는 폴더 읽기를 지원합니다. 지원되는 형식과 이를 지정하는 방법에 대한 자세한 내용은 일괄 처리 엔드포인트 작업에서 데이터 액세스를 참조하세요.
일괄 처리 작업 실행 진행률 모니터링
일괄 처리 채점 작업은 모든 입력을 처리하는 데 시간이 소요됩니다.
다음 코드는 작업 상태를 확인하고 자세한 내용을 위해 Azure Machine Learning 스튜디오에 대한 링크를 출력합니다.
az ml job show -n $JOB_NAME --web
일괄 처리 채점 결과 확인
작업 출력은 클라우드 스토리지, 작업 영역의 기본 Blob Storage 또는 지정한 스토리지에 저장됩니다. 기본값을 변경하는 방법을 알아보려면 출력 위치 구성을 참조하세요. 작업이 완료될 때 Azure Storage Explorer에서 채점 결과를 보려면 다음 단계를 따르세요.
Azure Machine Learning 스튜디오에서 일괄 처리 채점 작업을 열려면 다음 코드를 실행합니다. 작업 스튜디오 링크는
invoke의 응답에interactionEndpoints.Studio.endpoint의 값으로 포함됩니다.az ml job show -n $JOB_NAME --web작업 그래프에서
batchscoring단계를 선택합니다.출력 + 로그 탭을 선택한 다음, 데이터 출력 표시를 선택합니다.
데이터 출력에서 아이콘을 선택하여 Storage Explorer를 엽니다.
Storage Explorer의 채점 결과는 다음 샘플 페이지와 비슷합니다.
출력 위치 구성
기본적으로 일괄 처리 점수 매기기 결과는 작업(시스템 생성 GUID)의 이름을 딴 폴더에 있는 작업 영역의 기본 Blob 저장소에 저장됩니다. 일괄 처리 엔드포인트를 호출할 때 출력 위치를 구성합니다.
output-path를 사용하여 Azure Machine Learning에 등록된 데이터 저장소의 폴더를 구성합니다.
--output-path의 구문은 폴더를 지정할 때의 --input, 즉 azureml://datastores/<datastore-name>/paths/<path-on-datastore>/와 동일합니다.
--set output_file_name=<your-file-name>을 사용하여 새 출력 파일 이름을 구성합니다.
OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
OUTPUT_PATH="azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --output-path $OUTPUT_PATH --set output_file_name=$OUTPUT_FILE_NAME --query name -o tsv)
경고
고유한 출력 위치를 사용해야 합니다. 출력 파일이 있으면 일괄 처리 채점 작업이 실패합니다.
중요합니다
입력과 달리 출력은 Blob Storage 계정에서 실행되는 Azure Machine Learning 데이터 저장소에만 저장할 수 있습니다.
작업별 배포 구성 덮어쓰기
일괄 처리 엔드포인트를 호출할 때 컴퓨팅 리소스를 최대한 활용하고 성능을 향상시키기 위해 일부 설정을 덮어쓸 수 있습니다. 이 기능은 배포를 영구적으로 수정하지 않고 다른 작업에 대해 다른 설정이 필요한 경우에 유용합니다.
어떤 설정을 재정의할 수 있나요?
다음 설정은 작업별로 구성할 수 있습니다.
| 설정 | 사용 시기 | 예제 시나리오 |
|---|---|---|
| 인스턴스 수 | 다양한 데이터 볼륨이 있는 경우 | 더 큰 데이터 세트에 더 많은 인스턴스를 사용합니다(100만 파일의 경우 10개 인스턴스, 100,000개 파일의 경우 2개 인스턴스). |
| 미니 일괄 처리 크기 | 처리량 및 메모리 사용량의 균형을 유지해야 하는 경우 | 큰 이미지에는 더 작은 일괄 처리(10~50개 파일)를 사용하고 작은 텍스트 파일에는 더 큰 일괄 처리(100~500개 파일)를 사용합니다. |
| 최대 재시도 | 데이터 품질이 달라지는 경우 | 노이즈가 있는 데이터의 경우 더 높은 재시도 횟수(5~10회), 클린 데이터의 경우 더 낮은 재시도 횟수(1~3회) |
| 시간 제한 | 처리 시간이 데이터 형식에 따라 달라지는 경우 | 복잡한 모델의 경우 더 긴 시간 제한(300초), 간단한 모델의 경우 더 짧은 시간 제한(30초) |
| 오류 임계값 | 다른 오류 허용 오차 수준이 필요한 경우 | 중요 작업의 경우 엄격한 임계값(-1), 실험적 작업의 경우 관대한 임계값(10%) |
설정을 재정의하는 방법
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --mini-batch-size 20 --instance-count 5 --query name -o tsv)
엔드포인트에 배포 추가
배포가 포함된 일괄 처리 엔드포인트가 있으면 계속해서 모델을 구체화하고 새 배포를 추가할 수 있습니다. 일괄 처리 엔드포인트는 동일한 엔드포인트에서 새 모델을 개발하고 배포하는 동안 기본 배포를 계속 제공합니다. 배포는 서로에게 영향을 주지 않습니다.
이 예에서는 Keras 및 TensorFlow로 빌드된 모델을 사용하여 동일한 MNIST 문제를 해결하는 두 번째 배포를 추가합니다.
두 번째 배포 추가
일괄 처리 배포를 위한 환경을 만듭니다. 코드를 실행하는 데 필요한 모든 종속성을 포함합니다. 배치 배포에 필요하므로 라이브러리
azureml-core를 추가합니다. 다음 환경 정의에는 TensorFlow를 사용하여 모델을 실행하는 데 필요한 라이브러리가 포함되어 있습니다.GitHub 리포지토리에서 deployment-keras/environment/conda.yaml 파일의 콘텐츠를 포털로 복사합니다.
"검토 페이지"에 도달할 때까지 다음을 선택합니다.
만들기를 선택하고 환경을 사용할 준비가 될 때까지 기다립니다.
사용되는 conda 파일은 다음과 같습니다.
deployment-keras/environment/conda.yaml
name: tensorflow-env channels: - conda-forge dependencies: - python=3.8.5 - pip - pip: - pandas - tensorflow - pillow - azureml-core - azureml-dataset-runtime[fuse]모델에 대한 채점 스크립트 만들기:
deployment-keras/code/batch_driver.py
import os import numpy as np import pandas as pd import tensorflow as tf from typing import List from os.path import basename from PIL import Image from tensorflow.keras.models import load_model def init(): global model # AZUREML_MODEL_DIR is an environment variable created during deployment model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model") # load the model model = load_model(model_path) def run(mini_batch: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] for image_path in mini_batch: data = Image.open(image_path) data = np.array(data) data_batch = tf.expand_dims(data, axis=0) # perform inference pred = model.predict(data_batch) # Compute probabilities, classes and labels pred_prob = tf.math.reduce_max(tf.math.softmax(pred, axis=-1)).numpy() pred_class = tf.math.argmax(pred, axis=-1).numpy() results.append( { "file": basename(image_path), "class": pred_class[0], "probability": pred_prob, } ) return pd.DataFrame(results)배포 정의 만들기
deployment-keras/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-keras-dpl description: A deployment using Keras with TensorFlow to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-keras path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-tensorflow-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csv다음을 선택하여 "코드 + 환경" 페이지로 진행합니다.
유추를 위한 채점 스크립트 선택에서 deployment-torch/code/batch_driver.py 채점 스크립트 파일을 찾아 선택합니다.
환경 선택에서 이전 단계에서 만든 환경을 선택합니다.
다음을 선택합니다.
컴퓨팅 페이지에서 이전 단계에서 만든 컴퓨팅 클러스터를 선택합니다.
인스턴스 수에 배포할 컴퓨팅 인스턴스 수를 입력합니다. 이 예제의 경우 2를 사용합니다.
다음을 선택합니다.
배포 만들기:
기본이 아닌 일괄 처리 배포 테스트
기본이 아닌 새 배포를 테스트하려면 실행할 배포의 이름을 알아야 합니다.
DEPLOYMENT_NAME="mnist-keras-dpl"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --deployment-name $DEPLOYMENT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)
알림 --deployment-name은 실행할 배포를 지정하는 데 사용됩니다. 이 매개 변수를 사용하면 일괄 처리 엔드포인트의 기본 배포를 업데이트하지 않고 기본이 아닌 배포를 invoke할 수 있습니다.
기본 일괄 처리 배포 업데이트
엔드포인트 내에서 특정 배포를 호출할 수 있지만 일반적으로 엔드포인트 자체를 호출하고 엔드포인트에서 사용할 배포(기본 배포)를 결정하도록 합니다. 엔드포인트를 호출하는 사용자와의 계약을 변경하지 않고도 기본 배포를 변경할 수 있으므로 배포를 제공하는 모델을 변경할 수 있습니다. 다음 코드를 사용하여 기본 배포를 업데이트합니다.
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
일괄 처리 엔드포인트 및 배포 삭제
이전 일괄 처리 배포가 필요하지 않은 경우 다음 코드를 실행하여 삭제합니다. 플래그는 --yes 삭제를 확인합니다.
az ml batch-deployment delete --name mnist-torch-dpl --endpoint-name $ENDPOINT_NAME --yes
다음 코드를 실행하여 일괄 처리 엔드포인트 및 해당 기본 배포를 삭제합니다. 일괄 처리 점수 매기기 작업은 삭제되지 않습니다.
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes