Echtzeitbewertung von R-Machine Learning-Modellen in AzureReal-time scoring of R machine learning models on Azure

Diese Referenzarchitektur zeigt, wie Sie mithilfe von Microsoft Machine Learning Server unter Azure Kubernetes Service (AKS) einen (synchronen) Echtzeit-Prognosedienst in R implementieren.This reference architecture shows how to implement a real-time (synchronous) prediction service in R using Microsoft Machine Learning Server running in Azure Kubernetes Service (AKS). Diese generische Architektur eignet sich für jedes beliebige R-basierte Prognosemodell, das Sie als Echtzeitdienst bereitstellen möchten.This architecture is intended to be generic and suited for any predictive model built in R that you want to deploy as a real-time service. Stellen Sie diese Lösung bereit .Deploy this solution.

Azure Machine Learning-Alternative: Diese Architektur umfasst eine reine R-Erfahrung.Azure Machine Learning alternative: This architecture provides a pure R experience. Es wird nicht der Python-orientierte Azure Machine Learning-Dienst (AzureML SDK) verwendet, bei dem es sich um einen ausgereiften Clouddienst zur bedarfsorientierten Entwicklung von KI-Lösungen handelt.It doesn't use the Python oriented Azure Machine Learning Services (AzureML SDK), which is a mature cloud service for developing AI solutions at scale. Das AzureML SDK ist ein einfacher Weg zum Entwickeln und Bereitstellen von Bewertungsskripts in Containern.AzureML SDK provides an easy path for development and deployment of containerized scoring scripts. Wir stellen eine Alternativlösung bereit, mit der die Verwendung von Conda zum Installieren von R und R-Paketen für die Nutzung des AzureML SDK über das rpy2-Python-Paket veranschaulicht wird.We provide an alternative solution that shows how to use Conda to install R and R packages to leverage AzureML SDK via the rpy2 Python package. Der Nutzen der Verwendung dieser Alternativlösung zum Operationalisieren von R-Modellen besteht darin, dass Sie sich nicht mit Flask auskennen müssen und Ihre AzureML SDK-Kenntnisse einsetzen können. Dies kann für Teams hilfreich sein, die für ihre Data Science-Projekte sowohl R als auch Python nutzen möchten.The value in using this alternative to operationalize R models is that you don't need to know Flask, and you can reuse AzureML SDK expertise, which can be useful for teams that are comfortable using both R and Python languages for their data science projects. Die Implementierung dieser Alternativarchitektur ist auf GitHub verfügbar.The implementation of this alternative architecture is available on GitHub.

ArchitectureArchitecture

Echtzeitbewertung von R-Machine Learning-Modellen in Azure

In dieser Referenzarchitektur wird ein containerbasierter Ansatz verwendet.This reference architecture takes a container-based approach. Es werden ein Docker-Image, das R enthält, sowie die verschiedenen Artefakte erstellt, die zur Bewertung neuer Daten erforderlich sind.A Docker image is built containing R, as well as the various artifacts needed to score new data. Dazu gehören das Modellobjekt selbst und ein Bewertungsskript.These include the model object itself and a scoring script. Dieses Image wird an eine in Azure gehostete Docker-Registrierung gepusht und anschließend in einem Kubernetes-Cluster (ebenfalls in Azure) bereitgestellt.This image is pushed to a Docker registry hosted in Azure, and then deployed to a Kubernetes cluster, also in Azure.

