Modelpakketten maken (preview)

Modelpakket is een mogelijkheid in Azure Machine Learning waarmee u alle afhankelijkheden kunt verzamelen die nodig zijn voor het implementeren van een machine learning-model op een dienend platform. Het maken van pakketten voordat u modellen implementeert, biedt robuuste en betrouwbare implementatie en een efficiëntere MLOps-werkstroom. Pakketten kunnen worden verplaatst tussen werkruimten en zelfs buiten Azure Machine Learning.

Belangrijk

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview-versie wordt geleverd zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt.

Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

In dit artikel leert u hoe u een model inpakt voor implementatie.

Vereisten

Voordat u de stappen in dit artikel volgt, moet u ervoor zorgen dat u over de volgende vereisten beschikt:

  • Een Azure-abonnement. Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint. Probeer de gratis of betaalde versie van Azure Machine Learning.

  • Een Azure Machine Learning-werkruimte. Als u nog geen werkruimte hebt, gebruikt u de stappen in het artikel Werkruimtenbeheren om er een te maken.

  • Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) wordt gebruikt om toegang te verlenen tot bewerkingen in Azure Machine Learning. Als u de stappen in dit artikel wilt uitvoeren, moet aan uw gebruikersaccount de rol eigenaar of inzender voor de Azure Machine Learning-werkruimte of een aangepaste rol worden toegewezen. Zie Toegang tot een Azure Machine Learning-werkruimte beheren voor meer informatie.

Over dit voorbeeld

In dit voorbeeld leert u hoe u modellen in Azure Machine Learning kunt verpakken.

De opslagplaats klonen

Het voorbeeld in dit artikel is gebaseerd op codevoorbeelden in de opslagplaats azureml-examples . Als u de opdrachten lokaal wilt uitvoeren zonder YAML en andere bestanden te hoeven kopiëren/plakken, kloont u eerst de opslagplaats en wijzigt u vervolgens mappen in de map:

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

In deze sectie wordt het voorbeeld gebruikt in de mapeindpunten /online/deploy-packages/custom-model.

Verbinding maken met uw werkruimte

Verbinding maken naar de Azure Machine Learning-werkruimte waar u uw werk doet.

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

Een model verpakken

U kunt modelpakketten expliciet maken, zodat u kunt bepalen hoe de verpakkingsbewerking wordt uitgevoerd. Gebruik deze werkstroom wanneer:

  • U wilt aanpassen hoe het modelpakket wordt gemaakt.
  • U wilt het modelpakket buiten Azure Machine Learning implementeren.
  • U wilt modelpakketten gebruiken in een MLOps-werkstroom.

U kunt modelpakketten maken door het volgende op te geven:

  • Model naar pakket: elk modelpakket kan slechts één model bevatten. Azure Machine Learning biedt geen ondersteuning voor het verpakken van meerdere modellen onder hetzelfde modelpakket.
  • Basisomgeving: omgevingen worden gebruikt om de basisinstallatiekopieën aan te geven en in Python-pakketten afhankelijkheden die uw model nodig heeft. Voor MLflow-modellen genereert Azure Machine Learning automatisch de basisomgeving. Voor aangepaste modellen moet u deze opgeven.
  • Ondersteunende technologie: De deductiestack die wordt gebruikt om het model uit te voeren.

Het model registreren

Voor modelpakketten moet het model worden geregistreerd in uw werkruimte of in een Azure Machine Learning-register. In dit voorbeeld hebt u al een lokale kopie van het model in de opslagplaats, dus u hoeft het model alleen in het register in de werkruimte te publiceren. U kunt deze sectie overslaan als het model dat u probeert te implementeren al is geregistreerd.

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

De basisomgeving maken

Basisomgevingen worden gebruikt om de basisinstallatiekopieën en de python-pakketafhankelijkheden van het model aan te geven. Voor ons model moeten de volgende pakketten worden gebruikt zoals aangegeven in het conda-bestand:

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

Notitie

Hoe verschilt de basisomgeving van de omgeving die u gebruikt voor modelimplementatie naar online- en batcheindpunten? Wanneer u modellen implementeert op eindpunten, moet uw omgeving de afhankelijkheden van het model en de Python-pakketten opnemen die nodig zijn om beheerde online-eindpunten te laten werken. Dit brengt een handmatig proces in de implementatie, waarbij u de vereisten van uw model moet combineren met de vereisten van het ondersteunende platform. Aan de andere kant verwijdert het gebruik van modelpakketten deze wrijving, omdat de vereiste pakketten voor de deductieserver automatisch in het modelpakket worden geïnjecteerd tijdens de verpakking.

Maak de omgeving als volgt:

Maak een omgevingsdefinitie:

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.

Maak vervolgens de omgeving:

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

Een pakketspecificatie maken

U kunt modelpakketten maken in Azure Machine Learning met behulp van de Azure CLI of de Azure Machine Learning SDK voor Python. De specificatie van het aangepaste pakket ondersteunt de volgende kenmerken:

