일괄 처리 엔드포인트 문제 해결

적용 대상:Azure CLI ml 확장 v2(현재)Python SDK azure-ai-ml v2(현재)

일괄 처리 채점을 위해 일괄 처리 엔드포인트를 사용할 때 발생할 수 있는 일반적인 오류를 해결하는 방법을 알아봅니다. 이 문서에서는 다음에 대해 알아봅니다.

일괄 처리 채점 작업의 로그 이해

로그 가져오기

Azure CLI 또는 REST를 사용하여 일괄 처리 엔드포인트를 호출하면 일괄 처리 채점 작업이 비동기적으로 실행됩니다. 일괄 처리 채점 작업에 대한 로그를 가져오기 위한 두 가지 옵션이 있습니다.

옵션 1: 로컬 콘솔에 로그 스트리밍

다음 명령을 실행하여 시스템 생성 로그를 콘솔로 스트리밍할 수 있습니다. azureml-logs 폴더의 로그만 스트리밍됩니다.

az ml job stream --name <job_name>

옵션 2: 스튜디오에서 로그 보기

스튜디오에서 실행에 대한 링크를 얻으려면 다음을 실행합니다.

az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
  1. 위의 명령에서 반환된 값을 사용하여 스튜디오에서 작업을 엽니다.
  2. batchscoring 선택
  3. 출력 + 로그 탭 열기
  4. 검토하려는 로그를 하나 이상 선택합니다.

로그 구조 이해

azureml-logslogs의 두 가지 최상위 로그 폴더가 있습니다.

~/azureml-logs/70_driver_log.txt 파일에는 채점 스크립트를 시작하는 컨트롤러의 정보가 포함되어 있습니다.

일괄 처리 채점 작업의 분산 특성으로 인해 여러 원본의 로그가 있습니다. 그러나 다음과 같이 높은 수준의 정보를 제공하는 두 병합된 파일이 생성됩니다.

  • ~/logs/job_progress_overview.txt: 이 파일은 지금까지 생성된 미니 일괄 처리(작업)의 수와 지금까지 처리된 미니 일괄 처리 수에 대한 높은 수준의 정보를 제공합니다. 미니 일괄 처리 끝으로 로그는 작업의 결과를 기록합니다. 작업이 실패하면 오류 메시지와 문제 해결 시작 위치가 표시됩니다.

  • ~/logs/sys/master_role.txt: 이 파일은 실행 중인 작업의 주체 노드(오케스트레이터라고도 함) 보기를 제공합니다. 이 로그는 태스크 생성, 진행률 모니터링, 작업 결과에 대한 정보를 제공합니다.

스크립트의 오류에 대한 간략한 해석은 다음과 같습니다.

  • ~/logs/user/error.txt: 이 파일은 스크립트의 오류를 요약하려 합니다.

스크립트의 오류에 대한 자세한 내용은 다음과 같습니다.

  • ~/logs/user/error/: 이 파일은 항목 스크립트를 로드하고 실행하는 동안 throw된 예외에 대한 전체 스택 추적을 포함합니다.

각 노드가 점수 스크립트를 실행하는 방법을 완전히 해석하려면 각 노드에 대한 개별 프로세스 로그를 확인합니다. 프로세스 로그는 작업자 노드에서 그룹화한 sys/node 폴더에 있습니다.

  • ~/logs/sys/node/<ip_address>/<process_name>.txt: 이 파일은 작업자가 선택하거나 완료할 때 각각의 미니 일괄 처리에 대한 상세 정보를 제공합니다. 각 미니 일괄 처리에 대해 이 파일에는 다음이 포함됩니다.

    • 작업자 프로세스의 IP 주소 및 PID
    • 총 항목 수, 성공적으로 처리된 항목 수 및 실패한 항목 수입니다.
    • 시작 시간, 기간, 처리 시간 및 실행 메서드 시간입니다.

또한 각 노드의 리소스 사용량에 대한 정기 확인 결과를 볼 수 있습니다. 로그 파일 및 설정 파일은 다음 폴더에 있습니다.

  • ~/logs/perf: 확인 간격(초)을 변경하려면 --resource_monitor_interval을 설정합니다. 기본 간격은 600입니다. 이는 약 10분입니다. 모니터링을 중지하려면 값을 0으로 설정합니다. 각 <ip_address> 폴더에는 다음이 포함됩니다.

    • os/: 노드에서 실행 중인 모든 프로세스에 대한 정보입니다. 한 번 확인 시 운영 체제 명령을 실행하고 결과를 파일에 저장합니다. 명령은 Linux의 경우 ps이고
      • %Y%m%d%H: 하위 폴더 이름은 시간(시)입니다.
        • processes_%M: 파일 이름은 확인 시간(분)으로 끝납니다.
    • node_disk_usage.csv: 노드의 자세한 디스크 사용량입니다.
    • node_resource_usage.csv: 노드의 리소스 사용량 개요입니다.
    • processes_resource_usage.csv: 각 프로세스의 리소스 사용량 개요입니다.

채점 스크립트에 로그인하는 방법

