Azure Machine Learning 컴퓨팅 클러스터 만들기

적용 대상:Python SDK azureml v1

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

Azure Machine Learning 작업 영역에서 컴퓨팅 클러스터를 만들고 관리하는 방법에 대해 알아봅니다.

Azure Machine Learning 컴퓨팅 클러스터를 사용하여 클라우드의 CPU 또는 GPU 컴퓨팅 노드 클러스터에 학습 또는 일괄 처리 유추 프로세스를 배포할 수 있습니다. GPU를 포함하는 VM 크기에 대한 자세한 내용은 GPU 최적화 가상 머신 크기를 참조하세요.

이 문서에서는 다음 방법을 알아봅니다.

  • 컴퓨팅 클러스터 만들기
  • 컴퓨팅 클러스터 비용 낮추기
  • 클러스터에 대한 관리 ID 설정

사전 요구 사항

컴퓨팅 클러스터란?

Azure Machine Learning 컴퓨팅 클러스터는 사용자가 단일 또는 다중 노드 컴퓨팅을 간편하게 만들 수 있는 관리형 컴퓨팅 인프라입니다. 컴퓨팅 클러스터는 작업 영역의 다른 사용자와 공유할 수 있는 리소스입니다. 작업이 제출될 때 컴퓨팅이 자동으로 확장되어 Azure Virtual Network에 배치될 수 있습니다. 컴퓨팅 클러스터는 가상 네트워크에서 공용 IP(미리 보기) 배포도 지원하지 않습니다. 컴퓨팅은 컨테이너화된 환경에서 실행되며 모델 종속성을 Docker 컨테이너로 패키지합니다.

컴퓨팅 클러스터를 사용하면 기업에서 SSH 포트를 열지 않아도 가상 네트워크 환경에서 작업을 안전하게 실행할 수 있습니다. 작업은 컨테이너화된 환경에서 실행되며 모델 종속성을 Docker 컨테이너로 패키지합니다.

제한 사항

  • 이 문서에 나열되어 있는 일부 시나리오는 미리 보기로 표시되어 있습니다. 미리 보기 기능은 서비스 수준 계약 없이 제공되며 프로덕션 워크로드에는 사용하지 않는 것이 좋습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

  • 컴퓨팅 클러스터는 작업 영역과 다른 지역에서 만들 수 있습니다. 이 기능은 미리 보기로 제공되며 컴퓨팅 인스턴스가 아닌 컴퓨팅 클러스터에서만 사용할 수 있습니다. 프라이빗 엔드포인트 지원 작업 영역을 사용하는 경우 이 미리 보기를 사용할 수 없습니다.

    경고

    작업 영역이나 데이터 저장소와 다른 지역에서 컴퓨팅 클러스터를 사용하는 경우 네트워크 대기 시간과 데이터 전송 비용이 증가할 수 있습니다. 클러스터를 생성할 때와 클러스터에서 작업을 실행할 때 대기 시간과 비용이 발생할 수 있습니다.

  • 현재 ARM 템플릿을 통한 클러스터 만들기만 지원되며 업데이트는 지원되지 않습니다. 컴퓨팅을 업데이트하려면 지금은 SDK, Azure CLI 또는 UX를 사용하는 것이 좋습니다.

  • Azure Machine Learning 컴퓨팅에는 할당할 수 있는 코어 수와 같은 기본적인 제한이 있습니다. 자세한 내용은 Azure 리소스에 대한 할당량 관리 및 요청을 참조하세요.

  • Azure를 사용하면 리소스를 삭제할 수 없도록 하거나 읽기 전용이 되도록 리소스에 잠금을 설정할 수 있습니다. 작업 영역을 포함하는 리소스 그룹에 리소스 잠금을 적용하지 마세요. 작업 영역을 포함하는 리소스 그룹에 잠금을 적용하면 Azure ML 컴퓨팅 클러스터에 대한 스케일링 작업을 할 수 없습니다. 리소스를 잠그는 방법에 대한 자세한 내용은 예기치 않은 변경을 방지하기 위해 리소스 잠금을 참조하세요.

필요한 코어 수만큼 할당량이 있는 경우 일반적으로 클러스터를 최대 100노드까지 스케일 업할 수 있습니다. 예를 들어 기본적으로 클러스터 노드 간에는 노드 간 통신을 사용하도록 설정하여 MPI 작업을 지원합니다. 그러나 간단하게 지원 티켓을 제출하고 노드 간 통신을 사용하지 않도록 구독, 작업 영역 또는 특정 클러스터를 허용 목록에 추가해 달라고 요청하여 클러스터를 수천 개의 노드로 스케일링할 수 있습니다.

생성

예상 시간: 약 5분.

