Bewährte Methoden für Deep Learning in Azure Databricks

Dieser Artikel enthält Tipps für Deep Learning in Azure Databricks sowie Informationen zu integrierten Tools und Bibliotheken, mit denen sich Deep Learning-Workloads optimieren lassen. Nachfolgend sind einige Beispiele aufgeführt:

Databricks Machine Learning bietet eine vorgefertigte Deep Learning-Infrastruktur mit Databricks Runtime für Machine Learning, die die gängigsten Deep Learning-Bibliotheken wie TensorFlow, PyTorch und Keras umfasst. Darüber hinaus verfügt die Lösung über integrierte, vorkonfigurierte GPU-Unterstützung, einschließlich Treibern und unterstützenden Bibliotheken.

Databricks Runtime ML umfasst zudem alle Funktionen des Azure Databricks-Arbeitsbereichs. Dazu zählen Clustererstellung und -verwaltung, Bibliotheks- und Umgebungsverwaltung, Codeverwaltung mit Databricks-Git-Ordnern, Automatisierungsunterstützung einschließlich Databricks-Aufträgen und -APIs sowie die integrierte MLflow-Plattform zur Nachverfolgung der Modellentwicklung und für die Modellimplementierung.

Ressourcen- und Umgebungsverwaltung

Azure Databricks hilft Ihnen dabei, Ihre Deep Learning-Umgebung anzupassen und benutzerübergreifend konsistent zu halten.

Anpassen der Entwicklungsumgebung

Mit Databricks Runtime können Sie Ihre Entwicklungsumgebung auf Notebook-, Cluster- und Auftragsebene anpassen.

Verwenden von Clusterrichtlinien

Sie können Clusterrichtlinien erstellen, um wissenschaftlichen Fachkräften für Daten geeignete Optionen anzuzeigen, z. B. die Verwendung eines Einzelknotenclusters für die Entwicklung oder die Verwendung eines Clusters mit automatischer Skalierung für große Aufträge.

Erwägen von A100-GPUs für Deep Learning-Workloads

A100-GPUs sind eine effiziente Wahl für viele Deep Learning-Aufgaben, z. B. das Trainieren und Optimieren großer Sprachmodelle, die linguistische Datenverarbeitung, die Objekterkennung und -klassifizierung sowie Empfehlungs-Engines.

  • Databricks unterstützt A100-GPUs in allen Clouds. Eine vollständige Liste der unterstützten GPU-Typen finden Sie unter Unterstützte Instanztypen.
  • A100-GPUs haben in der Regel eine begrenzte Verfügbarkeit. Wenden Sie sich an Ihren Cloudanbieter für die Ressourcenzuordnung, oder erwägen Sie, Kapazität im Voraus zu reservieren.

Bewährte Methoden für das Laden von Daten

Clouddatenspeicher ist in der Regel nicht für E/A optimiert. Dies kann eine Herausforderung für Deep Learning-Modelle darstellen, die große Datasets erfordern. Databricks Runtime ML umfasst Delta Lake und Petastorm, um den Datendurchsatz für Deep Learning-Anwendungen zu optimieren.

Databricks empfiehlt die Verwendung von Delta Lake-Tabellen für die Datenspeicherung. Delta Lake vereinfacht ETL-Verfahren und ermöglicht einen effizienten Zugriff auf Daten. Insbesondere bei Bildern lässt sich die Erfassung für Training und Rückschlüsse mithilfe von Delta Lake optimieren. Die Referenzlösung für Bildanwendungen umfasst ein Beispiel für die Optimierung von ETL-Vorgängen für Bilder mithilfe von Delta Lake.

Petastorm bietet APIs, mit denen Sie Daten im Parquet-Format für die Verwendung durch TensorFlow, Keras oder PyTorch vorbereiten können. Die SparkConverter-API ermöglicht die Spark-DataFrame-Integration. Petastorm ermöglicht zudem ein Datensharding für die verteilte Verarbeitung. Weitere Informationen finden Sie unter Laden von Daten mit Petastorm.

Bewährte Methoden zum Trainieren von Deep Learning-Modellen

Databricks empfiehlt die Verwendung von Databricks Runtime für Machine Learning, MLflow-Nachverfolgung und automatischer Protokollierung für das gesamte Modelltraining.

Einzelknotencluster als Ausgangspunkt

Ein GPU-Cluster mit einem einzelnen Knoten (nur Treiber) ist üblicherweise die schnellste und kosteneffektivste Möglichkeit für die Deep Learning-Modellentwicklung. Ein Knoten mit vier GPUs bietet wahrscheinlich eine höhere Leistung für das Deep Learning-Training als vier Workerknoten mit je einer GPU. Dies liegt daran, dass das verteilte Training einen Mehraufwand bei der Netzwerkkommunikation verursacht.

