Azure Machine Learning CLI, SDK 및 REST API를 사용하여 모델 학습

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

Azure Machine Learning ML 학습 작업을 제출하는 여러 가지 방법을 제공합니다. 이 문서에서는 다음 방법을 사용하여 작업을 제출하는 방법을 알아봅니다.

  • 기계 학습용 Azure CLI 확장: CLI v2라고도 하는 ml 확장입니다.
  • Python용 Azure Machine Learning SDK v2.
  • REST API: CLI 및 SDK가 빌드되는 API입니다.

필수 구성 요소

  • Azure 구독입니다. Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다. 또는 유료 버전의 Azure Machine Learning 사용해 보세요.
  • Azure Machine Learning 작업 영역입니다. 리소스가 없는 경우 리소스 만들기 의 단계를 사용하여 문서를 시작할 수 있습니다.

SDK를 사용하려면:

예제 리포지토리 복제

이 문서의 코드 조각은 리포지토리 GitHub Azure Machine Learning 예제의 예제를 기반으로 합니다. 리포지토리를 개발 환경에 복제하려면 다음 명령을 사용합니다.

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

리포지토리에 대한 최신 커밋만 복제하여 작업을 완료하는 시간을 단축하는 데 사용합니다 --depth 1 .

이 문서의 나머지 명령은 azureml-examples 디렉터리에서 실행한다고 가정합니다.

예제 작업

이 문서의 예제에서는 홍채 꽃 데이터 세트를 사용하여 MLFlow 모델을 학습시킵니다.

클라우드에서 훈련

클라우드에서 학습하는 경우 Azure Machine Learning 작업 영역에 연결하고 컴퓨팅 리소스를 선택하여 학습 작업을 실행해야 합니다.

작업 영역에 연결

다음 탭을 사용하여 모델을 학습하는 데 사용할 방법을 선택합니다. 탭을 선택하면 이 문서의 모든 탭이 동일한 탭으로 자동으로 전환됩니다. 언제든지 다른 탭을 선택할 수 있습니다.

작업 영역에 연결하려면 식별자 매개 변수(구독, 리소스 그룹 및 작업 영역 이름)가 필요합니다. MLClient 네임스페이스의 azure.ai.ml에서 이러한 세부 정보를 사용하여 필요한 Azure Machine Learning 작업 영역에 대한 핸들을 가져오세요. 인증하려면 default Azure 인증 사용합니다. 자격 증명을 구성하고 작업 영역에 연결하는 방법에 대한 자세한 내용은 이 example 참조하세요.

#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'

#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)

작업 영역 이름을 인쇄하여 연결을 확인합니다.

print(ml_client.workspace_name)

학습을 위한 컴퓨팅 리소스 만들기

참고

서버리스 컴퓨팅을 시도하려면 이 단계를 건너뛰고 학습 작업 제출을 진행합니다.

Azure Machine Learning 컴퓨팅 클러스터는 학습 작업을 실행하는 데 사용할 수 있는 완전 관리형 컴퓨팅 리소스입니다. 다음 예제에서는 명명 cpu-cluster된 컴퓨팅 클러스터를 만듭니다.

from azure.ai.ml.entities import AmlCompute

# specify aml compute name.
cpu_compute_target = "cpu-cluster"

try:
    ml_client.compute.get(cpu_compute_target)
except Exception:
    print("Creating a new cpu compute target...")
    compute = AmlCompute(
        name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
    )
    ml_client.compute.begin_create_or_update(compute).result()

컴퓨팅 클러스터가 있는지 확인합니다.

cpu_cluster = ml_client.compute.get("cpu-cluster")
print(f"Compute '{cpu_cluster.name}' provisioning state: {cpu_cluster.provisioning_state}")

학습 작업 제출

이 스크립트를 실행하려면 command 아래에 있는 main.py Python 스크립트를 실행하는 ./sdk/python/jobs/single-step/lightgbm/iris/src/ 사용합니다. 당신이 명령을 job 형식으로 Azure Machine Learning에 제출합니다.

참고

서버리스 컴퓨팅을 사용하려면 이 코드에서 compute="cpu-cluster"을 삭제하십시오.

from azure.ai.ml import command, Input

# define the command
command_job = command(
    code="./src",
    command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
    environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
    inputs={
        "iris_csv": Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
        ),
        "learning_rate": 0.9,
        "boosting": "gbdt",
    },
    compute="cpu-cluster",
)

동일한 Python 세션에서 작업을 제출합니다.

# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.studio_url