채점 스크립트에서 Python 로깅을 사용할 수 있습니다. 로그는 logs/user/stdout/<node_id>/processNNN.stdout.txt에 저장됩니다.

import argparse
import logging

# Get logging_level
arg_parser = argparse.ArgumentParser(description="Argument parser.")
arg_parser.add_argument("--logging_level", type=str, help="logging level")
args, unknown_args = arg_parser.parse_known_args()
print(args.logging_level)

# Initialize Python logger
logger = logging.getLogger(__name__)
logger.setLevel(args.logging_level.upper())
logger.info("Info log statement")
logger.debug("Debug log statement")

일반적인 문제

다음 섹션에는 일괄 처리 엔드포인트 개발 및 사용 중에 볼 수 있는 일반적인 문제와 솔루션이 포함되어 있습니다.

'azureml'이라는 모듈이 없음

기록된 메시지: No module named 'azureml'.

이유: Azure Machine Learning 일괄 처리 배포에는 azureml-core 패키지가 설치되어 있어야 합니다.

솔루션: conda 종속성 파일에 azureml-core를 추가합니다.

출력이 이미 있습니다.

이유: Azure Machine Learning 일괄 처리 배포는 출력에서 생성된 predictions.csv 파일을 덮어쓸 수 없습니다.

솔루션: 예측의 출력 위치가 표시되면 경로가 존재하지 않는 파일로 연결되는지 확인합니다.

항목 스크립트의 run() 함수가 [숫자]번 동안 시간 제한되었습니다.

기록된 메시지: No progress update in [number] seconds. No progress update in this check. Wait [number] seconds since last update.

이유: 단일 일괄 처리가 처리될 때까지 일괄 처리가 대기해야 하는 시간을 나타내는 timeout 값으로 일괄 처리 배포를 구성할 수 있습니다. 일괄 처리 실행이 해당 값보다 큰 경우 작업이 중단됩니다. 중단된 작업은 구성 가능한 최대 횟수까지 다시 시도할 수 있습니다. 다시 시도할 때마다 timeout이 발생하면 배포 작업이 실패합니다. 이러한 속성은 각 배포에 대해 구성할 수 있습니다.

솔루션: 배포를 업데이트하여 배포의 timemout 값을 늘립니다. 이러한 속성은 매개 변수 retry_settings에서 구성됩니다. 기본적으로 timeout=30retries=3이 구성됩니다. timeout의 값을 결정할 때 각 일괄 처리에서 처리 중인 파일 수와 각 파일의 크기를 고려합니다. 더 작은 크기의 더 많은 미니 일괄 처리를 고려하여 더 빨리 실행할 수 있도록 크기를 줄일 수도 있습니다.

ScriptExecution.StreamAccess.Authentication

기록된 메시지: StreamAccessException으로 인해 ScriptExecutionException이 발생했습니다. StreamAccessException은 AuthenticationException으로 인해 발생했습니다.

이유: 배포가 실행 중인 컴퓨팅 클러스터는 데이터 자산이 있는 스토리지를 탑재할 수 없습니다. 컴퓨팅의 관리 ID에 탑재를 수행할 수 있는 권한이 없습니다.

솔루션: 배포가 실행 중인 컴퓨팅 클러스터와 연결된 ID에 스토리지 계정에 대한 Storage Blob 데이터 읽기 권한자 이상의 액세스 권한이 있는지 확인합니다. 스토리지 계정 소유자만 Azure Portal을 통해 액세스 수준을 변경할 수 있습니다.

데이터 세트 초기화 실패

