Echtzeitbewertung von Python-Modellen (scikit-learn) und Deep Learning-Modellen in AzureReal-time scoring of Python scikit-learn and deep learning models on Azure

Diese Referenzarchitektur zeigt, wie Sie Python-Modelle als Webdienste bereitstellen, um mithilfe von Azure Machine Learning Service in Echtzeit Vorhersagen zu treffen.This reference architecture shows how to deploy Python models as web services to make real-time predictions using the Azure Machine Learning service. In diesem Artikel werden zwei Szenarien behandelt: die Bereitstellung von regulären Python-Modellen und die spezifischen Anforderungen der Bereitstellung von Deep Learning-Modellen.Two scenarios are covered: deploying regular Python models, and the specific requirements of deploying deep learning models. Für beide Szenarien wird die hier dargestellte Architektur verwendet.Both scenarios use the architecture shown.

Auf GitHub sind zwei Referenzimplementierungen für diese Architektur verfügbar – eine für reguläre Python-Modelle und eine für Deep Learning-Modelle.Two reference implementations for this architecture are available on GitHub, one for regular Python models and one for deep learning models.

Architekturdiagramm für die Echtzeitbewertung von Python-Modellen in Azure

SzenarienScenarios

Die Referenzimplementierungen veranschaulichen zwei Szenarien, in denen diese Architektur verwendet wird.The reference implementations demonstrate two scenarios using this architecture.

Szenario 1: Abgleich von häufig gestellten Fragen (FAQ):Scenario 1: FAQ matching. Dieses Szenario zeigt, wie Sie ein Modell zum Abgleichen von häufig gestellten Fragen (FAQ) als Webdienst bereitstellen, um die Fragen von Benutzern vorherzusagen.This scenario shows how to deploy a frequently asked questions (FAQ) matching model as a web service to provide predictions for user questions. In diesem Szenario bezieht sich der Begriff „Eingabedaten“ im Architekturdiagramm auf Textzeichenfolgen mit Fragen von Benutzern, die mit einer Liste von häufig gestellten Fragen abgeglichen werden.For this scenario, "Input Data" in the architecture diagram refers to text strings containing user questions to match with a list of FAQs. Dieses Szenario ist für die scikit-learn-Bibliothek für maschinelles Lernen für Python konzipiert, es kann jedoch für beliebige Szenarien mit Python-Modellen generalisiert werden, um in Echtzeit Vorhersagen zu treffen.This scenario is designed for the scikit-learn machine learning library for Python, but can be generalized to any scenario that uses Python models to make real-time predictions.

In diesem Szenario wird eine Teilmenge der Stack Overflow-Fragedaten verwendet, die die ursprünglichen Fragen (als JavaScript markiert), die zugehörigen doppelten Fragen und Antworten umfasst.This scenario uses a subset of Stack Overflow question data that includes original questions tagged as JavaScript, their duplicate questions, and their answers. Das Szenario trainiert eine scikit-learn-Pipeline zum Vorhersagen der Übereinstimmungswahrscheinlichkeit einer doppelten Frage mit den einzelnen ursprünglichen Fragen.It trains a scikit-learn pipeline to predict the match probability of a duplicate question with each of the original questions. Diese Vorhersagen werden in Echtzeit mithilfe eines REST-API-Endpunkts getroffen.These predictions are made in real time using a REST API endpoint.

Der Anwendungsfluss für diese Architektur sieht wie folgt aus:The application flow for this architecture is as follows:

  1. Das trainierte Modell wird in der Machine Learning-Modellregistrierung registriert.The trained model is registered to the machine learning model registry.
  2. Machine Learning Service erstellt ein Docker-Image, das das Modell und das Bewertungsskript enthält.The Machine Learning service creates a Docker image that includes the model and scoring script.
  3. Azure Machine Learning stellt das Bewertungsimage in Azure Kubernetes Service (AKS) als Webdienst bereit.Azure Machine Learning deploys the scoring image on Azure Kubernetes Service (AKS) as a web service.
  4. Der Client sendet eine HTTP-POST-Anforderung mit den codierten Fragedaten.The client sends an HTTP POST request with the encoded question data.
  5. Der von Azure Machine Learning erstellte Webdienst extrahiert die Frage aus der Anforderung.The web service created by Azure Machine Learning extracts the question from the request.
  6. Die Frage wird zur Featurebereitstellung und Bewertung an das Scikit-learn-Pipelinemodell gesendet.The question is sent to the Scikit-learn pipeline model for featurization and scoring.
  7. Die übereinstimmenden häufig gestellten Fragen und die zugehörigen Bewertungen werden an den Client zurückgegeben.The matching FAQ questions with their scores are returned to the client.

