Freigeben über


Erstellen von Modellpaketen (Vorschau)

Das Modellpaket ist eine Funktion in Azure Machine Learning, mit der Sie alle Abhängigkeiten sammeln können, die zum Bereitstellen eines Machine Learning-Modells auf einer Bereitstellungsplattform erforderlich sind. Das Erstellen von Paketen vor der Bereitstellung von Modellen bietet eine robuste und zuverlässige Bereitstellung und einen effizienteren MLOps-Workflow. Pakete können zwischen Arbeitsbereichen und sogar außerhalb von Azure Machine Learning verschoben werden.

Wichtig

Dieses Feature ist zurzeit als öffentliche Preview verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar.

Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

In diesem Artikel erfahren Sie, wie Sie ein Modell für die Bereitstellung packen.

Voraussetzungen

Stellen Sie vor dem Ausführen der Schritte in diesem Artikel sicher, dass Sie über die folgenden erforderlichen Komponenten verfügen:

  • Ein Azure-Abonnement. Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning aus.

  • Ein Azure Machine Learning-Arbeitsbereich. Wenn Sie keinen Arbeitsbereich haben, führen Sie die Schritte im Artikel Verwalten von Arbeitsbereichen aus, um einen Arbeitsbereich zu erstellen.

  • Die rollenbasierte Zugriffssteuerung in Azure (Azure RBAC) wird verwendet, um Zugriff auf Vorgänge in Azure Machine Learning zu gewähren. Um die Schritte in diesem Artikel auszuführen, muss Ihr Benutzerkonto der Rolle „Besitzer“ oder „Mitwirkender“ für den Azure Machine Learning-Arbeitsbereich bzw. einer benutzerdefinierte Rolle zugewiesen werden. Weitere Informationen finden Sie unter Zugriff auf einen Azure Machine Learning-Arbeitsbereich verwalten.

Über dieses Beispiel

In diesem Beispiel erfahren Sie, wie Sie Modelle in Azure Machine Learning packen.

Klonen des Repositorys

Das Beispiel in diesem Artikel basiert auf Codebeispielen, die im Repository azureml-examples enthalten sind. Um die Befehle lokal auszuführen, ohne YAML und andere Dateien kopieren/einfügen zu müssen, klonen Sie zunächst das Repository, und ändern Sie dann die Verzeichnisse zum Ordner:

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

In diesem Abschnitt wird das Beispiel im Ordner endpoints/online/deploy-packages/custom-model verwendet.

Eine Verbindung mit Ihrem Arbeitsbereich herstellen

Stellen Sie eine Verbindung mit dem Azure Machine Learning-Arbeitsbereich her, in dem Sie Ihre Arbeit erledigen.

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

Packen eines Modells

Sie können Modellpakete explizit erstellen, damit Sie steuern können, wie der Verpackungsvorgang erfolgt. Verwenden Sie diesen Workflow in folgenden Fällen:

  • Sie möchten anpassen, wie das Modellpaket erstellt wird.
  • Sie möchten das Modellpaket außerhalb von Azure Machine Learning bereitstellen.
  • Sie möchten Modellpakete in einem MLOps-Workflow verwenden.

Sie können Modellpakete erstellen, indem Sie Folgendes angeben:

  • Zu packendes Modell: Jedes Modellpaket kann nur ein einzelnes Modell enthalten. Azure Machine Learning unterstützt das Verpacken mehrerer Modelle unter demselben Modellpaket nicht.
  • Basisumgebung: Umgebungen werden verwendet, um das Basisimage anzugeben, und in Python-Paketen die Abhängigkeiten, die Ihr Modell benötigt. Für MLflow-Modelle generiert Azure Machine Learning automatisch die Basisumgebung. Für benutzerdefinierte Modelle müssen Sie sie angeben.
  • Bereitstellungstechnologie: Der Rückschlussstapel, der zum Ausführen des Modells verwendet wird.

