Bearbeiten

Multi-Model-Machine Learning (ML) im großen Stil in Azure mit Spark

Azure Data Factory
Azure Data Lake
Azure Databricks
Azure Machine Learning
Azure Synapse Analytics

In diesem Artikel wird eine Multi-Model-Architektur beschrieben, die Apache Spark in Azure Databricks oder Azure Synapse Analytics verwendet. Spark ist ein leistungsstarkes Tool für die großen und komplexen Datentransformationen, die einige Lösungen erfordern.

Hinweis

Verwenden Sie Multi-Model-Anwendungen Version 3.0 oder höher von Spark. Die Datentransformationsfunktionen und die Unterstützung für Python und pandas sind viel besser als in früheren Versionen.

Im Begleitartikel Multi-Model-Machine Learning (ML) im großen Stil mit Azure Machine Learning werden Machine Learning und Computecluster verwendet.

Aufbau

Architecture diagram for many models machine learning at scale on Azure with Spark.

Laden Sie eine Visio-Datei dieser Architektur herunter.

Datenfluss

  1. Datenerfassung: Azure Data Factory pullt Daten aus einer Quelldatenbank und kopiert sie in Azure Data Lake Storage.
  2. Modelltrainingspipeline:
    1. Vorbereiten der Daten: Die Trainingspipeline pullt die Daten aus Data Lake Storage und verwendet Spark, um sie in Datasets zum Trainieren der Modelle zu gruppieren.
    2. Trainieren von Modellen: Die Pipeline trainiert Modelle für alle Datasets, die während der Datenvorbereitung erstellt wurden. Sie verwendet die pandas-Funktions-API, um mehrere Modelle parallel zu trainieren. Nach dem Training eines Modells registriert die Pipeline es zusammen mit den Testmetriken in Machine Learning.
  3. Pipeline zur Modellheraufstufung:
    1. Auswerten von Modellen: Die Heraufstufungspipeline wertet die trainierten Modelle aus, bevor sie in die Produktion verschoben werden. Eine DevOps-Pipeline wendet Geschäftslogik an, um zu bestimmen, ob ein Modell die Kriterien für die Bereitstellung erfüllt. Beispielsweise kann überprüft werden, ob die Genauigkeit der Testdaten über 80 Prozent liegt.
    2. Registrieren von Modellen: Die Heraufstufungspipeline registriert die Modelle, die für den Machine Learning-Produktionsarbeitsbereich qualifiziert sind.
  4. Batchbewertungspipeline der Modelle:
    1. Vorbereiten der Daten: Die Batchbewertungspipeline pullt die Daten aus Data Lake Storage und verwendet Spark, um sie in Datasets für die Bewertung zu gruppieren.
    2. Bewerten der Modelle: Die Pipeline verwendet die pandas-Funktions-API, um mehrere Datasets parallel zu bewerten. Das geeignete Modell für jedes Dataset findet die Pipeline in Machine Learning anhand der Modelltags. Anschließend lädt sie das Modell herunter und verwendet es zur Bewertung des Datasets. Sie verwendet den Spark-Connector für Synapse SQL, um die Ergebnisse beizubehalten.
  5. Echtzeitbewertung: Azure Kubernetes Service (AKS) kann bei Bedarf eine Echtzeitbewertung durchführen. Aufgrund der großen Anzahl von Modellen sollten die Modelle bei Bedarf und nicht vorab geladen werden.
  6. Ergebnisse:
    1. Vorhersagen: Die Batchbewertungspipeline speichert Vorhersagen in Synapse SQL.
    2. Metriken: Power BI stellt eine Verbindung mit den Modellvorhersagen her, um die Ergebnisse für die Präsentation abzurufen und zu aggregieren.

Komponenten

  • Azure Machine Learning ist ein ML-Dienst der Unternehmensklasse zum schnelleren Erstellen und Bereitstellen von Modellen. Er bietet Benutzer*innen aller Qualifikationen einen Low-Code-Designer, automatisiertes maschinelles Lernen (AutoML) und eine gehostete Jupyter Notebook-Umgebung, die verschiedene IDEs unterstützt.
  • Azure Synapse Analytics ist ein Analysedienst, der Datenintegration, Data Warehousing für Unternehmen und Big Data-Analysen vereint.
  • Synapse SQL ist ein verteiltes Abfragesystem für T-SQL, das mit T-SQL auch Data Warehousing- und Datenvirtualisierungsszenarien sowie Streaming- und ML-Szenarien ermöglicht. Es bietet sowohl serverlose als auch dedizierte Ressourcenmodelle.
  • Azure Data Lake Storage ist ein hochgradig skalierbarer und sicherer Speicherdienst für Hochleistungs-Analyseworkloads.
  • Azure Kubernetes Service (AKS) ist ein vollständig verwalteter Kubernetes-Dienst für die Bereitstellung und Verwaltung von containerisierten Anwendungen. AKS vereinfacht die Bereitstellung eines verwalteten AKS-Clusters in Azure, indem der betriebliche Aufwand in Azure ausgelagert wird.
  • Azure DevOps ist eine Gruppe von Entwicklerdiensten, die eine umfassende Lebenszyklusverwaltung für Anwendungen und Infrastrukturen bereitstellt. DevOps umfasst Lösungen für Arbeitsverfolgung, Quellcodeverwaltung, Builderstellung und CI/CD, Paketverwaltung und Tests.
  • Microsoft Power BI ist eine Sammlung von Softwarediensten, Apps und Connectors, die zusammenarbeiten, um aus unabhängigen Quellen von Daten kohärente, visuell ansprechende und interaktive Erkenntnisse zu gewinnen.

Alternativen

  • Sie können für Modelltraining und -bewertung auch Spark in Azure Synapse anstelle von Spark in Azure Databricks verwenden.
  • Die Quelldaten können aus einer beliebigen Datenbank stammen.
  • Zur Bereitstellung von Echtzeitrückschlüssen können Sie einen verwalteten Online-Endpunkt oder AKS verwenden.

Szenariodetails

Viele Ansprüche an maschinelles Lernen (ML) sind zu komplex, um durch ein einziges ML-Modell gelöst zu werden. Welche Anforderung auch immer – Umsatzprognosen für jeden Artikel aller Geschäfte einer Lebensmittelkette oder Wartungsmodelle für Ölplattformen – ein spezifisches Modell für jeden Anspruch kann die Ergebnisse der meisten Probleme beim maschinellen Lernen verbessern. Dieses Multi-Model-Muster ist bereits in vielen Branchen verbreitet und lässt sich praxistauglich auf viele Anwendungsfälle übertragen. Mit Azure Machine Learning kann eine End-to-End-Multi-Model-Pipeline das Modelltraining sowie die Batch-Rückschluss- und Echtzeitbereitstellung umfassen.

Eine Multi-Model-Lösung verwendet während des Trainings und der Bewertung für jedes Modell ein eigenes Dataset. Dies wäre bei einer Umsatzprognose für jeden Artikel aller Geschäfte einer Lebensmittelkette ein eindeutiges Dataset für jede Artikel-/Geschäftskombination.

Mögliche Anwendungsfälle

  • Einzelhandel: Eine Lebensmittelkette muss ein separates Umsatzprognosemodell für jeden Artikel in jedem Geschäft erstellen, insgesamt über 1.000 Modelle pro Geschäft.
  • Materialbeschaffung: Für jede Kombination aus Warehouse und Produkt muss ein Verteilungsunternehmen den Bestand optimieren.
  • Restaurants: Eine Restaurantkette mit tausenden Franchise-Restaurants muss den jeweiligen Bedarf prognostizieren.

Überlegungen

Diese Überlegungen beruhen auf den Säulen des Azure Well-Architected Frameworks, d. h. einer Reihe von Grundsätzen, mit denen die Qualität von Workloads verbessert werden kann. Weitere Informationen finden Sie unter Microsoft Azure Well-Architected Framework.

  • Datenpartitionen: Datenpartitionierung ist Voraussetzung für die Implementierung des Multi-Model-Musters. Bei beispielsweise einem Modell pro Geschäft würde ein Dataset sämtliche Daten eines Geschäfts enthalten, und die Anzahl der Datasets entspräche der Anzahl der Geschäfte. Dagegen gäbe es bei einer Modellierung der Artikel nach Geschäft ein Dataset für jede Artikel-/Geschäftskombination. Je nach Quelldatenformat kann die Datenpartitionierung einfach sein oder Datenverschiebung und -transformation in großem Umfang erfordern. Spark und Synapse SQL sind für solche Aufgaben sehr gut skaliert. Python pandas hingegen nicht, da es nur auf einem Knoten und mit einem Prozess ausgeführt wird.
  • Modellverwaltung: Die Trainings- und Bewertungspipelines identifizieren und rufen das richtige Modell für jedes Dataset auf. Zu diesem Zweck berechnen sie Tags, die das Dataset charakterisieren, und verwenden diese Tags dann für die Identifizierung des geeigneten Modells. Die Tags identifizieren den Datenpartitionsschlüssel und die Modellversion und können darüber hinaus auch weitere Informationen bereitstellen.
  • Auswählen der richtigen Architektur:
    • Spark eignet sich auch bei Trainingspipelines mit komplexen Datentransformations- und -gruppierungsanforderungen. Es bietet flexible Aufteilungs- und Gruppierungstechniken für die Gruppierung der Daten nach Merkmalkombinationen wie „Artikel-Geschäft“ oder „Standort-Artikel“. Die Ergebnisse können zur Verwendung in nachfolgenden Schritten in einem Spark-Datenrahmen (DataFrame) platziert werden.
    • Bei einfachen ML Trainings- und Bewertungsalgorithmen kann die Datenpartitionierung eventuell auch mit Bibliotheken wie Scikit-learn erfolgen. In solchen Fällen benötigen Sie Spark möglicherweise nicht und würden so mögliche Schwierigkeiten bei der Installation von Azure Synapse oder Azure Databricks umgehen.
    • Wenn die Trainingsdatasets bereits erstellt sind und sich z. B. in separaten Dateien oder separaten Zeilen oder Spalten befinden, benötigen Sie auch für komplexe Datentransformationen kein Spark.
    • Die Machine Learning- und Computeclusterlösung bietet große Flexibilität für Situationen, die ein komplexes Setup erfordern. Beispielsweise können Sie einen benutzerdefinierten Docker-Container verwenden oder Dateien und vorab trainierte Modelle herunterladen. Deep Learning für Computer-Bildanalyse und Verarbeitung natürlicher Sprache (Natural Language Processing, NLP) sind Beispiele für Anwendungen, die eine solche Flexibilität erfordern können.
  • Spark-Training und -Bewertung: Wenn Sie die Spark-Architektur verwenden, können Sie die pandas-Funktions-API von Spark für das parallele Training und die Bewertung verwenden.
  • Separate Modellrepositorys: Um die bereitgestellten Modelle zu schützen, sollten Sie sie in einem eigenen Repository speichern, das aus den Trainings- und Testpipelines keinen Zugriff gestattet.
  • Onlinerückschlüsse: Wenn eine Pipeline bereits beim Start alle Modelle lädt und zwischenspeichert, kann sich der Arbeitsspeicher des Containers durch die vielen Modelle erschöpfen. Laden Sie daher die Modelle nach Bedarf in der Ausführungsmethode, auch wenn damit die Latenz leicht erhöht wird.
  • Trainingsskalierbarkeit: Mit Spark können Sie Hunderttausende Modelle parallel trainieren. Spark startet mehrere Trainingsprozesse auf jeder VM in einem Cluster. Jeder Kern kann einen separaten Prozess ausführen. Dies bedeutet zwar eine gute Auslastung der Ressourcen, es ist aber wichtig, den Cluster genau zu dimensionieren und die richtige SKU auszuwählen. Dies gilt insbesondere dann, wenn der Trainingsprozess aufwendig und zeitintensiv ist.

Kostenoptimierung

Bei der Kostenoptimierung geht es um die Suche nach Möglichkeiten, unnötige Ausgaben zu reduzieren und die Betriebseffizienz zu verbessern. Weitere Informationen finden Sie unter Übersicht über die Säule „Kostenoptimierung“.

Verwenden Sie den Preisrechner, um einen besseren Überblick über die Kosten für eine Umsetzung dieses Szenarios in Azure zu erhalten. Die folgenden Annahmen eignen sich als Ausgangsgrundlage:

  • Die Bereitstellungsmodelle werden täglich trainiert, um sie aktuell zu halten.
  • Für ein Dataset mit 40 Millionen Zeilen und 10.000 Kombinationen aus Geschäft und Artikel dauert das Training in Azure Databricks mit einem Cluster, in dem 12 VMs mit Ls16_v2-Instanzen bereitgestellt werden, etwa 30 Minuten.
  • Die Batchbewertung mit demselben Satz von Daten dauert etwa 20 Minuten.
  • Sie können Machine Learning verwenden, um Echtzeitrückschlüsse bereitzustellen. Wählen Sie je nach Anforderungsvolumen einen geeigneten VM-Typ und eine ausreichende Clustergröße aus.
  • Der AKS-Cluster wird bei Bedarf automatisch skaliert, sodass durchschnittlich zwei Knoten pro Monat aktiv sind.

Um zu sehen, wie sich die Preise für Ihren Anwendungsfall unterscheiden, ändern Sie die Variablen entsprechend Ihrer erwarteten Datengröße und den Anforderungen an die Bereitstellungsauslastung. Erhöhen oder verringern Sie bei größeren oder kleineren Trainingsdatenvolumen die Größe des Azure Databricks-Clusters. Um mehr gleichzeitige Benutzer*innen während der Modellverwendung zu ermöglichen, erhöhen Sie die AKS-Clustergröße.

Beitragende

Dieser Artikel wird von Microsoft gepflegt. Er wurde ursprünglich von folgenden Mitwirkenden geschrieben:

Hauptautor:

Nächste Schritte