Hier sehen Sie einen Screenshot der Beispiel-App, die die Ergebnisse nutzt:Here is a screenshot of the example app that consumes the results:

Screenshot der Beispiel-App

Szenario 2: Bildklassifizierung:Scenario 2: Image classification. Dieses Szenario zeigt, wie Sie ein Modell für ein künstliches neuronales Netzwerk (Convolutional Neural Network, CNN) als Webdienst bereitstellen, um Vorhersagen für Bilder zu generieren.This scenario shows how to deploy a Convolutional Neural Network (CNN) model as a web service to provide predictions on images. In diesem Szenario bezieht sich der Begriff „Eingabedaten“ im Architekturdiagramm auf Bilddateien.For this scenario, "Input Data" in the architecture diagram refers to image files. Für Aufgaben wie die Bildklassifizierung und Erkennung von Objekten sind CNNs eine äußerst effektive Lösung für maschinelles Sehen.CNNs are very effective in computer vision for tasks such as image classification and object detection. Dieses Szenario ist für die Frameworks TensorFlow, Keras (mit dem TensorFlow-Back-End) und PyTorch konzipiert.This scenario is designed for the frameworks TensorFlow, Keras (with the TensorFlow back end), and PyTorch. Es kann jedoch für beliebige Szenarien generalisiert werden, die mithilfe von Deep Learning-Modellen in Echtzeit Vorhersagen treffen.However, it can be generalized to any scenario that uses deep learning models to make real-time predictions.

In diesem Szenario wird ein für ein ImageNet-1K-Dataset (1.000 Klassen) vortrainiertes ResNet-152-Modell verwendet, um die Kategorie vorherzusagen, zu der ein Bild gehört (siehe unten stehende Abbildung).This scenario uses a pre-trained ResNet-152 model trained on ImageNet-1K (1,000 classes) dataset to predict which category (see figure below) an image belongs to. Diese Vorhersagen werden in Echtzeit mithilfe eines REST-API-Endpunkts getroffen.These predictions are made in real time using a REST API endpoint.

Beispiel für Vorhersagen

Der Anwendungsfluss für das Deep Learning-Modell sieht wie folgt aus:The application flow for the deep learning model is as follows:

  1. Das Deep Learning-Modell wird in der Machine Learning-Modellregistrierung registriert.The deep learning model is registered to the machine learning model registry.
  2. Azure Machine Learning Service erstellt ein Docker-Image, das das Modell und das Bewertungsskript enthält.Azure Machine Learning service creates a docker image including the model and scoring script.
  3. Azure Machine Learning stellt das Bewertungsimage in Azure Kubernetes Service (AKS) als Webdienst bereit.Azure Machine Learning deploys the scoring image on Azure Kubernetes Service (AKS) as a web service.
  4. Der Client sendet eine HTTP-POST-Anforderung mit den codierten Bilddaten.The client sends an HTTP POST request with the encoded image data.
  5. Der von Azure Machine Learning erstellte Webdienst führt eine Vorverarbeitung der Imagedaten durch und sendet sie zur Bewertung an das Modell.The web service created by Azure Machine Learning preprocesses the image data and sends it to the model for scoring.
  6. Die vorhergesagten Kategorien mit den zugehörigen Bewertungen werden an den Client zurückgegeben.The predicted categories with their scores are returned to the client.

ArchitectureArchitecture

Diese Architektur umfasst die folgenden Komponenten.This architecture consists of the following components.

Azure Machine Learning Service ist ein Clouddienst, mit dem Sie Modelle für maschinelles Lernen trainieren, bereitstellen, automatisieren und verwalten und dabei von den Vorteilen der Cloud profitieren können.Azure Machine Learning service is a cloud service that is used to train, deploy, automate and manage machine learning models, all at the broad scale that the cloud provides. Er wird in dieser Architektur zum Verwalten der Bereitstellung von Modellen sowie für die Authentifizierung, das Routing und den Lastenausgleich des Webdiensts verwendet.It is used in this architecture to manage the deployment of models as well as authentication, routing, and load balancing of the web service.

Virtueller Computer (VM).Virtual machine (VM). Die VM dient als Beispiel für ein Gerät (lokal oder in der Cloud), das eine HTTP-Anforderung senden kann.The VM is shown as an example of a device — local or in the cloud — that can send an HTTP request.