Azure Machine Learning 컴퓨팅은 실행 전반에서 다시 사용할 수 있습니다. 컴퓨팅은 작업 영역에 있는 다른 사용자와 공유할 수 있으며, 실행 간에 유지되고 제출된 실행 수와 클러스터에 설정된 max_nodes 수에 따라 노드를 자동으로 확장 또는 축소합니다. min_nodes 설정은 사용 가능한 최소 노드 수를 제어합니다.

컴퓨터 클러스터 만들기에 적용되는 VM 제품군 할당량 및 총 지역 할당량당 지역별 전용 코어는 Azure Machine Learning 학습 컴퓨팅 클러스터 할당량과 통합되고 공유됩니다.

중요

실행 중인 작업이 없는 경우 요금이 부과되지 않도록 최소 노드를 0으로 설정합니다. 이 설정을 사용하면 Azure Machine Learning에서 사용하지 않을 때 노드를 할당 취소할 수 있습니다. 0보다 큰 값은 사용하지 않더라도 실행 중인 노드 수가 유지됩니다.

사용되지 않는 경우 컴퓨팅은 0개 노드로 자동 축소됩니다. 필요에 따라 작업을 실행하기 위해 전용 VM이 만들어집니다.

Python에서 영구적 Azure Machine Learning 컴퓨팅 리소스를 만들려면 vm_sizemax_nodes 속성을 지정합니다. 그런 다음, Azure Machine Learning은 다른 속성에 스마트 기본값을 사용합니다.

  • vm_size: Azure Machine Learning 컴퓨팅에서 만든 노드의 VM 제품군입니다.
  • max_nodes: Azure Machine Learning 컴퓨팅에서 작업을 실행할 때 자동으로 확장할 최대 노드 수입니다.

적용 대상:Python SDK azureml v1

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your CPU cluster
cpu_cluster_name = "cpucluster"

# Verify that cluster does not exist already
try:
    cpu_cluster = ComputeTarget(workspace=ws, name=cpu_cluster_name)
    print('Found existing cluster, use it.')
except ComputeTargetException:
    # To use a different region for the compute, add a location='<region>' parameter
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                           max_nodes=4)
    cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)

cpu_cluster.wait_for_completion(show_output=True)

Azure Machine Learning 컴퓨팅을 만들 때 여러 고급 속성을 구성할 수도 있습니다. 속성을 사용하면 고정 크기로 또는 구독의 기존 Azure Virtual Network 내에서 영구적 클러스터를 만들 수 있습니다. 자세한 내용은 AmlCompute 클래스를 참조하세요.

경고

location 매개 변수를 설정할 때 작업 영역이나 데이터 저장소와 다른 지역인 경우 네트워크 대기 시간과 데이터 전송 비용이 증가할 수 있습니다. 클러스터를 생성할 때와 클러스터에서 작업을 실행할 때 대기 시간과 비용이 발생할 수 있습니다.

컴퓨팅 클러스터 비용 낮추기

우선 순위가 낮은 VM을 사용하여 워크로드의 일부 또는 전체를 실행하도록 선택할 수도 있습니다. 이러한 VM은 가용성이 보장되지 않고 사용 중에 선점될 수 있습니다. 선점된 작업을 다시 시작해야 합니다.

이러한 방법 중 하나를 사용하여 우선 순위가 낮은 VM을 지정합니다.

적용 대상:Python SDK azureml v1

compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                            vm_priority='lowpriority',
                                                            max_nodes=4)

관리 ID 설정

Azure Machine Learning 컴퓨팅 클러스터는 코드에 자격 증명을 포함하지 않고 Azure 리소스에 대한 액세스를 인증하는 관리 ID도 지원합니다. 두 가지 종류의 관리 ID가 있습니다.

  • 시스템 할당 관리 ID는 Azure Machine Learning 컴퓨팅 클러스터에서 직접 활성화됩니다. 시스템 할당 ID의 수명 주기는 컴퓨팅 클러스터와 직접적으로 연관됩니다. 컴퓨팅 클러스터가 삭제되면 Azure는 Azure AD에서 자격 증명과 ID를 자동으로 정리합니다.
  • 사용자 할당 관리 ID는 Azure 관리 ID 서비스를 통해 제공되는 독립 실행형 Azure 리소스입니다. 사용자 할당 관리 ID를 여러 리소스에 할당할 수 있으며, 원하는 기간 동안 지속됩니다. 이 관리 ID는 사전에 만들어진 다음 필수 매개 변수로 identity_id로 전달되어야 합니다.

참고

관리 ID는 컴퓨팅 클러스터에서 지원되지만 컴퓨팅 인스턴스에서는 지원되지 않습니다.