Die Architektur dieses Workflows umfasst folgende Komponenten:The architecture of this workflow includes the following components.

  • Azure Container Registry dient zum Speichern der Images für diesen Workflow.Azure Container Registry is used to store the images for this workflow. Mit Container Registry erstellte Registrierungen können über die standardmäßige Docker-Registrierungs-API (Version 2) und den entsprechenden Client verwaltet werden.Registries created with Container Registry can be managed via the standard Docker Registry V2 API and client.

  • Azure Kubernetes Service dient zum Hosten der Bereitstellung und des Diensts.Azure Kubernetes Service is used to host the deployment and service. Mit AKS erstellte Cluster können über die standardmäßige Kubernetes-API und den entsprechenden Client (kubectl) verwaltet werden.Clusters created with AKS can be managed using the standard Kubernetes API and client (kubectl).

  • Microsoft Machine Learning Server dient zum Definieren der REST-API für den Dienst und enthält die Modelloperationalisierung.Microsoft Machine Learning Server is used to define the REST API for the service and includes Model Operationalization. Dieser dienstorientierte Webserverprozess lauscht auf Anforderungen, die dann an andere Hintergrundprozesse übergeben werden, die wiederum den eigentlichen R-Code ausführen, um die Ergebnisse zu generieren.This service-oriented web server process listens for requests, which are then handed off to other background processes that run the actual R code to generate the results. Bei dieser Konfiguration werden alle hier genannten Prozesse auf einem einzelnen Knoten in einem Container ausgeführt.All these processes run on a single node in this configuration, which is wrapped in a container. Ausführliche Informationen zur Verwendung dieses Diensts außerhalb einer Entwicklungs- oder Testumgebung erhalten Sie von Ihrem Ansprechpartner bei Microsoft.For details about using this service outside a dev or test environment, contact your Microsoft representative.

Überlegungen zur LeistungPerformance considerations

Machine Learning-Workloads sind häufig mit einem hohen Rechenaufwand verbunden. Das gilt sowohl beim Trainieren als auch beim Bewerten neuer Daten.Machine learning workloads tend to be compute-intensive, both when training and when scoring new data. Es wird daher davon abgeraten, mehrere Bewertungsprozesse pro Kern auszuführen.As a rule of thumb, try not to run more than one scoring process per core. Mit Machine Learning Server können Sie die Anzahl von R-Prozessen definieren, die in den einzelnen Containern ausgeführt werden können.Machine Learning Server lets you define the number of R processes running in each container. Der Wert ist standardmäßig auf fünf Prozesse festgelegt.The default is five processes. Wenn Sie ein relativ einfaches Modell (etwa eine lineare Regression mit nur einigen wenigen Variablen) oder eine einfache Entscheidungsstruktur erstellen, können Sie die Prozessanzahl erhöhen.When creating a relatively simple model, such as a linear regression with a small number of variables, or a small decision tree, you can increase the number of processes. Überwachen Sie die CPU-Auslastung der Clusterknoten, um einen geeigneten Grenzwert für die Anzahl von Containern zu ermitteln.Monitor the CPU load on your cluster nodes to determine the appropriate limit on the number of containers.

Ein GPU-fähiger Cluster kann einige Arten von Workloads beschleunigen. Das gilt insbesondere für Deep Learning-Modelle.A GPU-enabled cluster can speed up some types of workloads, and deep learning models in particular. Von GPUs profitieren nur Workloads, die intensiven Gebrauch von Matrixalgebra machen.Not all workloads can take advantage of GPUs — only those that make heavy use of matrix algebra. So entstehen etwa bei strukturbasierten Modellen (einschließlich Random Forests und Boosting-Modelle) in der Regel keine Vorteile durch GPUs.For example, tree-based models, including random forests and boosting models, generally derive no advantage from GPUs.

Bestimmte Modelltypen (unter anderem Random Forests) sind auf CPUs hochgradig parallelisierbar.Some model types such as random forests are massively parallelizable on CPUs. In diesen Fällen können Sie die Bewertung einer einzelnen Anforderung beschleunigen, indem Sie die Workload auf mehrere Kerne verteilen.In these cases, speed up the scoring of a single request by distributing the workload across multiple cores. Dies geht jedoch zulasten Ihrer Verarbeitungskapazität für mehrere Bewertungsanforderungen bei einer festen Clustergröße.However, doing so reduces your capacity to handle multiple scoring requests given a fixed cluster size.