Azure Kubernetes Service (AKS) wird verwendet, um die Anwendung in einem Kubernetes-Cluster bereitzustellen.Azure Kubernetes Service (AKS) is used to deploy the application on a Kubernetes cluster. AKS vereinfacht die Bereitstellung und den Betrieb von Kubernetes.AKS simplifies the deployment and operations of Kubernetes. Der Cluster kann für reguläre Python-Modelle mit reinen CPU-VMs oder für Deep Learning-Modelle mit GPU-fähigen VMs konfiguriert werden.The cluster can be configured using CPU-only VMs for regular Python models or GPU-enabled VMs for deep learning models.

Azure Container Registry ermöglicht das Speichern von Images für alle Arten von Docker-Containerbereitstellungen, einschließlich DC/OS, Docker Swarm und Kubernetes.Azure Container Registry enables storage of images for all types of Docker container deployments including DC/OS, Docker Swarm and Kubernetes. Die Bewertungsbilder werden als Container in Azure Kubernetes Service bereitgestellt und zum Ausführen des Bewertungsskripts verwendet.The scoring images are deployed as containers on Azure Kubernetes Service and used to run the scoring script. Das hier verwendete Bild wird von Machine Learning aus dem trainierten Modell und Bewertungsskript erstellt und anschließend in Azure Container Registry gepusht.The image used here is created by Machine Learning from the trained model and scoring script, and then is pushed to the Azure Container Registry.

Überlegungen zur LeistungPerformance considerations

Für Architekturen zur Echtzeitbewertung ist die Durchsatzleistung ein entscheidender Faktor.For real-time scoring architectures, throughput performance becomes a dominant consideration. Für reguläre Python-Modelle sind CPUs, die zum Bewältigen der Workload ausreichen, in der Regel akzeptabel.For regular Python models, it's generally accepted that CPUs are sufficient to handle the workload.

Für Deep Learning-Workloads, bei denen sich die Geschwindigkeit als Engpass erweisen kann, bieten GPUs im Allgemeinen jedoch eine bessere Leistung als CPUs.However for deep learning workloads, when speed is a bottleneck, GPUs generally provide better performance compared to CPUs. Um die GPU-Leistung mit CPUs zu erreichen, ist normalerweise ein Cluster mit einer großen Anzahl von CPUs erforderlich.To match GPU performance using CPUs, a cluster with large number of CPUs is usually needed.

Sie können in beiden Szenarien CPUs für diese Architektur verwenden. Für Deep Learning-Modelle bieten GPUs jedoch deutlich höhere Durchsatzwerte als ein CPU-Cluster mit vergleichbaren Kosten.You can use CPUs for this architecture in either scenario, but for deep learning models, GPUs provide significantly higher throughput values compared to a CPU cluster of similar cost. AKS unterstützt die Verwendung von GPUs. Dies ist einer der Vorteile, die die Verwendung von AKS für diese Architektur bietet.AKS supports the use of GPUs, which is one advantage of using AKS for this architecture. Zudem werden bei Deep Learning-Bereitstellungen in der Regel Modelle mit einer hohen Anzahl von Parametern verwendet.Also, deep learning deployments typically use models with a high number of parameters. Durch die Verwendung von GPUs werden Ressourcenkonflikte zwischen dem Modell und dem Webdienst vermieden, die bei reinen CPU-Bereitstellungen ein Problem darstellen.Using GPUs prevents contention for resources between the model and the web service, which is an issue in CPU-only deployments.

Überlegungen zur SkalierbarkeitScalability considerations

Bei regulären Python-Modellen mit einer AKS-Clusterbereitstellung mit reinen CPU-VMs ist beim Erhöhen der Anzahl von Pods Vorsicht geboten.For regular Python models, where the AKS cluster is provisioned with CPU-only VMs, take care when scaling out the number of pods. Das Ziel ist es, den Cluster vollständig zu nutzen.The goal is to fully utilize the cluster. Die Skalierung ist von den CPU-Anforderungen und den für die Pods definierten Grenzwerten abhängig.Scaling depends on the CPU requests and limits defined for the pods. Machine Learning über Kubernetes unterstützt auch die automatische Skalierung von Pods auf Grundlage der CPU-Auslastung oder anderer Metriken.Machine Learning through Kubernetes also supports pod autoscaling based on CPU utilization or other metrics. Die automatische Clusterskalierung (Vorschauversion) kann Agent-Knoten basierend auf den ausstehenden Pods skalieren.The cluster autoscaler (in preview) can scale agent nodes based on the pending pods.

