Bereitstellen von Machine Learning-Modellen für AzureDeploy machine learning models to Azure

Es wird beschrieben, wie Sie Ihr Machine Learning- oder Deep Learning-Modell als Webdienst in der Azure-Cloud bereitstellen.Learn how to deploy your machine learning or deep learning model as a web service in the Azure cloud. Darüber hinaus ist auch die Bereitstellung auf Azure IoT Edge-Geräten möglich.You can also deploy to Azure IoT Edge devices.

Der Workflow ist unabhängig vom Bereitstellungsort Ihres Modells sehr ähnlich:The workflow is similar no matter where you deploy your model:

  1. Registrieren des Modells (optional, siehe unten)Register the model (optional, see below).
  2. Vorbereiten einer Rückschlusskonfiguration (außer bei Bereitstellung ohne Code)Prepare an inference configuration (unless using no-code deployment).
  3. Vorbereiten eines Eingabeskripts (außer bei Bereitstellung ohne Code)Prepare an entry script (unless using no-code deployment).
  4. Auswählen eines ComputezielsChoose a compute target.
  5. Stellen Sie das Modell auf dem Computeziel bereit.Deploy the model to the compute target.
  6. Testen des resultierenden WebdienstsTest the resulting web service.

Weitere Informationen zu den Konzepten, die für den Workflow zur Bereitstellung von Machine Learning-Modellen gelten, finden Sie unter Verwalten, Bereitstellen und Überwachen von Modellen mit 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.

VoraussetzungenPrerequisites

Herstellen einer Verbindung mit Ihrem ArbeitsbereichConnect to your workspace

Befolgen Sie die Anweisungen in der Azure CLI-Dokumentation zum Festlegen Ihres Abonnementkontexts.Follow the directions in the Azure CLI documentation for setting your subscription context.

Führen Sie dann Folgendes aus:Then do:

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

um die Arbeitsbereiche anzuzeigen, auf die Sie Zugriff haben.to see the workspaces you have access to.

Registrieren Ihres Modells (optional)Register your model (optional)

Ein registriertes Modell ist ein logischer Container für eine oder mehrere Dateien, aus denen Ihr Modell besteht.A registered model is a logical container for one or more files that make up your model. Wenn Sie beispielsweise ein Modell verwenden, das in mehreren Dateien gespeichert ist, können Sie diese als einzelnes Modell im Arbeitsbereich registrieren.For example, if you have a model that's stored in multiple files, you can register them as a single model in the workspace. Nachdem Sie die Dateien registriert haben, können Sie das registrierte Modell herunterladen oder bereitstellen und alle Dateien empfangen, die Sie registriert haben.After you register the files, you can then download or deploy the registered model and receive all the files that you registered.

Tipp

Das Registrieren eines Modells für die Versionsverfolgung wird empfohlen, ist jedoch nicht erforderlich.Registering a model for version tracking is recommended but not required. Wenn Sie den Vorgang fortsetzen möchten, ohne ein Modell zu registrieren, müssen Sie in InferenceConfig oder inferenceconfig.json ein Quellverzeichnis angeben und sicherstellen, dass sich Ihr Modell innerhalb dieses Quellverzeichnisses befindet.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.

Tipp

Wenn Sie ein Modell registrieren, geben Sie den Pfad eines Cloudspeicherorts (aus einem Trainingslauf) oder eines lokalen Verzeichnisses an.When you register a model, you provide the path of either a cloud location (from a training run) or a local directory. Dieser Pfad wird lediglich dazu verwendet, die Dateien während des Registrierungsprozesses für das Hochladen zu finden.This path is just to locate the files for upload as part of the registration process. Er muss nicht mit dem Pfad identisch sein, der im Eingabeskript verwendet wird.It doesn't need to match the path used in the entry script. Weitere Informationen finden Sie unter Suchen nach Modelldateien im Eingabeskript.For more information, see Locate model files in your entry script.

Wichtig

