Azure에 machine learning 모델 배포Deploy machine learning models to Azure

Azure 클라우드에서 기계 학습 또는 심층 학습 모델을 웹 서비스로 배포 하는 방법에 대해 알아봅니다.Learn how to deploy your machine learning or deep learning model as a web service in the Azure cloud. Azure IoT Edge 장치에 배포할 수도 있습니다.You can also deploy to Azure IoT Edge devices.

워크플로는 모델을 배포하는 위치와 관계없이 유사합니다.The workflow is similar no matter where you deploy your model:

  1. 모델을 등록 합니다 (선택 사항, 아래 참조).Register the model (optional, see below).
  2. 코드 없는 배포를 사용 하지 않는 경우 유추 구성을 준비 합니다.Prepare an inference configuration (unless using no-code deployment).
  3. 코드 없는 배포를 사용 하지 않는 경우 항목 스크립트를 준비 합니다.Prepare an entry script (unless using no-code deployment).
  4. 계산 대상을 선택 합니다.Choose a compute target.
  5. 컴퓨팅 대상에 모델을 배포합니다.Deploy the model to the compute target.
  6. 결과 웹 서비스를 테스트 합니다.Test the resulting web service.

Machine learning 배포 워크플로와 관련 된 개념에 대 한 자세한 내용은 Azure Machine Learning를 사용 하 여 모델 관리, 배포 및 모니터링을 참조 하세요.For more information on the concepts involved in the machine learning deployment workflow, see Manage, deploy, and monitor models with Azure Machine Learning.

필수 구성 요소Prerequisites

작업 영역에 연결Connect to your workspace

Azure CLI 설명서의 지침에 따라 구독 컨텍스트를 설정합니다.Follow the directions in the Azure CLI documentation for setting your subscription context.

그런 다음 다음을 수행 합니다.Then do:

az ml workspace list --resource-group=<my resource group>

액세스 권한이 있는 작업 영역을 볼 수 있습니다.to see the workspaces you have access to.

모델 등록 (선택 사항)Register your model (optional)

등록된 모델은 모델을 구성하는 하나 이상의 파일에 대한 논리적 컨테이너입니다.A registered model is a logical container for one or more files that make up your model. 예를 들어 여러 파일에 저장 된 모델의 경우 작업 영역에서 단일 모델로 등록할 수 있습니다.For example, if you have a model that's stored in multiple files, you can register them as a single model in the workspace. 파일을 등록 한 후 등록 된 모델을 다운로드 하거나 배포 하 고 등록 한 모든 파일을 받을 수 있습니다.After you register the files, you can then download or deploy the registered model and receive all the files that you registered.

버전 추적용 모델을 등록 하는 것이 좋지만 필수는 아닙니다.Registering a model for version tracking is recommended but not required. 모델을 등록 하지 않고 계속 진행 하는 경우 inferenceconfig.js InferenceConfig 에서 원본 디렉터리를 지정 하 고 해당 원본 디렉터리 내에 모델이 있는지 확인 해야 합니다.If you would rather proceed without registering a model, you will need to specify a source directory in your InferenceConfig or inferenceconfig.json and ensure your model resides within that source directory.

모델을 등록할 때 학습 실행의 클라우드 위치 또는 로컬 디렉터리의 경로를 제공 합니다.When you register a model, you provide the path of either a cloud location (from a training run) or a local directory. 이 경로는 등록 프로세스의 일부로 업로드할 파일을 찾는 것입니다.This path is just to locate the files for upload as part of the registration process. 항목 스크립트에 사용 된 경로와 일치 하지 않아도 됩니다.It doesn't need to match the path used in the entry script. 자세한 내용은 항목 스크립트에서 모델 파일 찾기를 참조 하세요.For more information, see Locate model files in your entry script.

중요

TagsAzure Machine Learning Studio의 모델 페이지에서 필터링 기준 옵션을 사용 하는 경우 고객을 사용 하는 대신 TagName : TagValue TagName=TagValue (공간 없이)를 사용 해야 합니다.When using Filter by Tags option on the Models page of Azure Machine Learning Studio, instead of using TagName : TagValue customers should use TagName=TagValue (without space)