Registrieren des Modells

Modellpakete erfordern, dass das Modell entweder in Ihrem Arbeitsbereich oder in einer Azure Machine Learning-Registrierung registriert wird. In diesem Beispiel ist bereits eine lokale Kopie des Modells im Repository vorhanden, daher muss das Modell nur in der Registrierung im Arbeitsbereich veröffentlicht werden. Sie können diesen Schritt überspringen, wenn das Modell, das Sie bereitstellen möchten, bereits registriert ist.

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

Erstellen der Basisumgebung

Basisumgebungen werden verwendet, um das Basisimage und die Modell-Python-Paketabhängigkeiten anzugeben. Unser Modell erfordert, dass die folgenden Pakete wie in der Conda-Datei angegeben verwendet werden:

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

Hinweis

Wie unterscheidet sich die Basisumgebung von der Umgebung, die Sie für die Modellbereitstellung auf Online- und Batchendpunkten verwenden? Wenn Sie Modelle auf Endpunkten bereitstellen, muss Ihre Umgebung die Abhängigkeiten des Modells und die Python-Pakete enthalten, die für verwaltete Onlineendpunkte erforderlich sind. Dies bringt einen manuellen Prozess in die Bereitstellung ein, bei dem Sie die Anforderungen Ihres Modells mit den Anforderungen der Bereitstellungsplattform kombinieren müssen. Andererseits wird durch die Verwendung von Modellpaketen diese Reibung entfernt, da die erforderlichen Pakete für den Rückschlussserver automatisch zum Verpackungszeitpunkt in das Modellpaket eingefügt werden.

Erstellen Sie die Umgebung wie folgt:

Erstellen einer Umgebungsdefinition.

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.

Erstellen Sie dann die Umgebung:

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

Erstellen einer Paketspezifikation

Sie können Modellpakete in Azure Machine Learning erstellen, indem Sie die Azure CLI oder das Azure Machine Learning SDK für Python verwenden. Die benutzerdefinierte Paketspezifikation unterstützt die folgenden Attribute:

attribute type Beschreibung Erforderlich
target_environment str Der Name des zu erstellenden Pakets. Das Ergebnis eines Paketvorgangs ist eine Umgebung in Azure Machine Learning. Ja
base_environment_source object Das Basisimage zum Erstellen des Pakets, in dem Abhängigkeiten für das Modell angegeben werden. Ja, es sei denn, das Modell ist MLflow.
base_environment_source.type str Der Typ des Basisimages. Nur unter Verwendung einer anderen Umgebung, da das Basisimage unterstützt wird (type: environment_asset) unterstützt wird.
base_environment_source.resource_id str Die Ressourcen-ID der zu verwendenden Basisumgebung. Verwenden Sie das Format azureml:<name>:<version> oder eine lange Ressourcen-ID.
inferencing_server object Der zu verwendende Rückschlussserver. Ja
inferencing_server.type azureml_online
custom
Verwenden Sie azureml_online für den Azure Machine Learning-Rückschlussserver oder custom für einen benutzerdefinierten Onlineserver wie TensorFlow Serving oder Torch Serve. Ja
inferencing_server.code_configuration object Die Codekonfiguration mit der Rückschlussroutine. Sie sollte mindestens eine Python-Datei mit Methoden init und run enthalten. Ja, es sei denn, das Modell ist MLflow.
model_configuration object Die Modellkonfiguration. Verwenden Sie dieses Attribut, um zu steuern, wie das Modell im resultierenden Image gepackt wird. Nein
model_configuration.mode download
copy
Geben Sie an, wie das Modell im Paket platziert werden würde. Mögliche Werte sind download (Standard) und copy. Verwenden Sie download, wenn das Modell zur Bereitstellungszeit aus der Modellregistrierung heruntergeladen werden soll. Diese Option erstellt kleinere Docker-Images, da das Modell nicht enthalten ist. Verwenden Sie copy, wenn Sie das Image von Azure Machine Learning trennen möchten. Das Modell wird zum Paketzeitpunkt in das Docker-Image kopiert. copy wird für private Link-aktivierte Arbeitsbereiche nicht unterstützt. Nein
  1. Erstellen Sie eine Paketspezifikation wie folgt:

    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. Starten Sie den Modellpaketvorgang:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  3. Das Ergebnis des Paketvorgangs ist eine Umgebung.

Packen eines Modells mit Abhängigkeiten in privaten Python-Feeds

Modellpakete können Python-Abhängigkeiten auflösen, die in privaten Feeds verfügbar sind. Um diese Funktion zu verwenden, müssen Sie eine Verbindung aus Ihrem Arbeitsbereich mit dem Feed erstellen und die PAT-Tokenkonfiguration angeben. Der folgende Python-Code zeigt, wie Sie den Arbeitsbereich konfigurieren können, in dem Sie den Paketvorgang ausführen.

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)

Nachdem die Verbindung erstellt wurde, kompilieren Sie das Modellpaket, wie im Abschnitt für das Packen eines Modells beschrieben. Im folgenden Beispiel verwendet die Basisumgebung des Pakets einen privaten Feed für die Python-Abhängigkeit bar, wie in der folgenden Conda-Datei angegeben:

conda.yml

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

Wenn Sie ein MLflow-Modell verwenden, werden Modellabhängigkeiten innerhalb des Modells selbst angegeben und daher wird keine Basisumgebung benötigt. Geben Sie stattdessen beim Protokollieren des Modells private Feedabhängigkeiten an, wie in Protokollierungsmodellen mit einer benutzerdefinierten Signatur, Umgebung oder Beispielen erläutert.

Packen eines Modells, das in einer Registrierung gehostet wird

Modellpakete bieten eine praktische Möglichkeit zum Sammeln von Abhängigkeiten vor der Bereitstellung. Wenn Jedoch Modelle in Registrierungen gehostet werden, ist das Bereitstellungsziel in der Regel ein anderer Arbeitsbereich. Verwenden Sie beim Erstellen von Paketen in diesem Setup die target_environment-Eigenschaft, um den vollständigen Speicherort anzugeben, an dem das Modellpaket erstellt werden soll, statt nur dessen Namen.

Der folgende Code erstellt ein Paket des t5-base-Modells aus einer Registrierung:

  1. Stellen Sie eine Verbindung mit der Registrierung her, in der sich das Modell befindet, und mit dem Arbeitsbereich, in dem Sie das Modellpaket erstellen müssen:

    az login
    
  2. Rufen Sie einen Verweis auf das Modell ab, das Sie packen möchten. In diesem Fall packen wir das Modell t5-base aus der azureml-Registrierung.

    MODEL_NAME="t5-base"
    MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
    
  3. Konfigurieren Sie eine Paketspezifikation. Da das Modell, das wir verpacken möchten, MLflow ist, sind die Basisumgebung und das Bewertungsskript optional.

    package.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: pkg-t5-base-online
    inferencing_server: 
        type: azureml_online
    
  4. Starten Sie den Vorgang zum Erstellen des Modellpakets:

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. Das Paket wird nun im Zielarbeitsbereich erstellt und kann bereitgestellt werden.

Packen von Modellen für die Bereitstellung außerhalb von Azure Machine Learning

Modellpakete können bei Bedarf außerhalb von Azure Machine Learning bereitgestellt werden. Um die Portabilität zu gewährleisten, müssen Sie nur sicherstellen, dass die Modellkonfiguration in Ihrem Paket den Modus auf copy gesetzt hat, sodass das Modell selbst innerhalb des generierten Docker-Images kopiert wird, anstatt von der Modellregistrierung in Azure Machine Learning zu referenziert zu werden.

Der folgende Code zeigt, wie Sie copy in einem Modellpaket konfigurieren:

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

Nächster Schritt