앞의 예제에서는 다음을 구성했습니다.

  • code - 명령을 실행할 코드가 있는 경로입니다.
  • command - 실행해야 하는 명령입니다.
  • environment - 학습 스크립트를 실행하는 데 필요한 환경입니다. 이 예제에서는 AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest라는 Azure Machine Learning 제공된 큐레이팅된 또는 기성 환경을 사용합니다. 기본 Docker 이미지를 지정하고 그 위에 conda yaml을 지정하여 사용자 지정 환경을 사용할 수도 있습니다.
  • inputs - 명령에 이름 값 쌍을 사용하는 입력 사전입니다. 키는 작업 컨텍스트 내의 입력 이름이며 값은 입력 값입니다. command에서 ${{inputs.<input_name>}} 표현식을 사용하여 입력을 참조합니다. 파일 또는 폴더를 입력으로 사용하려면 클래스를 Input 사용합니다. 자세한 내용은 SDK 및 CLI v2 식을 참조하세요.

자세한 내용은 참조 설명서를 참조하세요.

작업을 제출하면 서비스는 url을 Azure Machine Learning 스튜디오 작업 상태로 반환합니다. 스튜디오 UI를 사용하여 작업 진행률을 확인합니다. 작업의 현재 상태를 확인하는 데 사용할 returned_job.status 수도 있습니다.

print(f"Studio URL: {returned_job.studio_url}")

중요

Azure Machine Learning 학습 및 명령 작업은 사용자 지정된 도메인 이름 레이블을 사용하는 Azure ACR(Container Registries)을 지원하지 않습니다. 이러한 레지스트리를 참조하는 작업은 이미지 끌어오기 또는 환경 확인 오류로 인해 시작하는 동안 실패할 수 있습니다. 이 문제를 방지하려면 다음을 수행합니다.

  • ACR에 대한 기본 로그인 서버 형식(<registry-name>.azurecr.io)을 사용합니다.
  • 레지스트리를 만들 때 도메인 이름 레이블 범위를보안 해제로 설정합니다.

학습 작업 모니터링

모델을 등록하기 전에 학습 작업이 완료되기를 기다립니다. 작업 상태는 → → StartingPreparingRunning통해 Completed 전환됩니다.

작업 출력을 실시간으로 모니터링하는 데 사용합니다 ml_client.jobs.stream() .

ml_client.jobs.stream(returned_job.name)

또는 프로그래밍 방식으로 작업 상태를 확인합니다.

returned_job = ml_client.jobs.get(returned_job.name)
print(f"Job status: {returned_job.status}")

학습된 모델 등록

다음 예제에서는 Azure Machine Learning 작업 영역에 모델을 등록하는 방법을 보여 줍니다.

학습 작업은 속성을 반환합니다 name . 이 이름을 모델 경로의 일부로 사용하세요.

from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes

run_model = Model(
    path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
    name="run-model-example",
    description="Model created from run.",
    type=AssetTypes.MLFLOW_MODEL
)

ml_client.models.create_or_update(run_model)

모델이 등록되었는지 확인합니다.

registered_model = ml_client.models.get("run-model-example", version="1")
print(f"Model '{registered_model.name}' version {registered_model.version} registered successfully.")

자원을 정리하세요

컴퓨팅 클러스터를 더 많은 학습 작업에 사용하지 않으려면 삭제하여 요금 발생을 중지합니다. 클러스터는 노드가 0개 실행되더라도 존재하는 동안에도 계속 청구됩니다.

ml_client.compute.begin_delete("cpu-cluster").wait()

일반적인 오류 해결 방법

오류 원인 해결 방법
ImportError: No module named 'azure.identity' 누락된 azure-identity 패키지 pip install azure-identity을 실행합니다.
DefaultAzureCredential failed Azure 로그인하지 않음 먼저 실행 az login 하거나 서비스 주체 인증을 위한 환경 변수 설정
ComputeNotFound 클러스터 이름 불일치 또는 클러스터 삭제됨 클러스터 이름 확인 및 프로비전 상태 확인
EnvironmentNotFound 큐레이션된 환경이 지원 중단되었거나 사용할 수 없습니다 ml_client.environments.list()로 사용 가능한 환경을 나열하고 현재 버전을 사용하세요.
QuotaExceeded VM 크기에 대한 vCPU 할당량이 부족합니다. 할당량 증가 요청 또는 더 작은 VM 크기 사용

환경별 문제는 환경 이미지 빌드 문제 해결을 참조하세요.

다음 단계

이제 학습된 모델이 있으므로 온라인 엔드포인트를 사용하여 배포하는 방법을 알아봅니다.

자세한 예제는 Azure Machine Learning 예제 GitHub 리포지토리를 참조하세요.

Azure CLI 명령, Python SDK 클래스 또는 이 문서에 사용된 REST API에 대한 자세한 내용은 다음 참조 설명서를 참조하세요.