Ein Einzelknotencluster ist eine gute Option bei der schnellen, iterativen Entwicklung sowie beim Trainieren von Modellen mit kleinen bis mittelgroßen Datenvolumen. Wenn Ihr Dataset so groß ist, dass die Leistung beim Training auf einem einzelnen Computer beeinträchtigt wird, sollten Sie die Verwendung mehrerer GPUs und sogar ein verteiltes Computing erwägen.

Verwenden von TensorBoard und Clustermetriken zum Überwachen des Trainingsvorgangs

TensorBoard ist in Databricks Runtime ML vorinstalliert. Sie können es in einem Notebook oder auf einer separaten Registerkarte verwenden. Weitere Informationen finden Sie unter TensorBoard.

Clustermetriken sind in allen Databricks Runtime-Instanzen verfügbar. Sie können die Netzwerk-, Prozessor- und Arbeitsspeicherauslastung untersuchen, um auf Engpässe zu prüfen. Weitere Informationen finden Sie unter Clustermetriken .

Optimieren der Leistung für Deep Learning

Sie können und sollten Verfahren zur Deep Learning-Leistungsoptimierung in Databricks nutzen.

Frühes Beenden

Beim frühen Beenden wird der Wert einer Metrik überwacht, die für den Validierungssatz berechnet wurde. Wenn die Metrik sich nicht mehr verbessert, wird das Training angehalten. Dies ist ein besserer Ansatz, als erst nach einer Reihe von Epochen nach Unstimmigkeiten zu suchen. Jede Deep Learning-Bibliothek bietet eine native API für das frühe Beenden. Sehen Sie sich z. B. Informationen zu den EarlyStopping-Rückruf-APIs für TensorFlow/Keras und PyTorch Lightning an. Ein Beispielnotebook finden Sie unter TensorFlow Keras-Beispielnotebook.

Optimierung der Batchgröße

Die Optimierung der Batchgröße hilft bei der Optimierung der GPU-Auslastung. Bei einer zu geringen Batchgröße können die GPU-Funktionen nicht vollständig für die Berechnungen genutzt werden. GPU-Metriken lassen sich über die Clustermetriken anzeigen.

Passen Sie die Batchgröße in Verbindung mit der Lernrate an. Als Faustregel gilt: Wenn Sie die Batchgröße um n erhöhen, sollten Sie die Lernrate um sqrt(n) erhöhen. Bei der manuellen Optimierung sollten Sie die Batchgröße um den Faktor 2 bzw. 0,5 ändern. Fahren Sie anschließend mit der Leistungsoptimierung fort (entweder manuell oder indem Sie eine Vielzahl von Hyperparametern mithilfe eines automatisierten Tools wie Hyperopt testen).

Transferlernen

Beim Transferlernen beginnen Sie mit einem zuvor trainierten Modell und ändern dieses nach Bedarf für Ihre Anwendung. Mithilfe des Transferlernens lässt sich die erforderliche Zeit zum Trainieren und Optimieren eines neuen Modells erheblich reduzieren. Weitere Informationen und ein Beispiel finden Sie unter Featurisierung für Transferlernen.

Übergang zum verteilten Training

Databricks Runtime ML umfasst HorovodRunner, spark-tensorflow-distributor, TorchDistributor und Hyperopt, um den Wechsel von einem einzelnen Knoten zum verteilten Training zu ermöglichen.

HorovodRunner

Horovod ist ein Open-Source-Projekt, mit dem das Deep Learning-Training auf mehrere GPUs oder ein verteiltes Computing skaliert wird. HorovodRunner wurde von Databricks entwickelt und in Databricks Runtime ML integriert. Dieser Wrapper bietet Spark-Kompatibilität. Über die API lässt sich Einzelknotencode mit minimalen Änderungen skalieren. HorovodRunner funktioniert mit TensorFlow, Keras und PyTorch.

spark-tensorflow-distributor

Bei spark-tensorflow-distributor handelt es sich um ein natives Open-Source-Paket in TensorFlow für verteiltes Training mit TensorFlow in Spark-Clustern. Weitere Informationen finden Sie im Beispielnotebook.

TorchDistributor

TorchDistributor ist ein Open-Source-Modul in PySpark, mit dem das verteilte Training mit PyTorch auf Spark-Clustern ermöglicht wird, damit Sie PyTorch-Trainingsaufträge als Spark-Aufträge starten können. Weitere Informationen finden Sie unter Verteiltes Training mit TorchDistributor.

Hyperopt

Hyperopt bietet eine adaptive Hyperparameteroptimierung für maschinelles Lernen. Mit der SparkTrials-Klasse können Sie Parameter für Deep Learning-Modelle iterativ und parallel in einem Cluster optimieren.

Bewährte Methoden für Rückschlüsse

Dieser Abschnitt enthält allgemeine Tipps zur Verwendung von Modellen für Rückschlüsse mit Azure Databricks.

  • Um Kosten zu minimieren, sollten Sie sowohl CPUs als auch rückschlussoptimierte GPUs wie die NC-T4_v3-Serie in Betracht ziehen. Da die optimale Konfiguration von Modellgröße, Datendimensionen und anderen Variablen abhängt, gibt es keine klare Empfehlung.

  • Verwenden Sie MLflow, um die Modellimplementierung und -bereitstellung zu vereinfachen. Mit MLflow kann jedes Deep Learning-Modell protokolliert werden (einschließlich benutzerdefinierter Vorverarbeitungs- und Nachverarbeitungslogik). In Unity Catalog oder der Workspace-Modellregistrierung registrierte Modelle können für Batch-, Streaming- oder Onlinerückschlüsse bereitgestellt werden.

Onlinebereitstellung

Die beste Option für die Bereitstellung mit geringer Latenz ist die Onlinebereitstellung über eine REST-API. Databricks bietet die Modellbereitstellung für Onlinerückschlüsse. Model Serving bietet eine einheitliche Schnittstelle zum Bereitstellen, Steuern und Abfragen von KI-Modellen und unterstützt folgende Bereitstellungen:

  • Benutzerdefinierte Modelle: Dies sind Python-Modelle, die im MLflow-Format verpackt sind. Beispiele sind scikit-learn-, XGBoost-, PyTorch- und Hugging Face-Transformationsmodelle.
  • Modernste offene Modelle, die von Foundation Model-APIszur Verfügung gestellt werden Diese Modelle sind kuratierte Basismodellarchitekturen, die optimierte Rückschlüsse unterstützen. Basismodelle wie Llama-2-70B-chat, BGE-Large und Mistral-7B stehen z. B. für die sofortige Verwendung mit tokenbasierter Bezahlung zur Verfügung. Workloads, die Leistungsgarantien und fein abgestimmten Modellvarianten erfordern, können Sie mit bereitgestellten Durchsatz bereitstellen.
  • Externe Modelle. Dies sind Modelle, die außerhalb von Databricks gehostet werden. Beispiele sind Basismodelle wie GPT-4 von OpenAI, Claude von Anthropic und andere. Endpunkte für diese Modelle können zentral gesteuert werden, und Kund*innen können Ratenbegrenzungen und Zugriffssteuerungen für sie festlegen.

Alternativ dazu bietet MLflow APIs für die Bereitstellung in verschiedenen verwalteten Diensten für Onlinerückschlüsse sowie APIs zum Erstellen von Docker-Containern für benutzerdefinierte Bereitstellungslösungen.

Weitere gängige verwaltete Dienste für Onlinerückschlüsse sind:

Batch- und Streamingrückschlüsse

Die Batch- und Streamingbewertung unterstützt eine Bewertung mit hohem Durchsatz und niedrigen Kosten bei Latenzen von nur wenigen Minuten. Weitere Informationen finden Sie unter Verwenden von MLflow für Modellrückschlüsse.

  • Wenn Sie davon ausgehen, dass Sie mehrmals für Rückschlüsse auf Daten zugreifen, sollten Sie das Erstellen eines Vorverarbeitungsauftrags erwägen, um ETL-Vorgänge für die Daten in einer Delta Lake-Tabelle auszuführen, bevor der Rückschlussauftrag ausgeführt wird. Auf diese Weise werden die Kosten für die Erfassung und Vorbereitung der Daten auf mehrere Lesevorgänge für die Daten verteilt. Indem Sie die Vorverarbeitung vom Rückschluss trennen, können Sie zudem unterschiedliche Hardware für jeden Auftrag auswählen, um die Kosten und die Leistung zu optimieren. So können Sie beispielsweise CPUs für ETL und GPUs für Rückschlüsse verwenden.
  • Verwenden Sie Spark Pandas-UDFs, um Batch- und Streamingrückschlüsse in einem Cluster zu skalieren.
    • Wenn Sie ein Modell aus Azure Databricks protokollieren, stellt MLflow automatisch Rückschlusscode bereit, um das Modell als pandas-UDF anzuwenden.
    • Darüber hinaus können Sie Ihre Rückschlusspipeline zusätzlich optimieren, insbesondere bei großen Deep Learning-Modellen. Ein Beispiel finden Sie in der Referenzlösung für Bild-ETL.