Für Deep Learning-Szenarien mit GPU-fähigen VMs sind die Ressourceneinschränkungen für Pods so ausgelegt, dass eine GPU einem Pod zugewiesen wird.For deep learning scenarios, using GPU-enabled VMs, resource limits on pods are such that one GPU is assigned to one pod. Je nach verwendetem VM-Typ müssen Sie die Knoten des Clusters skalieren, um die Anforderungen für den Dienst zu erfüllen.Depending on the type of VM used, you must scale the nodes of the cluster to meet the demand for the service. Dies ist mithilfe der Azure-Befehlszeilenschnittstelle (Azure CLI) und Kubectl ganz einfach möglich.You can do this easily using the Azure CLI and kubectl.

Überlegungen zur Überwachung und ProtokollierungMonitoring and logging considerations

AKS-ÜberwachungAKS monitoring

Verwenden Sie das Feature Azure Monitor für Container, um Einblick in die AKS-Leistung zu erhalten.For visibility into AKS performance, use the Azure Monitor for containers feature. Das Feature erfasst anhand der Metrik-API die in Kubernetes verfügbaren Speicher- und Prozessormetriken von Controllern, Knoten und Containern.It collects memory and processor metrics from controllers, nodes, and containers that are available in Kubernetes through the Metrics API.

Überwachen Sie während der Bereitstellung Ihrer Anwendung den AKS-Cluster, um sicherzustellen, dass er wie erwartet funktioniert, alle Knoten funktionsfähig sind und alle Pods ausgeführt werden.While deploying your application, monitor the AKS cluster to make sure it's working as expected, all the nodes are operational, and all pods are running. Sie können den Podstatus mit dem Befehlszeilentool Kubectl abrufen, Kubernetes enthält jedoch auch ein Webdashboard für die grundlegende Überwachung von Clusterstatus und -verwaltung.Although you can use the kubectl command-line tool to retrieve pod status, Kubernetes also includes a web dashboard for basic monitoring of the cluster status and management.

Screenshot des Kubernetes-Dashboards

Den Gesamtzustand des Clusters und der Knoten können Sie im Abschnitt Knoten des Kubernetes-Dashboards einsehen.To see the overall state of the cluster and nodes, go to the Nodes section of the Kubernetes dashboard. Wenn ein Knoten inaktiv oder ausgefallen ist, können Sie die Fehlerprotokolle auf dieser Seite anzeigen.If a node is inactive or has failed, you can display the error logs from that page. Informationen zur Anzahl von Pods und zum Status Ihrer Bereitstellung finden Sie in den Abschnitten Pods und Bereitstellungen.Similarly, go to the Pods and Deployments sections for information about the number of pods and status of your deployment.

AKS-ProtokolleAKS logs

AKS protokolliert automatisch alle stdout-/stderr-Meldungen in den Protokollen der Pods im Cluster.AKS automatically logs all stdout/stderr to the logs of the pods in the cluster. Verwenden Sie Kubectl, um diese Meldungen und auch Ereignisse sowie Protokolle auf Knotenebene anzuzeigen.Use kubectl to see these and also node-level events and logs. Ausführliche Informationen finden Sie in den Bereitstellungsschritten.For details, see the deployment steps.

Verwenden Sie Azure Monitor für Container, um Metriken und Protokolle über eine Containerversion des Log Analytics-Agents für Linux zu erfassen, die in Ihrem Log Analytics-Arbeitsbereich gespeichert wird.Use Azure Monitor for containers to collect metrics and logs through a containerized version of the Log Analytics agent for Linux, which is stored in your Log Analytics workspace.

SicherheitshinweiseSecurity considerations

Verwenden Sie Azure Security Center, um sich eine zentrale Übersicht über den Sicherheitszustand Ihrer Azure-Ressourcen zu verschaffen.Use Azure Security Center to get a central view of the security state of your Azure resources. Das Azure Security Center überwacht potenzielle Sicherheitsprobleme und bietet eine umfassende Darstellung der Sicherheitsintegrität Ihrer Bereitstellung, überwacht jedoch keine AKS-Agent-Knoten.Security Center monitors potential security issues and provides a comprehensive picture of the security health of your deployment, although it doesn't monitor AKS agent nodes. Security Center wird für jedes Azure-Abonnement individuell konfiguriert.Security Center is configured per Azure subscription. Aktivieren Sie die Erfassung von Sicherheitsdaten wie unter Einbinden Ihres Azure-Abonnements in Security Center Standard beschrieben.Enable security data collection as described in Onboard your Azure subscription to Security Center Standard. Nachdem die Datensammlung aktiviert wurde, durchsucht Security Center VMs automatisch, die unter diesem Abonnement erstellt werden.When data collection is enabled, Security Center automatically scans any VMs created under that subscription.

