Machine Learning Operationalization (MLOps) für Python-Modelle mit Azure Machine LearningMachine learning operationalization (MLOps) for Python models using Azure Machine Learning

Diese Referenzarchitektur zeigt, wie eine Pipeline für Continuous Integration (CI), Continuous Delivery (CD) und erneutes Training für eine KI-Anwendung mit Azure DevOps und Azure Machine Learning implementiert werden kann.This reference architecture shows how to implement a continuous integration (CI), continuous delivery (CD), and retraining pipeline for an AI application using Azure DevOps and Azure Machine Learning. Die Lösung basiert auf dem Dataset „scikit-learn diabetes“, kann aber leicht an jedes KI-Szenario und andere gängige Buildsysteme wie Jenkins und Travis angepasst werden.The solution is built on the scikit-learn diabetes dataset but can be easily adapted for any AI scenario and other popular build systems such as Jenkins and Travis.

GitHub-Logo Eine Referenzimplementierung dieser Architektur ist auf GitHub verfügbar.GitHub logo A reference implementation for this architecture is available on GitHub.

Diagramm der MLOps-Architektur

AufbauArchitecture

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

Azure PipelinesAzure Pipelines. Dieses Build- und Testsystem basiert auf Azure DevOps und wird für die Erstellung und Freigabe von Pipelines verwendet.This build and test system is based on Azure DevOps and used for the build and release pipelines. Azure Pipelines unterteilt diese Pipelines in logische Schritte, die als Aufgaben bezeichnet werden.Azure Pipelines breaks these pipelines into logical steps called tasks. So vereinfacht z. B. die Aufgabe Azure CLI die Arbeit mit Azure-Ressourcen.For example, the Azure CLI task makes it easier to work with Azure resources.

Azure Machine Learning .Azure Machine Learning. Azure Machine Learning ist ein Clouddienst für das bedarfsorientierte Trainieren, Bewerten, Bereitstellen und Verwalten von Machine Learning-Modellen.Azure Machine Learning is a cloud service for training, scoring, deploying, and managing machine learning models at scale. Diese Architektur verwendet das Azure Machine Learning SDK für Python 3, um einen Arbeitsbereich, Computeressourcen, die Machine Learning-Pipeline und das Bewertungsbild zu erstellen.This architecture uses the Azure Machine Learning SDK for Python 3 to create a workspace, compute resources, the machine learning pipeline, and the scoring image. Ein Azure Machine Learning-Arbeitsbereich stellt den Bereich bereit, in dem Sie Modelle für maschinelles Lernen testen, trainieren und bereitstellen können.An Azure Machine Learning workspace provides the space in which to experiment and train and deploy machine learning models.

Azure Machine Learning Compute ist ein Cluster von bedarfsgesteuerten virtuellen Computern mit automatischer Skalierung sowie GPU- und CPU-Knotenoptionen.Azure Machine Learning Compute is cluster of virtual machines on demand with an automatic scaling and GPU and CPU node options. Der Trainingsauftrag wird auf diesem Cluster ausgeführt.The training job is executed on this cluster.

Azure Machine Learning-Pipelines bieten wiederverwendbare Workflows für maschinelles Lernen, die szenarioübergreifend wiederverwendet werden können.Azure Machine Learning pipelines provide reusable machine learning workflows that can be reused across scenarios. Training, Modellauswertung, Modellregistrierung und Bilderstellung erfolgen in unterschiedlichen Schritten innerhalb dieser Pipelines für diesen Anwendungsfall.Training, model evaluation, model registration, and image creation occur in distinct steps within these pipelines for this use case. Die Pipeline wird am Ende der Erstellungsphase veröffentlicht oder aktualisiert und beim Eintreffen neuer Daten ausgelöst.The pipeline is published or updated at the end of the build phase and gets triggered on new data arrival.

Azure Blob StorageAzure Blob Storage. Blobcontainer werden zum Speichern der Protokolle aus dem Bewertungsdienst verwendet.Blob containers are used to store the logs from the scoring service. In diesem Fall werden sowohl die Eingabedaten als auch die Modellvorhersage gesammelt.In this case, both the input data and the model prediction are collected. Nach einer gewissen Transformation können diese Protokolle für das erneute Trainieren des Modells verwendet werden.After some transformation, these logs can be used for model retraining.

Azure Container RegistryAzure Container Registry. Das bewertende Python-Skript wird als Docker-Image verpackt und in der Registrierung versioniert.The scoring Python script is packaged as a Docker image and versioned in the registry.

Azure Container InstancesAzure Container Instances. Als Teil der Releasepipeline wird die QA- und Stagingumgebung nachgeahmt, indem das bewertende Webdienstbild für Container Instances bereitgestellt wird, was eine einfache, serverlose Möglichkeit bietet, einen Container auszuführen.As part of release pipeline, the QA and staging environment is mimicked by deploying the scoring webservice image to Container Instances, which provides an easy, serverless way to run a container.

Azure Kubernetes ServiceAzure Kubernetes Service. Nachdem das bewertende Webdienstbild in der QA-Umgebung ausführlich getestet wurde, wird es in der Produktionsumgebung auf einem verwalteten Kubernetes-Cluster bereitgestellt.Once the scoring webservice image is thoroughly tested in the QA environment, it is deployed to the production environment on a managed Kubernetes cluster.

Azure Application InsightsAzure Application Insights. Dieser Überwachungsdienst wird verwendet, um Leistungsanomalien zu erkennen.This monitoring service is used to detect performance anomalies.

MLOps-PipelineMLOps Pipeline

Diese Lösung veranschaulicht eine End-to-End-Automatisierung verschiedener Phasen eines KI-Projekts mit Tools, die den Softwareentwicklern bereits vertraut sind.This solution demonstrates an end-to-end automation of various stages of an AI project using tools that are already familiar to software engineers. Das Problem des maschinellen Lernens besteht darin, den Fokus auf der DevOps-Pipeline zu halten.The machine learning problem is simple to keep the focus on the DevOps pipeline. Die Lösung verwendet das Dataset scikit-learn diabetes und erstellt ein lineares Regressionsmodell, um die Wahrscheinlichkeit von Diabetes vorherzusagen.The solution uses the scikit-learn diabetes dataset and builds a ridge linear regression model to predict the likelihood of diabetes. Weitere Informationen finden Sie unter Trainieren von Python-Modellen vom Typ „scikit-learn“.See Training of Python scikit-learn models for details.

Diese Lösung basiert auf den folgenden drei Pipelines:This solution is based on the following three pipelines:

  • BuildpipelineBuild pipeline. Erstellt den Code und führt eine Reihe von Tests durch.Buildings the code and runs a suite of tests.
  • Pipeline zum erneuten TrainingRetraining pipeline. Trainiert das Modell erneut, entweder nach einem Zeitplan oder wenn neue Daten verfügbar sind.Retrains the model on a schedule or when new data becomes available
  • ReleasepipelineRelease pipeline. Operationalisiert das Bewertungsbild und stuft es in verschiedenen Umgebungen sicher höher.Operationalizes the scoring image and promotes it safely across different environments.

In den nächsten Abschnitten werden die einzelnen Pipelines beschrieben.The next sections describe each of these pipelines.

BuildpipelineBuild pipeline

Die CI-Pipeline wird bei jedem Einchecken des Zeitcodes ausgelöst.The CI pipeline gets triggered every time code is checked in. Sie veröffentlicht eine aktualisierte Azure Machine Learning-Pipeline, nachdem sie den Code erstellt und eine Reihe von Tests durchgeführt hat.It publishes an updated Azure Machine Learning pipeline after building the code and running a suite of tests. Die Buildpipeline besteht aus den folgenden Aufgaben:The build pipeline consists of the following tasks:

  • KomponententestUnit test. Diese Tests stellen sicher, dass der Code funktioniert und stabil ist.These tests make sure the code works and is stable.

  • DatentestData test. Diese Tests bestätigen, dass die Datenmuster mit dem erwarteten Schema und der erwarteten Verteilung übereinstimmen.These tests verify that the data samples conform to the expected schema and distribution. Passen Sie diesen Test für andere Anwendungsfälle an, und führen Sie ihn als separate Datenintegritätspipeline aus, die beim Eintreffen neuer Daten ausgelöst wird.Customize this test for other use cases and run it as a separate data sanity pipeline that gets triggered as new data arrives. Verschieben Sie z. B. die Datentestaufgabe in eine Datenerfassungspipeline, damit Sie sie früher testen können.For example, move the data test task to a data ingestion pipeline so you can test it earlier.

Die folgenden einmaligen Aufgaben fallen beim Einrichten der Infrastruktur für Azure Machine Learning und das SDK für Python an:The following one-time tasks occur when setting up the infrastructure for Azure Machine Learning and the Python SDK:

  • Erstellen Sie den Arbeitsbereich, in dem alle Ressourcen für Azure Machine Learning gehostet werden.Create the workspace that hosts all Azure Machine Learning-related resources.

  • Erstellen Sie die Computeressourcen, die den Trainingsauftrag ausführen.Create the compute resources that run the training job.

  • Erstellen Sie die Machine Learning-Pipeline mit dem aktualisierten Trainingsskript.Create the machine learning pipeline with the updated training script.

  • Veröffentlichen Sie die Machine Learning-Pipeline als REST-Endpunkt, um den Trainingsworkflow zu orchestrieren.Publish the machine learning pipeline as a REST endpoint to orchestrate the training workflow. Im nächsten Abschnitt wird dieser Schritt beschrieben.The next section describes this step.

Pipeline zum erneuten TrainingRetraining pipeline

Die Machine Learning-Pipeline orchestriert das erneute Trainieren des Modells auf asynchrone Weise.The machine learning pipeline orchestrates the process of retraining the model in an asynchronous manner. Ein erneutes Training kann nach einem Zeitplan oder bei Verfügbarkeit neuer Daten ausgelöst werden, indem der veröffentlichte REST-Endpunkt der Pipeline aus dem vorherigen Schritt aufgerufen wird.Retraining can be triggered on a schedule or when new data becomes available by calling the published pipeline REST endpoint from previous step.

Diese Pipeline umfasst die folgenden Schritte:This pipeline covers the following steps:

  • Trainieren eines ModellsTrain model. Das Python-Trainingsskript wird auf der Azure Machine Learning Compute-Ressource ausgeführt, um ein neues Modell zu erhalten.The training Python script is executed on the Azure Machine Learning Compute resource to get a new model. Da das Training die rechenintensivste Aufgabe in einem KI-Projekt ist, verwendet die Lösung Azure Machine Learning Compute.Since training is the most compute-intensive task in an AI project, the solution uses Azure Machine Learning Compute.

  • Bewerten eines ModellsEvaluate model. Ein einfacher Bewertungstest vergleicht das neue Modell mit dem bestehenden Modell, und erst wenn das neue Modell bessere Ergebnisse liefert, wird es höher gestuft.A simple evaluation test compares the new model with the existing model, and only when the new model is better does it get promoted.

  • Registrieren des ModellsRegister model. Das neu trainierte Modell wird beim Modellverwaltungsdienst registriert.The retrained model is registered with the model management service. Dieser Dienst bietet eine Versionskontrolle für die Modelle sowie Metadatentags, sodass sie leicht reproduziert werden können.This service provides version control for the models along with metadata tags so they can be easily reproduced.

ReleasepipelineRelease pipeline

Diese Pipeline zeigt, wie Sie das Bewertungsbild operationalisieren und in verschiedenen Umgebungen sicher höher stufen können.This pipeline shows how to operationalize the scoring image and promote it safely across different environments. Diese Pipeline ist in zwei Bereiche, QA und Produktion, unterteilt:This pipeline is subdivided into two environments, QA and production:

QualitätssicherungsumgebungQA environment

  • Modellieren von Artefakttriggern.Model Artifact trigger. Releasepipelines werden jedes Mal ausgelöst, wenn ein neues Artefakt verfügbar ist.Release pipelines get triggered every time a new artifact is available. Ein neues, in der Azure Machine Learning-Modellverwaltung registriertes Modell wird als ein Releaseartefakt behandelt.A new model registered to Azure Machine Learning Model Management is treated as a release artifact. In diesem Fall wird für jedes neu registrierte Modell eine Pipeline ausgelöst.In this case, a pipeline is triggered for each new model is registered.

  • Erstellen des Bewertungsbilds.Create scoring image. Das registrierte Modell wird zusammen mit Bewertungsskripts und Python-Abhängigkeiten (Conda YAML-Datei) zu einem Docker-Image zur Operationalisierung zusammengefasst.The registered model is packaged together with scoring script and Python dependencies (Conda YAML file) into an operationalization Docker image. Das Bild wird automatisch über Azure Container Registry versioniert.The image automatically gets versioned through Azure Container Registry.

  • Bereitstellen in Container Instances:Deploy on Container Instances. Dieser Dienst wird verwendet, um eine Nicht-Produktionsumgebung zu erstellen.This service is used to create a non-production environment. Auch hier wird das Bewertungsbild bereitgestellt, das vor allem zum Testen verwendet wird.The scoring image is also deployed here, and this is mostly used for testing. Container Instances bietet eine einfache und schnelle Möglichkeit, das Docker-Image zu testen.Container Instances provides an easy and quick way to test the Docker image.

  • Testen des Webdiensts:Test web service. Ein einfacher API-Test stellt sicher, dass das Bild erfolgreich bereitgestellt wird.A simple API test makes sure the image is successfully deployed.

ProduktionsumgebungProduction environment

  • Bereitstellen auf Azure Kubernetes Service:Deploy on Azure Kubernetes Service. Dieser Dienst wird für die Bereitstellung von Bewertungsbildern als bedarfsorientierter Webdienst in einer Produktionsumgebung verwendet.This service is used for deploying scoring image as a web service at scale in a production environment.

  • Testen des Webdiensts:Test web service. Ein einfacher API-Test stellt sicher, dass das Bild erfolgreich bereitgestellt wird.A simple API test makes sure the image is successfully deployed.

Informationen zum End-to-End-Datenfluss der Lösung finden Sie in der Infodatei zum Projekt auf GitHub.To understand the end-to-end flow of the solution, see the project readme on GitHub.

Überlegungen zur SkalierbarkeitScalability considerations

Eine Buildpipeline für Azure DevOps kann für Anwendungen beliebiger Größe skaliert werden.A build pipeline on Azure DevOps can be scaled for applications of any size. Buildpipelines verfügen über einen maximalen Timeout, der je nach Agent, auf dem sie ausgeführt werden, variiert.Build pipelines have a maximum timeout that varies depending on the agent they are run on. Builds können für immer auf selbstgehosteten Agents (privaten Agents) ausgeführt werden.Builds can run forever on self-hosted agents (private agents). Für von Microsoft gehostete Agents für ein öffentliches Projekt können Builds sechs Stunden lang ausgeführt werden.For Microsoft-hosted agents for a public project, builds can run for six hours. Für private Projekte sind es 30 Minuten.For private projects, 30 minutes.

Um den maximalen Timeout zu verwenden, legen Sie die folgende Eigenschaft in Ihrer Azure Pipelines YAML-Datei fest:To use the maximum timeout, set the following property in your Azure Pipelines YAML file:

jobs:
- job: <job_name>
  timeoutInMinutes: 0

Im Idealfall sollten Sie Ihre Buildpipeline schnell fertig stellen und nur Komponententests und eine Teilmenge anderer Tests durchführen.Ideally, have your build pipeline finish quickly and execute only unit tests and a subset of other tests. Auf diese Weise können Sie die Änderungen schnell überprüfen und bei auftretenden Problemen beheben.This allows you to validate the changes quickly and fix them if issues arise. Führen Sie zeitintensive Tests außerhalb der Geschäftszeiten durch.Run long-running tests during off hours.

Die Releasepipeline veröffentlicht einen Webdienst zur Echtzeitbewertung.The release pipeline publishes a real-time scoring web service. Eine Freigabe in die Qualitätssicherungsumgebung erfolgt über Container Instances, aber Sie können auch einen anderen Kubernetes-Cluster verwenden, der in der Qualitätssicherungs-/Stagingumgebung ausgeführt wird.A release to the QA environment is done using Container Instances for convenience, but you can use another Kubernetes cluster running in the QA/staging environment.

Skalieren Sie die Produktionsumgebung entsprechend der Größe Ihres Azure Kubernetes Service-Clusters.Scale the production environment according to the size of your Azure Kubernetes Service cluster. Die Größe des Clusters hängt von der zu erwartenden Last für den bereitgestellten Bewertungswebdienst ab.The size of the cluster depends on the load you expect for the deployed scoring web service. Für Architekturen mit Echtzeitbewertung ist der Durchsatz eine wichtige Optimierungsmetrik.For real-time scoring architectures, throughput is a key optimization metric. Für Szenarien ohne Deep Learning sollte die CPU ausreichend bemessen sein, um die Last zu verarbeiten. Für Deep Learning-Workloads, bei denen sich die Geschwindigkeit als Engpass erweisen kann, bieten GPUs im Allgemeinen jedoch eine bessere Leistung als CPUs.For non-deep learning scenarios, CPU should be sufficient to handle the load; 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, wird in der Regel ein Cluster mit einer großen Anzahl von CPUs benötigt.For moreTo match GPU performance using CPUs, a cluster with a large number of CPUs is usually needed. Kubernetes Service unterstützt sowohl CPU- als auch GPU-Knotentypen. Dies ist der Grund, warum diese Lösung Kubernetes Service für die Bildbereitstellung verwendet.Kubernetes Service supports both CPU and GPU node types—the reason this solution uses Kubernetes Service for image deployment. Weitere Informationen finden Sie unter GPUs und CPUs für die Bereitstellung von Deep Learning-Modellen (Blogbeitrag).For more information, see GPUs vs CPUs for deployment of deep learning models (blog post).

Skalieren Sie die Pipeline für das erneute Training je nach Anzahl der Knoten in Ihrer Azure Machine Learning Compute-Ressource zentral hoch oder herunter, und verwenden Sie die Option Automatische Skalierung zur Verwaltung des Clusters.Scale the retraining pipeline up and down depending on the number of nodes in your Azure Machine Learning Compute resource, and use the autoscaling option to manage the cluster. In dieser Architektur werden CPUs verwendet.This architecture uses CPUs. Für Deep Learning-Workloads sind GPUs die bessere Wahl und werden durch Azure Machine Learning Compute unterstützt.For deep learning workloads, GPUs are a better choice and are supported by Azure Machine Learning Compute.