다음 예에서는 모델을 등록 하는 방법을 보여 줍니다.The following examples demonstrate how to register a model.

Azure ML 학습 실행에서 모델 등록Register a model from an Azure ML training run

az ml model register -n sklearn_mnist  --asset-path outputs/sklearn_mnist_model.pkl  --experiment-name myexperiment --run-id myrunid --tag area=mnist

ml 확장이 설치되지 않았다는 오류 메시지가 표시되면 다음 명령을 사용하여 설치합니다.If you get an error message stating that the ml extension isn't installed, use the following command to install it:

az extension add -n azure-cli-ml

--asset-path매개 변수는 모델의 클라우드 위치를 참조 합니다.The --asset-path parameter refers to the cloud location of the model. 이 예제에서는 단일 파일의 경로를 사용 합니다.In this example, the path of a single file is used. 모델 등록에 여러 파일을 포함 하려면를 --asset-path 파일을 포함 하는 폴더의 경로로 설정 합니다.To include multiple files in the model registration, set --asset-path to the path of a folder that contains the files.

로컬 파일에서 모델 등록Register a model from a local file

az ml model register -n onnx_mnist -p mnist/model.onnx

모델 등록에 여러 파일을 포함 하려면를 -p 파일을 포함 하는 폴더의 경로로 설정 합니다.To include multiple files in the model registration, set -p to the path of a folder that contains the files.

에 대 한 자세한 내용은 az ml model register 참조 설명서를 참조 하세요.For more information on az ml model register, consult the reference documentation.

항목 스크립트 정의Define an entry script

항목 스크립트는 배포된 웹 서비스에 전송된 데이터를 받아서 모델에 전달합니다.The entry script receives data submitted to a deployed web service and passes it to the model. 그런 후 모델이 반환한 응답을 수락한 후 클라이언트에 반환합니다.It then takes the response returned by the model and returns that to the client. 이 스크립트는 모델에 따라 다릅니다.The script is specific to your model. 모델에 필요한 데이터를 이해 하 고 반환 해야 합니다.It must understand the data that the model expects and returns.

입력 스크립트에서 수행 해야 하는 두 가지 작업은 다음과 같습니다.The two things you need to accomplish in your entry script are:

  1. 호출 된 함수를 사용 하 여 모델 로드 init()Loading your model (using a function called init())
  2. 호출 된 함수를 사용 하 여 입력 데이터에서 모델 실행 run()Running your model on input data (using a function called run())

이러한 단계를 자세히 살펴보겠습니다.Let's go through these steps in detail.

Init () 쓰기Writing init()

등록 된 모델 로드Loading a registered model

등록 된 모델은 라는 환경 변수가 가리키는 경로에 저장 됩니다 AZUREML_MODEL_DIR .Your registered models are stored at a path pointed to by an environment variable called AZUREML_MODEL_DIR. 정확한 디렉터리 구조에 대 한 자세한 내용은 항목 스크립트에서 모델 파일 찾기 를 참조 하세요.For more information on the exact directory structure, see Locate model files in your entry script

로컬 모델 로드Loading a local model

모델을 등록 하 고 원본 디렉터리의 일부로 모델을 전달한 경우 점수 매기기 스크립트를 기준으로 모델에 대 한 경로를 전달 하 여 로컬에서와 마찬가지로이를 읽을 수 있습니다.If you opted against registering your model and passed your model as part of your source directory, you can read it in like you would locally, by passing the path to the model relative to your scoring script. 예를 들어 다음과 같이 구성 된 디렉터리가 있습니다.For example, if you had a directory structured as:


- source_dir
    - score.py
    - models
        - model1.onnx

다음 Python 코드를 사용 하 여 모델을 로드할 수 있습니다.you could load your models with the following Python code:

import os

model = open(os.path.join('.', 'models', 'model1.onnx'))

쓰기 실행 ()Writing run()

run() 는 모델이 점수 매기기 요청을 받을 때마다 실행 되며, 요청의 본문은 다음 구조의 JSON 문서가 될 것으로 예상 합니다.run() is executed every time your model receives a scoring request, and expects the body of the request to be a JSON document with the following structure:

{
    "data": <model-specific-data-structure>
}

에 대 한 입력은 run() "data" 키 뒤에 나오는 항목을 포함 하는 Python 문자열입니다.The input to run() is a Python string containing whatever follows the "data" key.

다음 예에서는 등록 된 scikit 모델을 로드 하 고 numpy 데이터를 사용 하 여 점수를 매기는 방법을 보여 줍니다.The following example demonstrates how to load a registered scikit-learn model and score it with numpy data:

import json
import numpy as np
import os
from sklearn.externals import joblib


def init():
    global model
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')
    model = joblib.load(model_path)

def run(data):
    try:
        data = np.array(json.loads(data))
        result = model.predict(data)
        # You can return any data type, as long as it is JSON serializable.
        return result.tolist()
    except Exception as e:
        error = str(e)
        return error

자동 Swagger 스키마 생성 및 이진 (예: 이미지) 데이터를 포함 하 여 고급 예제를 보려면 고급 입력 스크립트 작성 문서 를 참조 하세요.For more advanced examples, including automatic Swagger schema generation and binary (i.e. image) data, read the article on advanced entry script authoring

유추 구성 정의Define an inference configuration

유추 구성은 모델을 포함 하는 웹 서비스를 설정 하는 방법을 설명 합니다.An inference configuration describes how to set up the web-service containing your model. 나중에 모델을 배포할 때 사용 됩니다.It's used later, when you deploy the model.

최소 유추 구성은 다음과 같이 작성할 수 있습니다.A minimal inference configuration can be written as:

{
    "entryScript": "score.py",
    "sourceDirectory": "./working_dir"
}

이는 machine learning 배포에서 디렉터리의 파일을 사용 하 여 들어오는 요청을 처리 하도록 지정 합니다 score.py ./working_dir .This specifies that the machine learning deployment will use the file score.py in the ./working_dir directory to process incoming requests.

유추 구성에 대 한 자세한 내용은 이 문서를 참조 하세요.See this article for a more thorough discussion of inference configurations.

유추 구성과 함께 사용자 지정 Docker 이미지를 사용 하는 방법에 대 한 자세한 내용은 사용자 지정 docker 이미지를 사용 하 여 모델을 배포 하는 방법을 참조 하세요.For information on using a custom Docker image with an inference configuration, see How to deploy a model using a custom Docker image.

계산 대상 선택Choose a compute target

모델을 호스팅하는 데 사용하는 컴퓨팅 대상은 배포된 엔드포인트의 비용 및 가용성에 영향을 줍니다.The compute target you use to host your model will affect the cost and availability of your deployed endpoint. 이 표를 사용하여 적절한 컴퓨팅 대상을 선택합니다.Use this table to choose an appropriate compute target.

컴퓨팅 대상Compute target 사용 대상Used for GPU 지원GPU support FPGA 지원FPGA support DescriptionDescription
로컬 웹 서비스Local web service 테스트/디버깅Testing/debugging     제한된 테스트 및 문제 해결에 사용합니다.Use for limited testing and troubleshooting. 하드웨어 가속은 로컬 시스템에서 라이브러리를 사용하는지에 따라 달라집니다.Hardware acceleration depends on use of libraries in the local system.
AKS(Azure Kubernetes Service)Azure Kubernetes Service (AKS) 실시간 유추Real-time inference (웹 서비스 배포)Yes (web service deployment) Yes 대규모 프로덕션 배포에 사용합니다.Use for high-scale production deployments. 배포된 서비스의 빠른 응답 시간 및 자동 크기 조정을 제공합니다.Provides fast response time and autoscaling of the deployed service. 클러스터 자동 크기 조정은 Azure Machine Learning SDK를 통해 지원되지 않습니다.Cluster autoscaling isn't supported through the Azure Machine Learning SDK. AKS 클러스터의 노드를 변경하려면 Azure Portal에서 AKS 클러스터의 UI를 사용합니다.To change the nodes in the AKS cluster, use the UI for your AKS cluster in the Azure portal.