Vorgänge.Operations. Um sich mit Ihrem Authentifizierungstoken für Azure Active Directory (Azure AD) bei einem AKS-Cluster anzumelden, konfigurieren Sie AKS so, dass Azure AD für die Benutzerauthentifizierung verwendet wird.To sign in to an AKS cluster using your Azure Active Directory (Azure AD) authentication token, configure AKS to use Azure AD for user authentication. Clusteradministratoren können auch die rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) von Kubernetes auf der Grundlage einer Benutzeridentität oder Verzeichnisgruppenmitgliedschaft konfigurieren.Cluster administrators can also configure Kubernetes role-based access control (RBAC) based on a user's identity or directory group membership.

Steuern Sie den Zugriff auf die von Ihnen bereitgestellten Azure-Ressourcen mit RBAC.Use RBAC to control access to the Azure resources that you deploy. Mithilfe der RBAC können Sie Mitglieder Ihres DevOps-Teams Autorisierungsrollen zuweisen.RBAC lets you assign authorization roles to members of your DevOps team. Ein Benutzer kann mehreren Rollen zugewiesen werden. Außerdem können Sie für noch präzisere Berechtigungen benutzerdefinierte Rollen erstellen.A user can be assigned to multiple roles, and you can create custom roles for even more fine-grained permissions.

HTTPS.HTTPS. Als bewährte Sicherheitsmethode sollte die Anwendung HTTPS erzwingen und HTTP-Anforderungen umleiten.As a security best practice, the application should enforce HTTPS and redirect HTTP requests. Verwenden Sie einen Eingangscontroller, um einen Reverseproxy bereitzustellen, der SSL beendet und HTTP-Anforderungen umleitet.Use an ingress controller to deploy a reverse proxy that terminates SSL and redirects HTTP requests. Weitere Informationen finden Sie unter Erstellen eines HTTPS-Eingangscontrollers in Azure Kubernetes Service (AKS).For more information, see Create an HTTPS ingress controller on Azure Kubernetes Service (AKS).

Authentifizierung.Authentication. Diese Lösung beschränkt den Zugriff auf die Endpunkte nicht.This solution doesn't restrict access to the endpoints. Wenn Sie die Architektur in einer Unternehmensumgebung bereitstellen, sichern Sie die Endpunkte über API-Schlüssel, und fügen Sie der Clientanwendung eine Benutzerauthentifizierung hinzu.To deploy the architecture in an enterprise setting, secure the endpoints through API keys and add some form of user authentication to the client application.

Containerregistrierung.Container registry. Diese Lösung verwendet Azure Container Registry zum Speichern des Docker-Images.This solution uses Azure Container Registry to store the Docker image. Der Code, von dem die Anwendung abhängig ist, und das Modell sind in diesem Image enthalten.The code that the application depends on, and the model, are contained within this image. Unternehmensanwendungen sollten eine private Registrierung verwenden, um Schutz vor Schadsoftware bereitzustellen und zu verhindern, dass die Informationen im Container kompromittiert werden.Enterprise applications should use a private registry to help guard against running malicious code and to help keep the information inside the container from being compromised.

DDoS Protection.DDoS protection. Aktivieren Sie ggf. Azure DDoS Protection Standard.Consider enabling DDoS Protection Standard. DDoS Protection Basic wird als Teil der Azure-Plattform aktiviert. DDoS Protection Standard bietet jedoch Funktionen zur Risikominderung, die speziell für Azure Virtual Network-Ressourcen optimiert sind.Although basic DDoS protection is enabled as part of the Azure platform, DDoS Protection Standard provides mitigation capabilities that are tuned specifically to Azure virtual network resources.

Protokollierung:Logging. Wenden Sie vor dem Speichern von Protokolldaten bewährte Methoden an. Bereinigen Sie beispielsweise Benutzerkennwörter und andere Informationen, die ein potenzielles Sicherheitsrisiko darstellen und zu betrügerischen Zwecken verwendet werden könnten.Use best practices before storing log data, such as scrubbing user passwords and other information that could be used to commit security fraud.

BereitstellungDeployment

Befolgen Sie die Schritte im GitHub-Repository, um diese Referenzarchitektur bereitzustellen:To deploy this reference architecture, follow the steps described in the GitHub repos: