다음을 통해 공유


모델 패키지 만들기(미리 보기)

모델 패키지는 기계 학습 모델을 제공 플랫폼에 배포하는 데 필요한 모든 종속성을 수집할 수 있는 Azure Machine Learning의 기능입니다. 모델을 배포하기 전에 패키지를 만들면 강력하고 안정적인 배포와 보다 효율적인 MLOps 워크플로가 제공됩니다. 패키지는 작업 영역 간 및 Azure Machine Learning 외부로도 이동할 수 있습니다.

Important

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

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

이 문서에서는 배포를 위해 모델을 패키지하는 방법을 알아봅니다.

필수 조건

이 문서의 단계를 수행하기 전에 다음과 같은 필수 구성 요소가 있는지 확인합니다.

  • Azure 구독 Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다. Azure Machine Learning 평가판 또는 유료 버전을 사용해 보세요.

  • Azure Machine Learning 작업 영역 작업 영역이 없으면 작업 영역 관리 방법 문서의 단계에서 작업 영역을 만듭니다.

  • Azure RBAC(Azure 역할 기반 액세스 제어)는 Azure Machine Learning의 작업에 대한 액세스 권한을 부여하는 데 사용됩니다. 이 문서의 단계를 수행하려면 사용자 계정에 Azure Machine Learning 작업 영역에 대한 소유자 또는 기여자 역할이 할당되거나 사용자 지정 역할이 할당되어야 합니다. 자세한 내용은 Azure Machine Learning 작업 영역 액세스 관리를 참조하세요.

  • 패키지할 모델. 이 예제에서는 작업 영역에 등록된 MLflow 모델을 사용합니다.

    주의

    대규모 언어 모델을 포함하여 Azure AI 모델 카탈로그의 모델에는 모델 패키징이 지원되지 않습니다. Azure AI 모델 카탈로그의 모델은 Azure AI 배포 대상에 대한 유추에 최적화되어 있으며 패키징에 적합하지 않습니다.

이 예에 대해

이 예제에서는 Azure Machine Learning에서 모델을 패키지하는 방법을 알아봅니다.

리포지토리 복제

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

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

이 섹션에서는 폴더 endpoints/online/deploy-packages/custom-model의 예제를 사용합니다.

작업 영역에 연결

작업을 수행할 Azure Machine Learning 작업 영역에 연결합니다.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

모델 패키지

패키징 작업을 수행하는 방법을 제어할 수 있도록 모델 패키지를 명시적으로 만들 수 있습니다. 다음과 같은 경우 이 워크플로를 사용합니다.

  • 모델 패키지를 만드는 방법을 사용자 지정하려고 합니다.
  • Azure Machine Learning 외부에 모델 패키지를 배포하려고 합니다.
  • MLOps 워크플로에서 모델 패키지를 사용하려고 합니다.

다음을 지정하여 모델 패키지를 만들 수 있습니다.

  • 패키지할 모델: 각 모델 패키지는 단일 모델만 포함할 수 있습니다. Azure Machine Learning은 동일한 모델 패키지에서 여러 모델의 패키징을 지원하지 않습니다.
  • 기본 환경: 환경은 기본 이미지를 나타내는 데 사용되며 Python 패키지에서 모델에 필요한 종속성을 나타냅니다. MLflow 모델의 경우 Azure Machine Learning은 기본 환경을 자동으로 생성합니다. 사용자 지정 모델의 경우 기본 환경을 지정해야 합니다.
  • 서비스 기술: 모델을 실행하는 데 사용되는 유추 스택입니다.

모델 등록

모델 패키지를 사용하려면 작업 영역이나 Azure Machine Learning 레지스트리에 모델을 등록해야 합니다. 이 예에서는 리포지토리에 모델의 로컬 복사본이 있으므로 작업 영역의 레지스트리에 모델을 게시하기만 하면 됩니다. 배포하려는 모델이 이미 등록된 경우 이 섹션을 건너뛸 수 있습니다.

MODEL_NAME='sklearn-regression'
MODEL_PATH='model'
az ml model create --name $MODEL_NAME --path $MODEL_PATH --type custom_model

