Azure ML Python SDK에서 컴퓨팅 리소스 관리

Azure ML Python SDK를 사용하여 기계 학습 실험을 실행할 때 필요한 것 중 하나는 compute resource 입니다.

이 문서에서는 Azure Machine Learning에서 컴퓨팅 인스턴스 및 컴퓨팅 클러스터를 검색, 프로비저닝, 업데이트 및 삭제하기 위해 작성할 수 있는 몇 가지 일반적인 Python 코드를 안내합니다. 일반적으로 이러한 단계는 Auto ML 회귀 실행 또는 Auto ML 분류 실행 시작과 같은 일부 목표를 달성하기 위해 수행되지만 이 코드는 자체적으로도 유용할 수 있습니다.

Note: The code in this article assumes you have an Azure ML Workspace and can retrieve it from config files. See my tutorial on connecting to a Azure Machine Learning Workspace from the Azure ML Python SDK for additional steps if you've never done this before.



기존 컴퓨팅 리소스 검색



SDK를 통해 또는 Azure Machine Learning Studio 에서 컴퓨팅 리소스를 이미 정의한 경우 ComputeTarget 를 선언하여 Azure ML Python SDK를 사용하여 해당 리소스를 상당히 쉽게 검색할 수 있습니다.

AComputeTarget는 작업 공간에서 이름으로 컴퓨팅 인스턴스 또는 클러스터를 찾으려고 시도하고 찾을 수 없는 경우 ComputeTargetException를 발생시킵니다.

다음 코드는 My-Compute 파일에 표시된 작업 공간에서 config.json라는 컴퓨팅 리소스를 찾습니다.

from azureml.core import Workspace
from azureml.core.compute import ComputeTarget
from azureml.core.compute_target import ComputeTargetException

# Get the workspace from the config file
ws = Workspace.from_config()

# Now let's make sure we have a compute resource
resource_name = "My-Compute"

# Fetch or create the compute resource
try:
    compute = ComputeTarget(workspace=ws, name=resource_name) 
    print('Found existing compute: ' + resource_name)
except ComputeTargetException:
    # A ComputeTargetException is thrown if the ComputeTarget did not exist
    print('The compute resource was not present')


컴퓨팅 리소스를 찾았다고 가정하면 이제 compute 변수에서 사용할 수 있습니다. 그러나 컴퓨팅 리소스를 찾을 수 없는 경우 프로비저닝하기 위해 이 코드를 약간 다르게 작성하는 것이 매우 일반적입니다.

새 컴퓨트 인스턴스 만들기



컴퓨팅 리소스 생성은 except 블록 내에서 수행할 수 있습니다. 이렇게 하면 컴퓨팅 리소스가 이전에 존재하지 않은 경우에만 생성됩니다.

컴퓨트 인스턴스를 생성하기 위한 코드는 except 블록 내부에서 시작하는 아래 샘플에서 찾을 수 있습니다.

from azureml.core import Workspace
from azureml.core.compute import ComputeTarget, ComputeInstance
from azureml.core.compute_target import ComputeTargetException

# Load the workspace from config.json
ws = Workspace.from_config()

# Now let's make sure we have a compute resource
instance_name = "My-Compute"

# Fetch or create the compute resource
try:
    instance = ComputeTarget(workspace=ws, name=instance_name)
    print('Using existing compute: ' + instance_name)
except ComputeTargetException:
    # Create the instance
    print('Provisioning compute instance...')
    sku = 'STANDARD_DS1_V2'
    compute_config = ComputeInstance.provisioning_configuration(vm_size=sku, ssh_public_access=False)
    instance = ComputeInstance.create(ws, instance_name, compute_config)

# Ensure the instance is ready to go
instance.wait_for_completion(show_output=True)


여기서 sku는 작업 영역의 지역에 존재하고 사용 가능한 할당량이 있는 지원되는 VM 유형이어야 합니다.

Billing Tip: I strongly recommend you manually select the appropriate VM image name in Azure Machine Learning Studio considering cost, performance, memory, and other factors of interest to you in order to avoid billing surprises.



새 컴퓨팅 클러스터 생성



컴퓨팅 클러스터를 생성하는 것은 컴퓨팅 인스턴스를 생성하는 것과 매우 유사하지만 아래와 같이 약간 다른 클래스와 매개변수로 작업합니다.

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

# Load the workspace from config.json
ws = Workspace.from_config()

# Now let's make sure we have a compute resource
cluster_name = "My-Cluster"

# Fetch or create the compute resource
try:
    cpu_cluster = ComputeTarget(workspace=ws, name=cluster_name) # This will throw a ComputeTargetException if this doesn't exist
    print('Using existing compute: ' + cluster_name)
except ComputeTargetException:
    # Create the cluster
    print('Provisioning cluster...')
    max_nodes = 4
    sku = 'Standard_D2DS_V4'
    compute_config = AmlCompute.provisioning_configuration(vm_size=sku, min_nodes=0, max_nodes=max_nodes)
    cpu_cluster = ComputeTarget.create(ws, cluster_name, compute_config)

# Ensure the cluster is ready to go
cpu_cluster.wait_for_completion(show_output=True)

ComputeInstance 를 사용하는 대신 이제 AmlCompute 인스턴스를 대신 사용하는 데 중점을 둡니다.

또한 클러스터를 프로비저닝할 때 해당 클러스터의 최소 및 최대 노드 수를 지정하는 것이 중요합니다.

Billing Tip: Always make sure that the min_nodes parameter on your AmlCompute provisioning configuration is set to 0. This allows your cluster to go offline when there is no work for it.

See my compute resources article for additional details and reasoning on compute clusters.



컴퓨팅 리소스 삭제



컴퓨팅 리소스를 삭제하려는 경우 프로세스가 매우 쉽습니다. delete 메서드를 호출한 다음 wait_for_completion를 호출하여 삭제가 완료되었는지 확인하십시오!

컴퓨팅 리소스를 삭제하는 예제는 다음 코드를 참조하고 이는 컴퓨팅 클러스터와 컴퓨팅 인스턴스 모두에서 작동합니다.

from azureml.core import Workspace
from azureml.core.compute import ComputeTarget
from azureml.core.compute_target import ComputeTargetException

# Load the workspace from config.json
ws = Workspace.from_config()

# Now let's make sure we have a compute resource
instance_name = "My-Compute"

# Fetch or create the compute resource
try:
    instance = ComputeTarget(workspace=ws, name=instance_name)

    instance.delete()
    instance.wait_for_completion(show_output=True)
    print('Deleted compute resource')

except ComputeTargetException:
    print('Already deleted!')


다음 단계



그게 다야! Azure ML Python SDK에서 컴퓨팅을 관리하는 것은 매우 간단합니다.

Python SDK에서 컴퓨팅 리소스를 검색하고 프로비저닝할 수 있으면 향후 문서에서 볼 수 있듯이 Azure ML Python SDK에서 직접 기계 학습 실험을 실행할 수 있습니다.

좋은 웹페이지 즐겨찾기