Open-Source-basierte R-Modelle speichern in der Regel alle ihre Daten im Arbeitsspeicher. Stellen Sie daher sicher, dass Sie über genügend Arbeitsspeicher für die Prozesse verfügen, die Sie parallel ausführen möchten.In general, open-source R models store all their data in memory, so ensure that your nodes have enough memory to accommodate the processes you plan to run concurrently. Wenn Sie Ihre Modelle mithilfe von Machine Learning Server anpassen, verwenden Sie die Bibliotheken, die Daten auf dem Datenträger verarbeiten können, anstatt alle Daten in den Arbeitsspeicher zu lesen.If you are using Machine Learning Server to fit your models, use the libraries that can process data on disk, rather than reading it all into memory. Dadurch lässt sich der Arbeitsspeicherbedarf ggf. erheblich senken.This can help reduce memory requirements significantly. Überwachen Sie unabhängig von der Verwendung von Machine Learning Server oder Open-Source-R Ihre Knoten, um sicherzustellen, dass Ihren Bewertungsprozessen nicht der Arbeitsspeicher ausgeht.Regardless of whether you use Machine Learning Server or open-source R, monitor your nodes to ensure that your scoring processes are not memory-starved.

SicherheitshinweiseSecurity considerations

NetzwerkverschlüsselungNetwork encryption

In dieser Referenzarchitektur werden HTTPS für die Kommunikation mit dem Cluster und ein Stagingzertifikat von Let's Encrypt verwendet.In this reference architecture, HTTPS is enabled for communication with the cluster, and a staging certificate from Let’s Encrypt is used. Verwenden Sie in einer Produktionsumgebung ein eigenes Zertifikat von einer geeigneten Signaturstelle.For production purposes, substitute your own certificate from an appropriate signing authority.

Authentifizierung und AutorisierungAuthentication and authorization

Die Modelloperationalisierung von Machine Learning Server erfordert eine Authentifizierung von Bewertungsanforderungen.Machine Learning Server Model Operationalization requires scoring requests to be authenticated. In dieser Bereitstellung werden ein Benutzername und ein Kennwort verwendet.In this deployment, a username and password are used. In einer Unternehmensumgebung können Sie die Authentifizierung über Azure Active Directory ermöglichen oder unter Verwendung von Azure API Management ein separates Front-End erstellen.In an enterprise setting, you can enable authentication using Azure Active Directory or create a separate front end using Azure API Management.

Damit die Modelloperationalisierung mit Machine Learning Server in Containern ordnungsgemäß funktioniert, muss ein JWT-Zertifikat (JSON Web Token) installiert werden.For Model Operationalization to work correctly with Machine Learning Server on containers, you must install a JSON Web Token (JWT) certificate. In dieser Bereitstellung wird ein von Microsoft bereitgestelltes Zertifikat verwendet.This deployment uses a certificate supplied by Microsoft. In einer Produktionsumgebung muss ein eigenes Zertifikat verwendet werden.In a production setting, supply your own.

Für den Datenverkehr zwischen Container Registry und AKS empfiehlt sich ggf. die Aktivierung der rollenbasierten Zugriffssteuerung (Role-Based Access Control, RBAC), um die Zugriffsrechte auf ein Mindestmaß zu beschränken.For traffic between Container Registry and AKS, consider enabling role-based access control (RBAC) to limit access privileges to only those needed.

Trennen des SpeichersSeparate storage

Bei dieser Referenzarchitektur werden die Anwendung (R) und die Daten (Modellobjekt und Bewertungsskript) in einem einzelnen Image gebündelt.This reference architecture bundles the application (R) and the data (model object and scoring script) into a single image. Manchmal kann es jedoch von Vorteil sein, diese Komponenten zu trennen.In some cases, it may be beneficial to separate these. Sie können die Modelldaten und den Code in Azure Storage (Blob- oder Dateispeicher) platzieren und bei der Containerinitialisierung abrufen.You can place the model data and code into Azure blob or file storage, and retrieve them at container initialization. In diesem Fall muss das Speicherkonto so konfiguriert sein, dass nur authentifizierte Zugriffe zulässig sind und HTTPS verwendet werden muss.In this case, ensure that the storage account is set to allow authenticated access only and require HTTPS.