기본 환경 만들기

기본 환경은 기본 이미지 및 모델 Python 패키지 종속성을 나타내는 데 사용됩니다. 모델을 사용하려면 conda 파일에 표시된 대로 다음 패키지를 사용해야 합니다.

conda.yaml

name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.9
  - numpy=1.23.5
  - pip=23.0.1
  - scikit-learn=1.2.2
  - scipy=1.10.1
  - xgboost==1.3.3

참고 항목

기본 환경은 온라인 및 일괄 처리 엔드포인트의 모델 배포에 사용하는 환경과 어떻게 다른가요? 엔드포인트에 모델을 배포하는 경우 관리형 온라인 엔드포인트가 작동하는 데 필요한 모델의 종속성 및 Python 패키지를 환경에 포함해야 합니다. 이렇게 하면 배포에 수동 프로세스가 제공되므로 모델의 요구 사항을 서비스 플랫폼의 요구 사항과 결합해야 합니다. 반면에 유추 서버에 필요한 패키지는 패키징 타임에 모델 패키지에 자동으로 삽입되므로 모델 패키지를 사용하면 이러한 충돌이 제거됩니다.

다음과 같이 환경을 만듭니다.

다음과 같이 환경 정의를 만듭니다.

sklearn-regression-env.yml

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: sklearn-regression-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: conda.yaml
description: An environment for models built with XGBoost and Scikit-learn.

그런 후 다음과 같이 환경을 만듭니다.

az ml environment create -f environment/sklearn-regression-env.yml

패키지 사양 만들기

Azure CLI 또는 Python용 Azure Machine Learning SDK를 사용하여 Azure Machine Learning에서 모델 패키지를 만들 수 있습니다. 사용자 지정 패키지 사양은 다음 특성을 지원합니다.

Attribute Type 설명 필수
target_environment str 만들 패키지의 이름. 패키지 작업의 결과는 Azure Machine Learning의 환경입니다.
base_environment_source object 모델에 대한 종속성이 지정된 패키지를 만드는 데 사용할 기본 이미지 예, 모델이 MLflow가 아닌 경우입니다.
base_environment_source.type str 기본 이미지의 형식 기본 이미지가 지원되는 다른 환경(type: environment_asset)만 사용할 수 있습니다.
base_environment_source.resource_id str 사용할 기본 환경의 리소스 ID. 형식 azureml:<name>:<version> 또는 긴 리소스 ID를 사용합니다.
inferencing_server object 사용할 유추 서버.
inferencing_server.type azureml_online
custom
Azure Machine Learning 유추 서버의 경우 custom을 사용하고, TensorFlow 서버 또는 Torch 서버와 같은 사용자 지정 온라인 서버의 경우 azureml_online을 사용합니다.
inferencing_server.code_configuration object 유추 루틴을 사용하는 코드 구성. 메서드 initrun이 포함된 Python 파일이 하나 이상 포함되어야 합니다. 예, 모델이 MLflow가 아닌 경우입니다.
model_configuration object 모델 구성. 이 특성을 사용하여 결과 이미지에서 모델을 패키지하는 방법을 제어할 수 있습니다. 아니요
model_configuration.mode download
copy
패키지에 모델을 배치하는 방법을 나타냅니다. 가능한 값은 download(기본값) 및 copy입니다. 배포 시 모델 레지스트리에서 모델을 다운로드하려는 경우 download를 사용합니다. 이 옵션은 모델이 포함되지 않으므로 더 작은 Docker 이미지를 만듭니다. Azure Machine Learning에서 이미지의 연결을 끊으려면 copy를 사용합니다. 모델은 패키지 타임에 Docker 이미지 내부에 복사됩니다. copy는 프라이빗 링크 지원 작업 영역에서 지원되지 않습니다. 아니요
  1. 다음과 같이 패키지 사양을 만듭니다.

    package-moe.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    base_environment_source:
        type: environment_asset
        resource_id: azureml:sklearn-regression-env:1
    target_environment: sklearn-regression-online-pkg
    inferencing_server: 
        type: azureml_online
        code_configuration:
          code: src
          scoring_script: score.py
    
  2. 다음과 같이 모델 패키지 작업을 시작합니다.

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  3. 패키지 작업의 결과는 환경입니다.

