Visual Studio Code에서 로컬로 온라인 엔드포인트 디버그

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

Microsoft Visual Studio Code 디버거를 사용하여 온라인 엔드포인트를 Azure에 배포하기 전에 로컬에서 테스트하고 디버그하는 방법을 알아봅니다.

Azure Machine Learning 로컬 엔드포인트를 사용하면 점수 매기기 스크립트, 환경 구성, 코드 구성 및 기계 학습 모델을 로컬로 테스트하고 디버그할 수 있습니다.

Important

이 기능은 현재 공개 미리 보기로 제공됩니다. 이 미리 보기 버전은 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다.

자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

엔드포인트를 클라우드에 배포하기 전에 로컬로 디버깅하면 이전에 코드 및 구성에서 오류를 catch하는 데 도움이 될 수 있습니다. Visual Studio Code를 사용하여 로컬로 엔드포인트를 디버깅하는 다양한 옵션이 있습니다.

이 가이드에서는 로컬 엔드포인트에 중점을 둡니다.

다음 표에서는 가장 적합한 시나리오를 선택하는 데 도움이 되는 시나리오의 개요를 제공합니다.

시나리오 유추 HTTP 서버 로컬 엔드포인트
Docker 이미지 다시 빌드 없이 로컬 Python 환경 업데이트 아니요
점수 매기기 스크립트 업데이트
배포 구성 업데이트(배포, 환경, 코드, 모델)
Visual Studio Code 디버거 통합

필수 조건

이 가이드에서는 PC에 다음 항목이 로컬로 설치되어 있다고 가정합니다.

자세한 내용은 온라인 엔드포인트를 배포하기 위해 시스템을 준비하는 방법에 대한 가이드를 참조하세요.

이 문서의 예는 azureml-examples GitHub 리포지토리에 포함된 코드 샘플을 기반으로 합니다. YAML 및 기타 파일을 복사/붙여넣지 않고도 로컬에서 명령을 실행하려면 리포지토리를 복제한 다음 디렉터리를 azureml-examples/cli로 변경합니다.

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

Azure CLI에 대한 기본값을 아직 설정하지 않은 경우 기본 설정을 저장합니다. 구독, 작업 영역 및 리소스 그룹에 대한 값을 여러 번 전달하지 않으려면 다음 명령을 사용합니다. 다음 매개 변수를 특정 구성에 대한 값으로 바꿉니다.

  • <subscription> 를 Azure 구독 ID로 바꿉니다.
  • <workspace>을(를) Azure Machine Learning 작업 영역 이름으로 바꿉니다.
  • <resource-group>을 작업 영역이 포함된 Azure 리소스 그룹으로 바꿉니다.
  • <location>을 작업 영역이 포함된 Azure 지역으로 바꿉니다.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

현재 기본값은 az configure -l 명령을 사용하여 확인할 수 있습니다.

개발 컨테이너 시작

Azure Machine Learning 로컬 엔드포인트는 Docker 및 Visual Studio Code 개발 컨테이너를 사용하여 로컬 디버깅 환경을 빌드하고 구성합니다. 개발 컨테이너를 사용하면 Docker 컨테이너 내부에서 Visual Studio Code 기능을 활용할 수 있습니다. 개발 컨테이너에 대한 자세한 내용은 개발 컨테이너 만들기를 참조하세요.

Visual Studio Code에서 로컬로 온라인 엔드포인트를 디버깅하려면 Azure Machine Learning 온라인 배포를 만들거나 업데이트할 때 --vscode-debug 플래그를 사용합니다. 다음 명령은 예제 리포지토리의 배포 예제를 사용합니다.

az ml online-deployment create --file endpoints/online/managed/sample/blue-deployment.yml --local --vscode-debug

Important

WSL(Linux용 Windows 하위 시스템)에서는 Visual Studio Code 실행 파일에 대한 경로를 포함하거나 WSL interop을 사용하도록 PATH 환경 변수를 업데이트해야 합니다. 자세한 내용은 Linux와의 Windows 상호 운용성을 참조하세요.

Docker 이미지는 로컬로 빌드됩니다. 모든 환경 구성 또는 모델 파일 오류는 프로세스의 이 스테이지에서 표시됩니다.

참고 항목

새 개발 컨테이너 또는 업데이트된 개발 컨테이너를 처음 시작할 때는 몇 분 정도 걸릴 수 있습니다.

이미지가 성공적으로 빌드되면 개발 컨테이너가 Visual Studio Code 창에서 열립니다.

몇 가지 Visual Studio Code 확장을 사용하여 개발 컨테이너의 배포를 디버깅합니다. Azure Machine Learning은 개발 컨테이너에 이러한 확장을 자동으로 설치합니다.

Important

디버그 세션을 시작하기 전에 Visual Studio Code 확장이 개발 컨테이너에 설치를 완료했는지 확인합니다.

