Connector für PyTorch

Der Cloud Storage-Connector für PyTorch ist ein von Google unterstütztes Open-Source-Produkt, das eine direkte Cloud Storage-Integration in PyTorch ermöglicht.

Übersicht

Der Connector for PyTorch bietet Vorteile sowohl für das Laden von Daten beim Training als auch für das Erstellen von Checkpoints und das Laden von Modellen:

Für das Laden von Daten beim Training bietet der Connector for PyTorch die folgenden Vorteile:

  • Der Connector für PyTorch enthält Optimierungen, mit denen das Training in Datasets, die hauptsächlich aus Dateien mit einer Größe von weniger als 1 MB bestehen, bis zu dreimal schneller als mit dem Standard-PyTorch durchgeführt werden kann.
  • Der Connector für PyTorch implementiert das Dataset-Primitive von PyTorch, mit dem Trainingsdaten effizient aus Cloud Storage-Buckets geladen werden können.
  • Unterstützung für Datasets im Kartenstil für zufällige Datenzugriffsmuster und Datasets im iterierbaren Stil für Streaming-Datenzugriffsmuster.
  • Die Möglichkeit, die heruntergeladenen Rohdaten in das Format Ihrer Wahl zu transformieren, sodass der PyTorch-DataLoader flexibel mit NumPy-Arrays oder PyTorch-Tensoren arbeiten kann.

Für das Erstellen von Prüfpunkten und das Laden von Modellen bietet Connector for PyTorch die folgenden Vorteile:

  • Eine Checkpointing-Schnittstelle zum bequemen und direkten Speichern von Modell-Checkpoints in einem Cloud Storage-Bucket und zum Laden von Modell-Checkpoints aus dem Bucket.
  • Der Connector for PyTorch unterstützt die Prüfpunktausführung von PyTorch Lightning mithilfe der DatafluxLightningCheckpoint-Implementierung von CheckpointIO von PyTorch Lightning.
  • Connector for PyTorch bietet StorageWriter- und StorageReader-Implementierungen zur Verwendung mit dem verteilten Checkpointing von PyTorch. Die Connector for PyTorch-Demobibliothek enthält Beispielcode für die Verwendung in einer PyTorch Lightning FSDP-Arbeitslast.
  • Das Speichern von Prüfpunkten für Connectors unterstützt asynchrone Prüfpunkte sowohl mit Lightning als auch mit dem Basis-PyTorch.

Weitere Informationen finden Sie auf der GitHub-Landingpage für den Connector für PyTorch.

Frameworks

Der Connector for PyTorch wird für die folgenden Framework-Versionen unterstützt:

  • Python 3.8 oder höher
  • PyTorch Lightning 2.0 oder höher
  • PyTorch 2.3.1 oder höher

Erste Schritte

Für die Verwendung des Connectors für PyTorch benötigen Sie Folgendes:

  • Ein Cloud Storage-Bucket mit den Daten, die Sie verwenden möchten.
  • Die folgenden Berechtigungen sind für die Arbeit mit den im Bucket gespeicherten Daten erforderlich:
    • storage.objects.create
    • storage.objects.list
    • storage.objects.get
    • storage.objects.delete, wenn Sie zusammengesetzte Downloads verwenden möchten

Diese Berechtigungen müssen dem Konto, das der Connector für PyTorch zur Authentifizierung verwendet, über eine IAM-Rolle wie Storage-Objekt-Nutzer gewährt werden.

Installation

Verwenden Sie den folgenden Befehl, um den Connector für PyTorch zu installieren:

pip install gcs-torch-dataflux

Konfiguration

Für die Verwendung des Connectors für PyTorch müssen Standardanmeldedaten für Anwendungen über eine der folgenden Methoden bereitgestellt werden:

  • Wenn Sie den Connector für PyTorch auf einer Compute Engine-VM ausführen, werden standardmäßig automatisch die Standardanmeldedaten für Anwendungen des angehängten Dienstkontos der VM verwendet. Weitere Informationen finden Sie unter Arbeitslast-Authentifizierungsmethode auswählen.
  • Standardanmeldedaten für Anwendungen können auch manuell konfiguriert werden. Sie können sich direkt mit der Google Cloud CLI anmelden:
gcloud auth application-default login

Beispiele

Eine vollständige Reihe von Beispielen für die Arbeit mit dem Connector for PyTorch finden Sie im Demoverzeichnis des GitHub-Repositorys für den Connector for PyTorch. Hier einige Beispiele:

Leistung

Der Connector for PyTorch bietet spezielle Optimierungen für ML-Arbeitslasten, die eine deutlich bessere Leistung als direkte API-Aufrufe an Cloud Storage ermöglichen:

  • Zur Optimierung der Auflistungsleistung verwendet der Connector für PyTorch einen schnellen Auflistungsalgorithmus, der entwickelt wurde, um die Auflistungslast zwischen parallelisierten Objektauflistungsprozessen auszugleichen.
  • Um die Downloadleistung kleiner Dateien zu optimieren, verwendet der Connector for PyTorch den Compose-Vorgang, um Gruppen kleinerer Objekte zu einem einzelnen, größeren Objekt zusammenzufügen. Diese neuen zusammengesetzten Objekte werden im selben Bucket wie die Quellobjekte gespeichert und haben das Präfix dataflux-composed-objects/ in ihren Namen.
  • Mehrteiliger Upload für das Schreiben von Checkpoints ermöglicht eine bis zu zehnmal höhere Leistung als der standardmäßige Checkpoint-Upload.