프라이빗 Python 피드에 종속성이 있는 모델 패키지

모델 패키지는 프라이빗 피드에서 사용할 수 있는 Python 종속성을 확인할 수 있습니다. 이 기능을 사용하려면 작업 영역에서 피드로의 연결을 만들고 PAT 토큰 구성을 지정해야 합니다. 다음 Python 코드는 패키지 작업을 실행하는 작업 영역을 구성하는 방법을 보여 줍니다.

from azure.ai.ml.entities import WorkspaceConnection
from azure.ai.ml.entities import PatTokenConfiguration

# fetching secrets from env var to secure access, these secrets can be set outside or source code
git_pat = os.environ["GIT_PAT"]

credentials = PatTokenConfiguration(pat=git_pat)

ws_connection = WorkspaceConnection(
    name="<workspace_connection_name>",
    target="<git_url>",
    type="git",
    credentials=credentials,
)

ml_client.connections.create_or_update(ws_connection)

연결이 만들어지면 모델 패키지 섹션에 설명된 대로 모델 패키지를 빌드합니다. 다음 예제에서 패키지의 기본 환경은 다음 conda 파일에 지정된 대로 Python 종속성 bar에 대한 프라이빗 피드를 사용합니다.

conda.yml

name: foo
channels:
  - defaults
dependencies:
  - python
  - pip
  - pip:
    - --extra-index-url <python_feed_url>
    - bar

MLflow 모델을 사용하는 경우 모델 종속성이 모델 자체 내에 표시되므로 기본 환경이 필요하지 않습니다. 대신, 사용자 지정 서명, 환경 또는 샘플을 사용하여 모델 로깅에 설명된 대로 모델을 로깅할 때 프라이빗 피드 종속성을 지정합니다.

레지스트리에 호스트되는 모델 패키지

모델 패키지는 배포 전에 종속성을 수집하는 편리한 방법을 제공합니다. 그러나 모델이 레지스트리에서 호스트되는 경우 배포 대상은 일반적으로 다른 작업 영역입니다. 이 설정에서 패키지를 만들 때 target_environment 속성을 사용해서 단지 이름이 아니라 모델 패키지를 만들 전체 위치를 지정합니다.

다음 코드는 레지스트리에서 t5-base 모델의 패키지를 만듭니다.

  1. 모델이 있는 레지스트리와 모델 패키지를 만들어야 하는 작업 영역에 연결합니다.

    az login
    
  2. 패키지하려는 모델에 대한 참조를 가져옵니다. 이 경우 azureml 레지스트리에서 모델 t5-base를 패키징합니다.

    MODEL_NAME="t5-base"
    MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
    
  3. 패키지 사양을 구성합니다. 패키지하려는 모델은 MLflow이므로 기본 환경 및 채점 스크립트는 선택 사항입니다.

    package.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: pkg-t5-base-online
    inferencing_server: 
        type: azureml_online
    
  4. 모델 패키지를 만드는 작업을 시작합니다.

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. 이제 패키지가 대상 작업 영역에 만들어지고 배포할 준비가 되었습니다.

Azure Machine Learning 외부에서 배포할 모델 패키지

필요한 경우 모델 패키지를 Azure Machine Learning 외부에 배포할 수 있습니다. 이식성을 보장하려면 Azure Machine Learning의 모델 레지스트리에서 참조하는 대신 모델 자체가 생성된 Docker 이미지 내에 복사되도록 패키지의 모델 구성의 해당 모드를 copy로 설정하기만 하면 됩니다.

다음 코드는 모델 패키지에서 copy를 구성하는 방법을 보여 줍니다.

package-external.yml

$schema: http://azureml/sdk-2-0/ModelVersionPackage.json
base_environment_source:
    type: environment_asset
    resource_id: azureml:sklearn-regression-env:1
target_environment: sklearn-regression-docker-pkg
inferencing_server: 
    type: azureml_online
    code_configuration:
      code: src
      scoring_script: score.py
model_configuration:
  mode: copy

다음 단계