적용 대상:Python SDK azureml v1

  • 프로비저닝 구성에서 관리 ID를 구성:

    • ws라는 작업 영역에서 만든 시스템 할당 관리 ID

      # configure cluster with a system-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="SystemAssigned",
                                                              )
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
    • ws라는 작업 영역에서 만든 사용자 할당 관리 ID

      # configure cluster with a user-assigned managed identity
      compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
                                                              max_nodes=5,
                                                              identity_type="UserAssigned",
                                                              identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      
      cpu_cluster_name = "cpu-cluster"
      cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
      
  • cpu_cluster라는 기존 컴퓨팅 클러스터에 관리 ID 추가

    • 시스템이 할당한 관리형 ID:

      # add a system-assigned managed identity
      cpu_cluster.add_identity(identity_type="SystemAssigned")
      
    • 사용자가 할당한 관리형 ID:

      # add a user-assigned managed identity
      cpu_cluster.add_identity(identity_type="UserAssigned", 
                                  identity_id=['/subscriptions/<subcription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user_assigned_identity>'])
      

참고

Azure Machine Learning 컴퓨팅 클러스터는 하나의 시스템 할당 ID 또는 여러 사용자 할당 ID(둘 다를 동시에 지원하지 않음)만 지원합니다.

관리 ID 사용량

기본 관리 ID는 시스템 할당 관리 ID 또는 첫 번째 사용자 할당 관리 ID입니다.

두 가지 ID의 애플리케이션을 실행 중입니다.

  1. 시스템은 ID를 사용하여 사용자의 스토리지 탑재, 컨테이너 레지스트리 및 데이터 저장소를 설정합니다.

    • 이 경우 시스템은 기본 관리 ID를 사용합니다.
  2. 사용자는 제출된 실행에 대한 코드 내에서 리소스에 액세스할 수 있도록 ID를 적용합니다.

    • 이 경우 자격 증명을 검색하는 데 사용할 관리 ID에 해당하는 client_id를 제공합니다.
    • 또는 DEFAULT_IDENTITY_CLIENT_ID 환경 변수를 통해 사용자 할당 ID의 클라이언트 ID를 가져옵니다.

    예를 들어 기본 관리 ID를 사용하여 데이터 저장소에 대한 토큰을 검색하려면 다음을 수행합니다.

    client_id = os.environ.get('DEFAULT_IDENTITY_CLIENT_ID')
    credential = ManagedIdentityCredential(client_id=client_id)
    token = credential.get_token('https://storage.azure.com/')
    

문제 해결

GA 릴리스 전에 Azure Portal에서 Azure Machine Learning 작업 영역을 만든 일부 사용자가 해당 작업 영역에서 AmlCompute을 만들 수 없는 경우가 있을 수 있습니다. 서비스에 대해 지원 요청을 제기하거나 포털 또는 SDK를 통해 새 작업 영역을 만들어 즉시 차단을 직접 해제할 수 있습니다.

크기 조정 시 중단

Azure Machine Learning 컴퓨팅 클러스터가 노드 상태에 대한 크기 조정(0 -> 0)에서 멈춘 것처럼 보이는 경우 이는 Azure 리소스 잠금으로 인한 것일 수 있습니다.

Azure를 사용하면 리소스를 삭제할 수 없도록 하거나 읽기 전용이 되도록 리소스에 잠금을 설정할 수 있습니다. 리소스를 잠그면 예기치 않은 결과가 발생할 수 있습니다. 리소스를 수정하지 않는 것처럼 보이는 일부 작업에는 실제로 잠금에 의해 차단되는 작업이 필요합니다.

Azure Machine Learning을 사용하여 작업 영역의 리소스 그룹에 삭제 잠금을 적용하면 Azure ML 컴퓨팅 클러스터에 대한 크기 조정 작업이 차단됩니다. 이 문제를 해결하려면 리소스 그룹에서 잠금을 제거하고 대신 그룹의 개별 항목에 적용하는 것이 좋습니다.

중요

다음 리소스에 잠금을 적용하지 마십시오.

리소스 이름 리소스 유형
<GUID>-azurebatch-cloudservicenetworksecurityggroup 네트워크 보안 그룹
<GUID>-azurebatch-cloudservicepublicip 공용 IP 주소
<GUID>-azurebatch-cloudserviceloadbalancer 부하 분산 장치

이러한 리소스는 컴퓨팅 클러스터와 통신하고 크기 조정 등의 작업을 수행하는 데 사용됩니다. 이러한 리소스에서 리소스 잠금을 제거하면 컴퓨팅 클러스터에 자동 크기 조정을 사용할 수 있습니다.

리소스 잠금에 대한 자세한 내용은 예기치 않은 변경을 방지하기 위해 리소스 잠금을 참조하세요.

다음 단계

컴퓨팅 클러스터를 사용하여 다음을 수행합니다.