기록된 메시지: 데이터 세트 초기화 실패: UserErrorException: 메시지: 데이터 세트를 탑재할 수 없습니다(id='xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 이름='없음', 버전=없음). 데이터 세트의 원본에 액세스할 수 없거나 데이터가 포함되어 있지 않습니다.

이유: 배포가 실행 중인 컴퓨팅 클러스터는 데이터 자산이 있는 스토리지를 탑재할 수 없습니다. 컴퓨팅의 관리 ID에 탑재를 수행할 수 있는 권한이 없습니다.

솔루션: 배포가 실행 중인 컴퓨팅 클러스터와 연결된 ID에 스토리지 계정에 대한 Storage Blob 데이터 읽기 권한자 이상의 액세스 권한이 있는지 확인합니다. 스토리지 계정 소유자만 Azure Portal을 통해 액세스 수준을 변경할 수 있습니다.

데이터 세트 노드 [코드]가 지정된 값이나 기본값이 없는 매개 변수 dataset_param을 참조하세요.

기록된 메시지: 데이터 세트 노드 [코드]가 지정된 값이나 기본값이 없는 매개 변수 dataset_param을 참조하세요.

이유: 일괄 처리 엔드포인트에 제공된 입력 데이터 자산이 지원되지 않습니다.

솔루션: 일괄 처리 엔드포인트에 대해 지원되는 데이터 입력을 제공하고 있는지 확인합니다.

예외로 인해 사용자 프로그램 실패: 실행 실패, 자세한 내용은 로그를 확인하세요.

기록된 메시지: 예외로 인해 사용자 프로그램 실패: 실행 실패, 자세한 내용은 로그를 확인하세요. 로그 레이아웃은 logs/readme.txt에서 확인할 수 있습니다.

이유: 채점 스크립트의 init() 또는 run() 함수를 실행하는 동안 오류가 발생했습니다.

솔루션: 출력 + 로그로 이동하여 logs > user > error > 10.0.0.X > process000.txt에서 파일을 엽니다. init() 또는 run() 메서드에서 생성된 오류 메시지가 표시됩니다.

ValueError: 연결할 개체가 없습니다.

기록된 메시지: ValueError: 연결할 개체가 없습니다.

이유: 생성된 미니 일괄 처리의 파일이 모두 손상되었거나 지원되지 않는 파일 형식입니다. MLflow 모델은 일괄 처리 유추에 배포할 때 고려 사항에 설명된 대로 파일 형식의 하위 집합을 지원합니다.

해결 방법: logs/usr/stdout/<process-number>/process000.stdout.txt 파일로 이동하여 ERROR:azureml:Error processing input file과 같은 항목을 찾습니다. 파일 형식이 지원되지 않는 경우 지원되는 파일 목록을 검토합니다. 입력 데이터의 파일 형식을 변경하거나, 점수 매기기 스크립트와 함께 MLflow 모델 사용에 나와 있는 점수 매기기 스크립트를 제공하여 배포를 사용자 지정해야 할 수도 있습니다.

run()에서 반환된 성공한 미니 일괄 처리 항목이 없습니다.

기록된 메시지: run()에서 반환된 성공한 미니 일괄 처리 항목이 없습니다. https://aka.ms/batch-inference-documentation에서 'response: run()'을 확인하세요.

이유: 일괄 처리 엔드포인트가 예상 형식의 데이터를 run() 메서드에 제공하지 못했습니다. 손상된 파일을 읽거나 입력 데이터가 모델 서명(MLflow)과 호환되지 않기 때문일 수 있습니다.

솔루션: 발생할 수 있는 상황을 이해하려면 출력 + 로그로 이동하여 logs > user > stdout > 10.0.0.X > process000.stdout.txt에서 파일을 엽니다. Error processing input file과 같은 오류 항목을 찾습니다. 입력 파일을 올바르게 읽을 수 없는 이유에 대한 세부 정보를 찾을 수 있습니다.

JWT의 잠재고객은 허용되지 않습니다.

컨텍스트: REST API를 사용하여 일괄 처리 엔드포인트를 호출할 때.

이유: 엔드포인트/배포용 REST API를 호출하는 데 사용되는 액세스 토큰은 다른 대상 그룹/서비스에 대해 발급된 토큰을 나타냅니다. Microsoft Entra 토큰은 특정 작업에 대해 발급됩니다.

솔루션: 일괄 처리 엔드포인트 REST API와 함께 사용할 인증 토큰을 생성할 때 resource 매개 변수가 https://ml.azure.com으로 설정되었는지 확인합니다. 이 리소스는 REST API를 사용하여 엔드포인트를 관리하기 위해 표시해야 하는 리소스와 다릅니다. 모든 Azure 리소스(일괄 처리 엔드포인트 포함)는 리소스 https://management.azure.com을 사용하여 관리합니다. 각각의 경우에 올바른 리소스 URI를 사용하는지 확인합니다. 관리 API와 작업 호출 API를 동시에 사용하려면 두 개의 토큰이 필요합니다. 자세한 내용은 일괄 처리 엔드포인트 인증(REST)을 참조하세요.

라우팅할 유효한 배포가 없습니다. 엔드포인트에 가중치 값이 양수인 배포가 하나 이상 있는지 확인하거나 배포별 헤더를 사용하여 라우팅하세요.

이유: 기본 일괄 처리 배포가 올바르게 설정되지 않았습니다.

솔루션: 기본 일괄 처리 배포가 올바르게 설정되었는지 확인합니다. 기본 일괄 처리 배포를 업데이트해야 할 수 있습니다. 자세한 내용은 기본 일괄 처리 배포 업데이트를 참조하세요.

제한 사항 및 지원되지 않는 시나리오

일괄 처리 엔드포인트를 사용하는 기계 학습 솔루션을 디자인할 때 일부 구성과 시나리오는 지원되지 않을 수 있습니다.

다음 작업 영역 구성은 지원되지 않습니다.

  • 격리 기능이 사용하도록 설정된 Azure Container Registries로 구성된 작업 영역
  • CMK(고객 관리형 키)가 있는 작업 영역

다음 컴퓨팅 구성은 지원되지 않습니다.

  • Azure ARC Kubernetes 클러스터
  • Azure Kubernetes 클러스터에 대해 세분화된 리소스 요청(메모리, vCPU, GPU) 인스턴스 수만 요청할 수 있습니다.

다음 입력 형식지원되지 않습니다.

  • 표 형식 데이터 세트(V1)
  • 폴더 및 파일 데이터 세트(V1)
  • MLtable(V2)

다음 단계