Überlegungen zur VerwaltungManagement considerations

  • Überwachen des Auftrags zum erneuten Trainieren:Monitor retraining job. Machine Learning-Pipelines orchestrieren das erneute Training über einen Computercluster hinweg und bieten eine einfache Möglichkeit zur Überwachung der Computer.Machine learning pipelines orchestrate retraining across a cluster of machines and provides an easy way to monitor them. Verwenden Sie das Azure-Portal, und wechseln Sie zum Machine Learning-Arbeitsbereich, und suchen Sie im Abschnitt „Pipelines“ nach den Protokollen.Use the Azure portal, and go to the machine learning workspace, and look under pipelines section for the logs. Alternativ werden diese Protokolle auch in ein Blob geschrieben und können von dort aus ebenfalls mit Tools wie Azure Storage-Explorer gelesen werden.Alternatively, these logs are also written to blob and can be read from there as well using tools such as Azure Storage Explorer.

  • Protokollierung:Logging. Azure Machine Learning bietet eine einfache Möglichkeit zur Protokollierung in den einzelnen Schritten des Machine Learning-Lebenszyklus.Azure Machine Learning provides an easy way to log at each step of the machine learning life cycle. Die Protokolle werden in einem Blobcontainer gespeichert.The logs are stored in a blob container. Weitere Informationen hierzu finden Sie unter Aktivieren der Protokollierung in Azure Machine Learning.For more information, see Enable logging in Azure Machine Learning. Für eine umfassendere Überwachung konfigurieren Sie Application Insights für die Verwendung der Protokolle.For richer monitoring, configure Application Insights to use the logs.

  • Sicherheit.Security. Alle Geheimnisse und Anmeldeinformationen werden in Azure Key Vault gespeichert und in Azure Pipelines über Variablengruppen abgerufen.All secrets and credentials are stored in Azure Key Vault and accessed in Azure Pipelines using variable groups.

KostenbetrachtungCost considerations

Azure DevOps ist für Open-Source-Projekte und kleine Projekte mit bis zu fünf Benutzern kostenlos.Azure DevOps is free for open-source projects and small projects with up to five users. Für größere Teams erwerben Sie einen Tarif, der auf der Anzahl der Benutzer basiert.For larger teams, purchase a plan based on the number of users.

„Compute“ ist der größte Kostenfaktor in dieser Architektur und variiert je nach Anwendungsfall.Compute is the biggest cost driver in this architecture and varies depending on the use case. Für Experimente und Training sind Azure Machine Learning Services kostenlos, Sie bezahlen nur für die genutzte Computekapazität.For experimentation and training, Azure Machine Learning is free, you pay only for the compute used. Während der Bereitstellung von Modellen im Kubernetes Service-Cluster fügt Azure Machine Learning einen kleinen Zuschlag zu den Kubernetes Service-Computekosten hinzu.While deploying models to Kubernetes Service cluster, Azure Machine Learning adds a small surcharge on top of the Kubernetes Service compute cost. Je nach erwarteter Webdienstlast und der definierten Option zur automatischen Skalierung können Sie diese Kosten steuern.Depending on the expected web service load and the defined autoscaling option, you can control this cost. Sie können entweder die Azure CLI oder das Azure Machine Learning Python-SDK verwenden, um eine Konfiguration programmgesteuert für die automatische Skalierung festzulegen.You can use either Azure CLI or Azure Machine Learning Python SDK to programmatically set an autoscaling configuration.

Die Pipeline zum erneuten Training erfordert auch eine Computeform.The retraining pipeline also requires a form of compute. Diese Architektur verwendet Azure Machine Learning Compute, aber es sind auch andere Optionen verfügbar.This architecture uses Azure Machine Learning Compute, but other options are available. Wie bereits erwähnt, fallen bei Trainingsmodellen keine Zuschläge für den Machine Learning Service an, sondern Sie zahlen nur für die Computekosten.As mentioned earlier, training models do not incur the machine learning service surcharge; you only pay the compute cost. Die Computekosten hängen von der Clustergröße, dem Knotentyp und der Anzahl der Knoten ab.The compute cost depends on the cluster size, node type, and number of nodes. Sie können die Kosten für Machine Learning und andere Dienste mit dem Azure-Preisrechner schätzen.You can estimate the cost for Machine Learning and other services using the Azure pricing calculator.

Bereitstellen der LösungDeploy the solution

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