디버그 세션 시작

환경이 설정되면 Visual Studio Code 디버거를 사용하여 배포를 로컬에서 테스트하고 디버깅합니다.

  1. Visual Studio Code에서 점수 매기기 스크립트를 엽니다.

    이전에 배포된 엔드포인트에서 사용하는 score.py 스크립트는 복제한 리포지토리의 azureml-samples/cli/endpoints/online/managed/sample/score.py에 있습니다. 그러나 이 가이드의 단계는 점수 매기기 스크립트에서 작동합니다.

  2. 점수 매기기 스크립트의 아무 곳에나 중단점을 설정합니다.

    • 시작 동작을 디버그하려면 init 함수 내에 중단점을 배치합니다.
    • 점수 매기기 동작을 디버그하려면 run 함수 내에 중단점을 배치합니다.
  3. Visual Studio Code 작업 보기를 선택합니다.

  4. 실행 및 디버그 드롭다운에서 AzureML: 로컬 엔드포인트 디버그를 선택하여 로컬로 엔드포인트 디버깅을 시작합니다.

    실행 보기의 중단점 섹션에서 다음을 확인합니다.

    • 발생된 예외선택 취소되었습니다.
    • catch되지 않은 예외선택되어 있습니다.

    Azure Machine Learning 디버그 로컬 환경 디버그 프로필을 구성하는 방법을 보여 주는 스크린샷.

  5. 실행 및 디버그 드롭다운 옆에 있는 재생 아이콘을 선택하여 디버깅 세션을 시작합니다.

    이때 init 함수의 모든 중단점이 발견됩니다. 디버그 작업을 사용하여 코드를 단계별로 진행합니다. 디버그 작업에 대한 자세한 내용은 디버그 작업 가이드를 참조하세요.

Visual Studio Code 디버거에 대한 자세한 내용은 디버깅을 참조하세요.

엔드포인트 디버그

이제 애플리케이션이 디버거에서 실행 중이면 예측하여 점수 매기기 스크립트를 디버그해 보세요.

ml 확장 invoke 명령을 사용하여 로컬 엔드포인트에 요청합니다.

az ml online-endpoint invoke --name <ENDPOINT-NAME> --request-file <REQUEST-FILE> --local

이 경우 <REQUEST-FILE>은 다음 JSON과 유사하게 예측을 수행할 모델에 대한 입력 데이터 샘플이 포함된 JSON 파일입니다.

{"data": [
    [1,2,3,4,5,6,7,8,9,10], 
    [10,9,8,7,6,5,4,3,2,1]
]}

점수 매기기 URI는 엔드포인트가 요청을 수신 대기하는 주소입니다. ml 확장을 사용하여 점수 매기기 URI를 가져옵니다.

az ml online-endpoint show --name <ENDPOINT-NAME> --local

출력은 다음과 비슷해야 합니다.

{
 "auth_mode": "aml_token",
 "location": "local",
 "name": "my-new-endpoint",
 "properties": {},
 "provisioning_state": "Succeeded",
 "scoring_uri": "http://localhost:5001/score",
 "tags": {},
 "traffic": {},
 "type": "online"
}

점수 매기기 URI는 scoring_uri 속성에서 찾을 수 있습니다.

이때 run 함수의 모든 중단점이 발견됩니다. 디버그 작업을 사용하여 코드를 단계별로 진행합니다. 디버그 작업에 대한 자세한 내용은 디버그 작업 가이드를 참조하세요.

엔드포인트 편집

애플리케이션을 디버그하고 문제를 해결할 때 점수 매기기 스크립트 및 구성을 업데이트해야 하는 시나리오가 있습니다.

코드에 변경 내용을 적용하려면 다음을 수행합니다.

  1. 코드를 업데이트합니다.
  2. 명령 팔레트에서 Developer: Reload Window 명령을 사용하여 디버그 세션을 다시 시작합니다. 자세한 내용은 명령 팔레트 설명서를 참조하세요.

참고 항목

코드 및 엔드포인트 자산이 포함된 디렉터리를 개발 컨테이너에 탑재하기 때문에 개발 컨테이너에서 변경한 내용은 로컬 파일 시스템과 동기화됩니다.

환경 및 엔드포인트 구성에 대한 업데이트와 관련된 보다 광범위한 변경 내용을 확인하려면 ml 확장 update 명령을 사용합니다. 그렇게 하면 변경 내용으로 전체 이미지 다시 빌드가 시작됩니다.

az ml online-deployment update --file <DEPLOYMENT-YAML-SPECIFICATION-FILE> --local --vscode-debug

업데이트된 이미지가 빌드되고 개발 컨테이너가 시작되면 Visual Studio Code 디버거를 사용하여 업데이트된 엔드포인트를 테스트하고 문제를 해결합니다.