Kenmerk Type Beschrijving Vereist
target_environment str De naam van het pakket dat moet worden gemaakt. Het resultaat van een pakketbewerking is een omgeving in Azure Machine Learning. Ja
base_environment_source object De basisinstallatiekopieën die moeten worden gebruikt om het pakket te maken waarin afhankelijkheden voor het model worden opgegeven. Ja, tenzij het model MLflow is.
base_environment_source.type str Het type basisinstallatiekopie. Alleen het gebruik van een andere omgeving omdat de basisinstallatiekopieën worden ondersteund (type: environment_asset) wordt ondersteund.
base_environment_source.resource_id str De resource-id van de te gebruiken basisomgeving. Gebruik de indeling azureml:<name>:<version> of een lange resource-id.
inferencing_server object De deductieserver die moet worden gebruikt. Ja
inferencing_server.type azureml_online
custom
Gebruik azureml_online deze functie voor de Azure Machine Learning-deductieserver of custom voor een aangepaste onlineserver, zoals TensorFlow-server of Torch Serve. Ja
inferencing_server.code_configuration object De codeconfiguratie met de deductieroutine. Het moet ten minste één Python-bestand bevatten met methoden init en run. Ja, tenzij het model MLflow is.
model_configuration object De modelconfiguratie. Gebruik dit kenmerk om te bepalen hoe het model wordt verpakt in de resulterende afbeelding. Nee
model_configuration.mode download
copy
Geef aan hoe het model in het pakket wordt geplaatst. Mogelijke waarden zijn download (standaard) en copy. Gebruik download dit wanneer u wilt dat het model tijdens de implementatie wordt gedownload uit het modelregister. Met deze optie maakt u kleinere Docker-installatiekopieën omdat het model er niet in is opgenomen. Gebruik copy deze optie als u de verbinding met de installatiekopieën van Azure Machine Learning wilt verbreken. Het model wordt tijdens het pakket gekopieerd in de docker-installatiekopieën. copy wordt niet ondersteund voor werkruimten met private link-functionaliteit. Nee
  1. Maak als volgt een pakketspecificatie:

    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. Start de modelpakketbewerking:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  3. Het resultaat van de pakketbewerking is een omgeving.

Een model verpakken met afhankelijkheden in persoonlijke Python-feeds

Modelpakketten kunnen Python-afhankelijkheden oplossen die beschikbaar zijn in privéfeeds. Als u deze mogelijkheid wilt gebruiken, moet u een verbinding maken vanuit uw werkruimte naar de feed en de pat-tokenconfiguratie opgeven. De volgende Python-code laat zien hoe u de werkruimte kunt configureren waar u de pakketbewerking uitvoert.

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)

Zodra de verbinding is gemaakt, bouwt u het modelpakket zoals beschreven in de sectie voor Pakket een model. In het volgende voorbeeld gebruikt de basisomgeving van het pakket een privéfeed voor de Python-afhankelijkheid bar, zoals opgegeven in het volgende Conda-bestand:

conda.yml

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

Als u een MLflow-model gebruikt, worden modelafhankelijkheden in het model zelf aangegeven en is daarom geen basisomgeving nodig. Geef in plaats daarvan afhankelijkheden van privéfeeds op bij het vastleggen van het model, zoals wordt uitgelegd in logboekregistratiemodellen met een aangepaste handtekening, omgeving of voorbeelden.

Een model verpakken dat wordt gehost in een register

Modelpakketten bieden een handige manier om afhankelijkheden te verzamelen vóór de implementatie. Wanneer modellen echter worden gehost in registers, is het implementatiedoel meestal een andere werkruimte. Wanneer u pakketten in deze installatie maakt, gebruikt u de target_environment eigenschap om de volledige locatie op te geven waar u het modelpakket wilt maken, in plaats van alleen de naam.

Met de volgende code wordt een pakket van het t5-base model gemaakt op basis van een register:

  1. Verbinding maken naar het register waar het model zich bevindt en de werkruimte waarin u het modelpakket moet maken:

    az login
    
  2. Haal een verwijzing op naar het model dat u wilt verpakken. In dit geval verpakken we het model t5-base uit azureml het register.

    MODEL_NAME="t5-base"
    MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
    
  3. Configureer een pakketspecificatie. Omdat het model dat we willen verpakken MLflow is, is de basisomgeving en het scorescript optioneel.

    package.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: pkg-t5-base-online
    inferencing_server: 
        type: azureml_online
    
  4. Start de bewerking om het modelpakket te maken:

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. Het pakket wordt nu gemaakt in de doelwerkruimte en kan worden geïmplementeerd.

Pakketmodellen die buiten Azure Machine Learning moeten worden geïmplementeerd

Modelpakketten kunnen indien nodig buiten Azure Machine Learning worden geïmplementeerd. Om de draagbaarheid te garanderen, hoeft u er alleen voor te zorgen dat de modelconfiguratie in uw pakket is ingesteld copy op de modus zodat het model zelf wordt gekopieerd in de gegenereerde Docker-installatiekopieën in plaats van te verwijzen uit het modelregister in Azure Machine Learning.

De volgende code laat zien hoe u configureert copy in een modelpakket:

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

Volgende stap