Überlegungen zur Überwachung und ProtokollierungMonitoring and logging considerations

Verwenden Sie zur Überwachung des Gesamtstatus Ihres AKS-Clusters das Kubernetes-Dashboard.Use the Kubernetes dashboard to monitor the overall status of your AKS cluster. Ausführlichere Informationen finden Sie im Azure-Portal auf dem Übersichtsblatt des Clusters.See the cluster’s overview blade in Azure portal for more details. In den GitHub-Ressourcen erfahren Sie auch, wie Sie das Dashboard über R aufrufen.The GitHub resources also show how to bring up the dashboard from R.

Das Dashboard gibt zwar Aufschluss über die allgemeine Integrität Ihres Clusters, es ist aber auch wichtig, den Status einzelner Container nachzuverfolgen.Although the dashboard gives you a view of the overall health of your cluster, it’s also important to track the status of individual containers. Aktivieren Sie hierzu im Azure-Portal auf dem Übersichtsblatt des Clusters das Feature Azure Monitor Insights. Sie können auch Azure Monitor für Container (Vorschau) in Erwägung ziehen.To do this, enable Azure Monitor Insights from the cluster overview blade in Azure portal, or consider Azure Monitor for containers (in preview).

KostenbetrachtungCost considerations

Die Lizenzierung von Machine Learning Server ist kernbasiert. Dabei werden alle Kerne im Cluster berücksichtigt, auf denen Machine Learning Server ausgeführt wird.Machine Learning Server is licensed on a per-core basis, and all the cores in the cluster that will run Machine Learning Server count towards this. Wenden Sie sich als Unternehmenskunde mit Machine Learning Server oder Microsoft SQL Server an Ihren Ansprechpartner bei Microsoft, um Preisinformationen zu erhalten.If you are an enterprise Machine Learning Server or Microsoft SQL Server customer, contact your Microsoft representative for pricing details.

Eine Open-Source-Alternative zu Machine Learning Server ist Plumber. Dabei handelt es sich um ein R-Paket, das Ihren Code in eine REST-API verwandelt.An open-source alternative to Machine Learning Server is Plumber, an R package that turns your code into a REST API. Plumber bietet weniger Features als Machine Learning Server.Plumber is less fully featured than Machine Learning Server. So stehen standardmäßig beispielweise keine Features für die Anforderungsauthentifizierung zur Verfügung.For example, by default it doesn't include any features that provide request authentication. Bei Verwendung von Plumber empfiehlt es sich, Azure API Management für die Authentifizierung zu aktivieren.If you use Plumber, it’s recommended that you enable Azure API Management to handle authentication details.

Für die Kosten sind neben der Lizenzierung insbesondere die Computeressourcen des Kubernetes-Clusters relevant.Besides licensing, the main cost consideration is the Kubernetes cluster's compute resources. Der Cluster muss groß genug sein, um das zu Spitzenzeiten erwartete Anforderungsvolumen bewältigen zu können. Das führt jedoch dazu, dass sich Ressourcen außerhalb von Spitzenzeiten im Leerlauf befinden.The cluster must be large enough to handle the expected request volume at peak times, but this approach leaves resources idle at other times. Aktivieren Sie mithilfe des kubectl-Tools die automatische horizontale Skalierung für den Cluster, um die Auswirkungen von Ressourcen im Leerlauf zu verringern.To limit the impact of idle resources, enable the horizontal autoscaler for the cluster using the kubectl tool. Alternativ können Sie auch die automatische Clusterskalierung von AKS verwenden.Or use the AKS cluster autoscaler.

Bereitstellen der LösungDeploy the solution

Die Referenzimplementierung dieser Architektur ist auf GitHub verfügbar.The reference implementation of this architecture is available on GitHub. Gehen Sie wie dort beschrieben vor, um ein einfaches Prognosemodell als Dienst bereitzustellen.Follow the steps described there to deploy a simple predictive model as a service.