Bei Verwendung der Option „Filtern nach Tags“ auf der Seite „Modelle“ von Azure Machine Learning Studio müssen Kunden TagName=TagValue (ohne Leerzeichen) anstelle von TagName : TagValue verwenden.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)

Die folgenden Beispiele veranschaulichen das Registrieren eines Modells.The following examples demonstrate how to register a model.

Registrieren eines Modells aus einer Azure ML-TrainingsausführungRegister 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

Tipp

Wenn Sie eine Fehlermeldung erhalten, in der mitgeteilt wird, dass die ml-Erweiterung nicht installiert ist, verwenden Sie den folgenden Befehl, um sie zu installieren: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

Der --asset-path-Parameter verweist auf den Cloudspeicherort des Modells.The --asset-path parameter refers to the cloud location of the model. In diesem Beispiel wird der Pfad einer einzelnen Datei verwendet.In this example, the path of a single file is used. Um mehrere Dateien in die Modellregistrierung aufzunehmen, legen Sie --asset-path auf den Pfad eines Ordners fest, der die Dateien enthält.To include multiple files in the model registration, set --asset-path to the path of a folder that contains the files.

Registrieren eines Modells aus einer lokalen DateiRegister a model from a local file

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

Um mehrere Dateien in die Modellregistrierung aufzunehmen, legen Sie -p auf den Pfad eines Ordners fest, der die Dateien enthält.To include multiple files in the model registration, set -p to the path of a folder that contains the files.

Weitere Informationen zu az ml model register finden Sie in der Referenzdokumentation.For more information on az ml model register, consult the reference documentation.

Definieren eines EinstiegsskriptsDefine an entry script

Das Eingangsskript empfängt an einen bereitgestellten Webdienst übermittelte Daten und übergibt sie an das Modell.The entry script receives data submitted to a deployed web service and passes it to the model. Anschließend nimmt es die vom Modell zurückgegebene Antwort entgegen und gibt diese an den Client zurück.It then takes the response returned by the model and returns that to the client. Das Skript ist auf Ihr Modell zugeschnitten.The script is specific to your model. In ihm muss die Struktur der vom Modell erwarteten und zurückgegebenen Daten bekannt sein.It must understand the data that the model expects and returns.

Sie müssen die folgenden beiden Schritte in Ihrem Eingabeskript ausführen:The two things you need to accomplish in your entry script are:

  1. Laden des Modells (mit einer Funktion namens init())Loading your model (using a function called init())
  2. Ausführen des Modells für Eingabedaten (mit einer Funktion namens run())Running your model on input data (using a function called run())

Wir gehen diese Schritte nun ausführlich durch.Let's go through these steps in detail.

Schreiben von init()Writing init()

Laden eines registrierten ModellsLoading a registered model

Die registrierten Modelle werden unter einem Pfad gespeichert, auf den von einer Umgebungsvariablen namens AZUREML_MODEL_DIR verwiesen wird.Your registered models are stored at a path pointed to by an environment variable called AZUREML_MODEL_DIR. Weitere Informationen zur genauen Verzeichnisstruktur finden Sie unter Suchen nach Modelldateien im Eingabeskript.For more information on the exact directory structure, see Locate model files in your entry script

Laden eines lokalen ModellsLoading a local model

Wenn Sie sich gegen die Registrierung Ihres Modells entschieden haben und das Modell als Teil Ihres Quellverzeichnisses übergeben haben, können Sie es wie lokal einlesen, indem Sie den Pfad zum Modell relativ zu Ihrem Bewertungsskript übergeben.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. Beispiel: Wenn Sie ein Verzeichnis mit folgender Struktur haben:For example, if you had a directory structured as:


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

können Sie Ihre Modelle mit dem folgenden Python-Code laden:you could load your models with the following Python code:

import os

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

Schreiben von run()Writing run()

run() wird jedes Mal ausgeführt, wenn das Modell eine Bewertungsanforderung empfängt, und erwartet, dass der Anforderungstext ein JSON-Dokument mit der folgenden Struktur ist: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>
}

Die Eingabe in run() ist eine Python-Zeichenfolge, die alles enthält, was auf den Schlüssel „data“ folgt.The input to run() is a Python string containing whatever follows the "data" key.

Das folgende Beispiel veranschaulicht, wie ein registriertes SciKit-learn-Modell geladen und mit numpy-Daten bewertet wird: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

Weiterführende Beispiele, einschließlich automatischer Swagger-Schemagenerierung und binärer Daten (d. h. Bilder), finden Sie im Artikel zum Erstellen von erweiterten Eingabeskripts.For more advanced examples, including automatic Swagger schema generation and binary (i.e. image) data, read the article on advanced entry script authoring

Definieren einer RückschlusskonfigurationDefine an inference configuration

Eine Rückschlusskonfiguration beschreibt, wie der Webdienst, der Ihr Modell enthält, eingerichtet werden kann.An inference configuration describes how to set up the web-service containing your model. Sie wird später verwendet, wenn Sie das Modell bereitstellen.It's used later, when you deploy the model.

Eine Konfiguration für minimalen Rückschluss kann wie folgt geschrieben werden:A minimal inference configuration can be written as:

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

Hiermit wird angegeben, dass bei der Machine Learning-Bereitstellung die Datei score.py im Verzeichnis ./working_dir verwendet wird, um eingehende Anforderungen zu verarbeiten.This specifies that the machine learning deployment will use the file score.py in the ./working_dir directory to process incoming requests.

In diesem Artikel finden Sie eine ausführliche Erörterung von Rückschlusskonfigurationen.See this article for a more thorough discussion of inference configurations.

Tipp

Informationen zur Verwendung eines benutzerdefinierten Docker-Images mit einer Rückschlusskonfiguration finden Sie unter Bereitstellen eines Modells mithilfe eines benutzerdefinierten Docker-Basisimages.For information on using a custom Docker image with an inference configuration, see How to deploy a model using a custom Docker image.

Auswählen eines ComputezielsChoose a compute target

Das Computeziel, das Sie zum Hosten Ihres Modells verwenden, wirkt sich auf die Kosten und Verfügbarkeit des bereitgestellten Endpunkts aus.The compute target you use to host your model will affect the cost and availability of your deployed endpoint. Verwenden Sie die folgende Tabelle, um ein geeignetes Computeziel auszuwählen:Use this table to choose an appropriate compute target.

ComputezielCompute target SyntaxelementeUsed for GPU-UnterstützungGPU support FPGA-UnterstützungFPGA support BESCHREIBUNGDescription
Lokaler  WebserviceLocal web service Testen/DebuggenTesting/debugging     Für eingeschränkte Tests und Problembehandlung verwenden.Use for limited testing and troubleshooting. Die Hardwarebeschleunigung hängt von der Verwendung von Bibliotheken im lokalen System ab.Hardware acceleration depends on use of libraries in the local system.
Azure Kubernetes Service (AKS)Azure Kubernetes Service (AKS) EchtzeitrückschlussReal-time inference Ja (Webdienstbereitstellung)Yes (web service deployment) JaYes Für hochgradig skalierbare Produktionsbereitstellungen verwenden.Use for high-scale production deployments. Bietet schnelle Antwortzeiten und die automatische Skalierung von bereitgestellten Diensten.Provides fast response time and autoscaling of the deployed service. Die automatische Skalierung von Clustern wird vom Azure Machine Learning SDK nicht unterstützt.Cluster autoscaling isn't supported through the Azure Machine Learning SDK. Die Knoten in Ihrem AKS-Cluster können Sie über die entsprechende Benutzeroberfläche im Azure-Portal ändern.To change the nodes in the AKS cluster, use the UI for your AKS cluster in the Azure portal.

Wird im Designer unterstützt.Supported in the designer.
Azure Container InstancesAzure Container Instances Testen oder EntwicklungTesting or development     Für CPU-lastige Workloads im kleinen Maßstab verwenden, die weniger als 48 GB Arbeitsspeicher erfordern.Use for low-scale CPU-based workloads that require less than 48 GB of RAM.

Wird im Designer unterstützt.Supported in the designer.
Azure Machine Learning-ComputeclusterAzure Machine Learning compute clusters Batchrückschluss Batch inference Ja (Machine Learning-Pipeline)Yes (machine learning pipeline)   Ausführen von Batchbewertungen auf serverlosen Computezielen.Run batch scoring on serverless compute. Unterstützt virtuelle Computer mit normaler und niedriger Priorität.Supports normal and low-priority VMs. Keine Unterstützung für Echtzeitrückschlüsse.No support for realtime inference.

Hinweis

Zwar unterstützen Computeziele wie „Lokal“, „Azure Machine Learning Compute“ und „Azure Machine Learning-Computecluster“ die GPU für Training und Experimente, jedoch wird die Verwendung von GPUs für Rückschlüsse nur bei Bereitstellung als Webdienst in AKS unterstützt.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.

Das Verwenden einer GPU für Rückschlüsse bei der Bewertung mit einer Machine Learning-Pipeline wird nur in Azure Machine Learning Compute unterstützt.Using a GPU for inference when scoring with a machine learning pipeline is supported only on Azure Machine Learning compute.

Bei der Auswahl einer Cluster-SKU müssen Sie zuerst hochskalieren und dann aufskalieren. Beginnen Sie mit einem Computer, der über 150 % des für Ihr Modell erforderlichen RAM verfügt, erstellen Sie ein Profil für das Ergebnis, und suchen Sie nach einem Computer mit der benötigten Leistung.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. Nachdem Sie sich damit vertraut gemacht haben, erhöhen Sie die Anzahl der Computer, um Ihren Anforderungen an gleichzeitige Rückschlüsse zu genügen.Once you've learned that, increase the number of machines to fit your need for concurrent inference.

Hinweis

  • Containerinstanzen eignen sich nur für kleine Modelle mit einer Größe von unter 1 GB.Container instances are suitable only for small models less than 1 GB in size.
  • Verwenden Sie AKS-Cluster mit einem Knoten für Dev/Test von größeren Modellen.Use single-node AKS clusters for dev/test of larger models.

Definieren einer BereitstellungskonfigurationDefine a deployment configuration

Die für eine Bereitstellungskonfiguration verfügbaren Optionen unterscheiden sich je nach dem von Ihnen ausgewählten Computeziel.The options available for a deployment configuration differ depending on the compute target you choose.

Die Einträge im Dokument deploymentconfig.json werden den Parametern für LocalWebservice.deploy_configuration zugeordnet.The entries in the deploymentconfig.json document map to the parameters for LocalWebservice.deploy_configuration. In der folgenden Tabelle wird die Zuordnung zwischen den Entitäten im JSON-Dokument und den Parametern für die Methode beschrieben:The following table describes the mapping between the entities in the JSON document and the parameters for the method:

JSON-EntitätJSON entity MethodenparameterMethod parameter BESCHREIBUNGDescription
computeType Nicht verfügbarNA Das Computeziel.The compute target. Für lokale Ziele ist der Wert local erforderlich.For local targets, the value must be local.
port port Der lokale Port, auf dem der HTTP-Endpunkt des Diensts verfügbar gemacht werden soll.The local port on which to expose the service's HTTP endpoint.

Dieser JSON-Code ist ein Beispiel für eine Bereitstellungskonfiguration für die Verwendung mit der CLI:This JSON is an example deployment configuration for use with the CLI:

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

Weitere Informationen finden Sie dieser Referenz.For more information, see this reference.

Bereitstellen Ihres Machine Learning-ModellsDeploy your machine learning model

Sie können Ihr Modell jetzt bereitstellen.You are now ready to deploy your model.

Verwenden eines registrierten ModellsUsing a registered model

Wenn Sie Ihr Modell im Azure Machine Learning-Arbeitsbereich registriert haben, ersetzen Sie „mymodel:1“ durch den Namen Ihres Modells und seine Versionsnummer.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

Verwenden eines lokalen ModellsUsing a local model

Wenn Sie Ihr Modell lieber nicht registrieren möchten, können Sie den Parameter „sourceDirectory“ in Ihrer Datei „inferenceconfig.json“ übergeben, um ein lokales Verzeichnis anzugeben, aus dem Ihr Modell bereitgestellt werden soll.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

Grundlegendes zum DienstzustandUnderstanding service state

Während der Modellimplementierung kann es vorkommen, dass sich der Dienstzustand während der vollständigen Bereitstellung ändert.During model deployment, you may see the service state change while it fully deploys.

In der folgenden Tabelle werden die verschiedenen Dienstzustände beschrieben:The following table describes the different service states:

Webservice-ZustandWebservice state BESCHREIBUNGDescription Endgültiger Zustand?Final state?
Im ÜbergangTransitioning Der Dienst wird gerade bereitgestellt.The service is in the process of deployment. NeinNo
FehlerhaftUnhealthy Der Dienst wurde bereitgestellt, ist aber zurzeit nicht erreichbar.The service has deployed but is currently unreachable. NeinNo
Nicht planbarUnschedulable Der Dienst kann derzeit aufgrund fehlender Ressourcen nicht bereitgestellt werden.The service cannot be deployed at this time due to lack of resources. NeinNo
FehlerFailed Der Dienst konnte aufgrund eines Fehlers oder Absturzes nicht bereitgestellt werden.The service has failed to deploy due to an error or crash. JaYes
HealthyHealthy Der Dienst ist fehlerfrei und der Endpunkt ist verfügbar.The service is healthy and the endpoint is available. JaYes

Tipp

Bei der Bereitstellung werden Docker-Images für Computeziele aus Azure Container Registry (ACR) erstellt und geladen.When deploying, Docker images for compute targets are built and loaded from Azure Container Registry (ACR). Standardmäßig erstellt Azure Machine Learning eine ACR-Instanz mit der Dienstebene Basic.By default, Azure Machine Learning creates an ACR that uses the basic service tier. Wenn Sie die ACR-Instanz für Ihren Arbeitsbereich auf einen der Tarife „Standard“ oder „Premium“ umstellen, kann dies die Zeit zum Erstellen und Bereitstellen von Images auf Ihren Computezielen verringern.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. Weitere Informationen finden Sie unter Azure Container Registry-Tarife.For more information, see Azure Container Registry service tiers.

BatchrückschlussBatch inference

Azure Machine Learning Compute-Ziele werden von Azure Machine Learning erstellt und verwaltet.Azure Machine Learning Compute targets are created and managed by Azure Machine Learning. Sie können für Batchvorhersagen über Azure Machine Learning-Pipelines verwendet werden.They can be used for batch prediction from Azure Machine Learning pipelines.

Eine exemplarische Vorgehensweise zu Batchrückschlüssen mit Azure Machine Learning Compute finden Sie unter Verwenden von Azure Machine Learning-Pipelines für Batchbewertung.For a walkthrough of batch inference with Azure Machine Learning Compute, see How to run batch predictions.

IoT Edge-RückschlussIoT Edge inference

Unterstützung für die Bereitstellung auf Edge-Geräten befindet sich in der Vorschauphase.Support for deploying to the edge is in preview. Weitere Informationen finden Sie unter Bereitstellen von Azure Machine Learning als IoT Edge-Modul.For more information, see Deploy Azure Machine Learning as an IoT Edge module.

Löschen von RessourcenDelete resources

Um einen bereitgestellten Webdienst zu löschen, verwenden Sie az ml service <name of webservice>.To delete a deployed webservice, use az ml service <name of webservice>.

Um ein registriertes Modell aus Ihrem Arbeitsbereich zu löschen, verwenden Sie az ml model delete <model id>.To delete a registered model from your workspace, use az ml model delete <model id>

Erfahren Sie mehr über das Löschen eines Webdiensts und das Löschen eines Modells.Read more about deleting a webservice and deleting a model.

Nächste SchritteNext steps