디자이너에서 지원됩니다.Supported in the designer.
Azure Container InstancesAzure Container Instances 테스트 또는 개발Testing or development     48GB 미만의 RAM이 필요한 소규모 CPU 기반 워크로드에 사용합니다.Use for low-scale CPU-based workloads that require less than 48 GB of RAM.

디자이너에서 지원됩니다.Supported in the designer.
Azure Machine Learning 컴퓨팅 클러스터Azure Machine Learning compute clusters 일괄 처리 유추Batch inference (기계 학습 파이프라인)Yes (machine learning pipeline)   서버리스 컴퓨팅에서 일괄 처리 채점을 실행합니다.Run batch scoring on serverless compute. 우선 순위가 보통이거나 낮은 VM을 지원합니다.Supports normal and low-priority VMs. 실시간 추론을 지원하지 않습니다.No support for realtime inference.

참고

로컬, Azure Machine Learning 컴퓨팅 및 Azure Machine Learning 컴퓨팅 클러스터와 같은 컴퓨팅 대상은 학습 및 실험을 위해 GPU를 지원하지만, 웹 서비스로 배포할 때 GPU를 유추에 사용하는 것은 AKS에서만 지원됩니다.Although compute targets like local, Azure Machine Learning compute, and Azure Machine Learning compute clusters support GPU for training and experimentation, using GPU for inference when deployed as a web service is supported only on AKS.

기계 학습 파이프라인을 통해 채점할 때 GPU를 유추에 사용하는 것은 Azure Machine Learning 컴퓨팅에서만 지원됩니다.Using a GPU for inference when scoring with a machine learning pipeline is supported only on Azure Machine Learning compute.

클러스터 SKU를 선택할 때는 먼저 스케일 업한 다음, 스케일 아웃합니다. 모델에 필요한 RAM이 150%인 머신에서 시작하여 결과를 프로파일링하고 필요한 성능을 갖춘 머신을 찾습니다.When choosing a cluster SKU, first scale up and then scale out. Start with a machine that has 150% of the RAM your model requires, profile the result and find a machine that has the performance you need. 이를 파악한 후에는 동시 추론 요구에 맞게 머신 수를 늘립니다.Once you've learned that, increase the number of machines to fit your need for concurrent inference.

참고

  • 컨테이너 인스턴스는 크기가 1GB 미만인 작은 모델에만 적합합니다.Container instances are suitable only for small models less than 1 GB in size.
  • 큰 모델의 개발/테스트에는 단일 노드 AKS 클러스터를 사용합니다.Use single-node AKS clusters for dev/test of larger models.

배포 구성 정의Define a deployment configuration

배포 구성에 사용할 수 있는 옵션은 선택한 계산 대상에 따라 다릅니다.The options available for a deployment configuration differ depending on the compute target you choose.

deploymentconfig.json 문서의 항목은 LocalWebservice.deploy_configuration에 대한 매개 변수에 매핑됩니다.The entries in the deploymentconfig.json document map to the parameters for LocalWebservice.deploy_configuration. 다음 표에서는 JSON 문서의 엔터티 및 메서드에 대한 매개 변수 간의 매핑에 대해 설명합니다.The following table describes the mapping between the entities in the JSON document and the parameters for the method:

JSON 엔터티JSON entity 메서드 매개 변수Method parameter 설명Description
computeType 해당 없음NA 컴퓨팅 대상.The compute target. 로컬 대상의 경우 값은 local이어야 합니다.For local targets, the value must be local.
port port 서비스의 HTTP 엔드포인트를 노출할 로컬 포트입니다.The local port on which to expose the service's HTTP endpoint.

이 JSON은 CLI에서 사용할 수 있는 배포 구성의 예제입니다.This JSON is an example deployment configuration for use with the CLI:

{
    "computeType": "local",
    "port": 32267
}

자세한 내용은 이 참조를 참조 하세요.For more information, see this reference.

Machine learning 모델 배포Deploy your machine learning model

이제 모델을 배포할 준비가 되었습니다.You are now ready to deploy your model.

등록 된 모델 사용Using a registered model

Azure Machine Learning 작업 영역에 모델을 등록 한 경우 "mymodel: 1"을 모델 이름과 해당 버전 번호로 바꿉니다.If you registered your model in your Azure Machine Learning workspace, replace "mymodel:1" with the name of your model and its version number.