Leistungsdaten für die folgenden Modelle finden Sie auf GitHub:

  • Lightning-Text-Training
  • Lightning-Bildtraining
  • Prüfpunkte für einzelne Knoten
  • Checkpointing mit mehreren Knoten

Hinweise

Die folgenden Punkte sollten für jede Arbeitslast berücksichtigt werden.

Schnelle Auflistungsvorgänge

Der Algorithmus für schnelles Auflisten des Connector for PyTorch führt dazu, dass der Connector for PyTorch mehr Auflistungsvorgänge verwendet als eine reguläre sequenzielle Auflistung. Listenvorgänge werden als Vorgänge der Klasse A abgerechnet.

Verwendung zusammengesetzter Objekte

Um zusätzliche Speicherkosten und Gebühren für vorzeitiges Löschen bei der Arbeit mit temporären zusammengesetzten Objekten zu vermeiden, sollten Sie darauf achten, dass für Ihren Bucket die folgenden Einstellungen verwendet werden:

Verbundobjekte, die vom Connector for PyTorch erstellt wurden, werden in der Regel automatisch am Ende des Trainingsdurchlaufs entfernt. In seltenen Fällen kann es jedoch vorkommen, dass dies nicht geschieht. Führen Sie den folgenden Befehl aus, um sicherzugehen, dass die Objekte aus Ihrem Bucket entfernt wurden:

gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive

Sie können die Verwendung von zusammengesetzten Objekten deaktivieren, indem Sie entweder disable_compose=True oder max_composite_object_size=0 in den Konfigurationsabschnitt des Datasets einfügen, das Sie erstellen. Wenn Sie dieses Verhalten deaktivieren, können Trainingsschleifen jedoch deutlich länger dauern, insbesondere wenn Sie mit kleinen Dateien arbeiten.

Wenn Sie zusammengesetzte Objekte verwenden, werden die QPS- und Durchsatzlimits von Cloud Storage bei einer geringeren Skalierung erreicht als beim direkten Herunterladen von Dateien. Sie sollten die Verwendung von zusammengesetzten Objekten deaktivieren, wenn Sie mit einer hohen Anzahl von Knoten arbeiten und die QPS- oder Durchsatzlimits des Projekts auch ohne zusammengesetzte Objekte erreicht werden.

429-Fehler und Leistungseinbußen

Bei der Arbeit mit dem Connector for PyTorch können 429-Fehler oder langsamere als erwartete Ausführungszeiten auftreten. Dafür gibt es mehrere häufige Gründe:

  • Bei vielen Projekten im Bereich des maschinellen Lernens wird ein stark verteiltes Trainingsmodell mit Tools wie PyTorch Lightning und Ray verwendet. Diese Modelle sind mit dem Connector für PyTorch kompatibel, können aber oft die Ratenbeschränkungen von Cloud Storage auslösen.
  • 429-Fehler mit Meldungen wie „This workload is drawing too much egress bandwidth from Cloud Storage“ (Diese Arbeitslast beansprucht zu viel Egress-Bandbreite von Cloud Storage) oder „This workload triggered the Cloud Storage Egress Bandwidth Cap“ (Diese Arbeitslast hat die Egress-Bandbreitenbegrenzung von Cloud Storage ausgelöst) deuten darauf hin, dass die Durchsatzrate der Daten Ihrer Arbeitslast die maximale Kapazität Ihres Google Cloud Projekts überschreitet. So beheben Sie diese Probleme:
  • Grenzwerte für Abfragen pro Sekunde können 429-Fehler mit einer Meldung im Antworttext auslösen, die TooManyRequests angibt. Häufiger führen sie jedoch zu längeren als erwarteten Ausführungszeiten. QPS-Engpässe treten häufiger auf, wenn Sie mit großen Mengen kleiner Dateien arbeiten. Bucket-QPS-Limits werden im Laufe der Zeit automatisch skaliert. Wenn Sie also eine Aufwärmphase einplanen, kann dies oft zu einer schnelleren Leistung führen. Weitere Informationen zur Leistung eines Ziel-Buckets finden Sie auf dem Tab „Observability“ (Beobachtbarkeit), wenn Sie Ihren Bucket über die Google Cloud Console aufrufen.
  • Wenn Ihre Arbeitslast mit einem TooManyRequests-Fehler fehlschlägt, der das Keyword dataflux-composed-objects in der Fehlermeldung enthält, ist das Deaktivieren der Verwendung zusammengesetzter Objekte der beste erste Schritt zur Fehlerbehebung. So kann die QPS-Last durch Compose-Vorgänge bei großem Umfang reduziert werden.

Arbeitsspeicherverbrauch

Checkpoint-Schreibvorgänge und ‑Ladevorgänge, einschließlich der endgültigen Modelle für die Inferenz, werden vollständig im Arbeitsspeicher zwischengespeichert, um die Upload- und Downloadleistung zu optimieren. Jede Maschine muss genügend freien RAM haben, um den Checkpoint im Arbeitsspeicher zu speichern, damit diese Leistungsverbesserungen genutzt werden können.

Support anfordern

Über einen der offiziellen Google Cloud Supportkanäle können Sie Support erhalten, allgemeine Fragen stellen und neue Funktionen anfordern. Support erhalten Sie auch, wenn Sie Probleme in GitHub melden.

PyTorch, das PyTorch-Logo und alle zugehörigen Marken sind Marken der Linux Foundation.