az ml model deploy -m mymodel:1 --ic inferenceconfig.json --dc deploymentconfig.json

로컬 모델 사용Using a local model

모델을 등록 하지 않으려는 경우의 inferenceconfig.js에 "sourceDirectory" 매개 변수를 전달 하 여 모델을 제공할 로컬 디렉터리를 지정할 수 있습니다.If you would prefer not to register your model, you can pass the "sourceDirectory" parameter in your inferenceconfig.json to specify a local directory from which to serve your model.

az ml model deploy --ic inferenceconfig.json --dc deploymentconfig.json

서비스 상태 이해Understanding service state

모델을 배포 하는 동안 완전히 배포 되는 동안 서비스 상태 변경이 표시 될 수 있습니다.During model deployment, you may see the service state change while it fully deploys.

다음 표에서는 다양 한 서비스 상태에 대해 설명 합니다.The following table describes the different service states:

웹 서비스 상태Webservice state DescriptionDescription 최종 상태?Final state?
변환은Transitioning 서비스의 배포를 진행 중입니다.The service is in the process of deployment. 아니요No
UnhealthyUnhealthy 서비스가 배포 되었지만 현재 연결할 수 없습니다.The service has deployed but is currently unreachable. 아니요No
예약 불가능Unschedulable 리소스가 부족 하 여 지금은 서비스를 배포할 수 없습니다.The service cannot be deployed at this time due to lack of resources. 아니요No
FailedFailed 오류 또는 충돌 때문에 서비스를 배포 하지 못했습니다.The service has failed to deploy due to an error or crash. Yes
정상Healthy 서비스가 정상 상태 이며 끝점을 사용할 수 있습니다.The service is healthy and the endpoint is available. Yes

을 배포 하는 경우 계산 대상의 Docker 이미지가 Azure Container Registry (ACR)에서 빌드되고 로드 됩니다.When deploying, Docker images for compute targets are built and loaded from Azure Container Registry (ACR). 기본적으로 Azure Machine Learning는 기본 서비스 계층을 사용 하는 ACR을 만듭니다.By default, Azure Machine Learning creates an ACR that uses the basic service tier. 작업 영역에 대 한 ACR을 표준 또는 프리미엄 계층으로 변경 하면 이미지를 빌드하고 계산 대상에 배포 하는 데 걸리는 시간이 줄어들 수 있습니다.Changing the ACR for your workspace to standard or premium tier may reduce the time it takes to build and deploy images to your compute targets. 자세한 내용은 Azure Container Registry 서비스 계층을 참조하세요.For more information, see Azure Container Registry service tiers.

일괄 처리 유추Batch inference

Azure Machine Learning Azure Machine Learning 계산 대상이 만들어지고 관리 됩니다.Azure Machine Learning Compute targets are created and managed by Azure Machine Learning. Azure Machine Learning 파이프라인에서 일괄 처리 예측에 사용할 수 있습니다.They can be used for batch prediction from Azure Machine Learning pipelines.

Azure Machine Learning 계산을 사용한 일괄 처리 유추 연습은 일괄 처리를 실행 하는 방법을 참조 하세요.For a walkthrough of batch inference with Azure Machine Learning Compute, see How to run batch predictions.

IoT Edge 유추IoT Edge inference

에 지에 배포 하는 기능은 미리 보기 상태입니다.Support for deploying to the edge is in preview. 자세한 내용은 Azure Machine Learning를 IoT Edge 모듈로 배포를 참조 하세요.For more information, see Deploy Azure Machine Learning as an IoT Edge module.

리소스 삭제Delete resources

배포 된 웹 서비스를 삭제 하려면를 사용 az ml service <name of webservice> 합니다.To delete a deployed webservice, use az ml service <name of webservice>.

작업 영역에서 등록 된 모델을 삭제 하려면 다음을 사용 합니다. az ml model delete <model id>To delete a registered model from your workspace, use az ml model delete <model id>

웹 서비스를 삭제 하 고 모델을 삭제하는 방법에 대해 자세히 알아보세요.Read more about deleting a webservice and deleting a model.

다음 단계Next steps