Connector for PyTorch

Der Connector for PyTorch von Cloud Storage 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 for PyTorch enthält Optimierungen, mit denen das Training bei Datasets, die hauptsächlich aus Dateien mit einer Größe von weniger als 1 MB bestehen, bis zu dreimal schneller als mit dem standardmäßigen PyTorch durchgeführt werden kann.
  • Der Connector for 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 Iterable-Stil für Streaming-Datenzugriffsmuster.
  • Die Möglichkeit, die heruntergeladenen Rohbytes von Daten 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 Prüfpunktschnittstelle zum bequemen und direkten Speichern von Modellprüfpunkten in einem Cloud Storage-Bucket und zum Laden von Modellprüfpunkten aus dem Bucket.
  • Der Connector for PyTorch unterstützt die Prüfpunktausführung von PyTorch Lightning mit der DatafluxLightningCheckpoint-Implementierung von CheckpointIO von PyTorch Lightning.
  • Connector for PyTorch bietet StorageWriter- und StorageReader-Implementierungen für die Verwendung mit verteilter Prüfpunktausführung von PyTorch. Die Connector for PyTorch-Demobibliothek enthält Beispielcode für die Verwendung in einer PyTorch Lightning FSDP-Arbeitslast.
  • Die Prüfpunktausführung für Connectors unterstützt sowohl Lightning als auch das Basis-PyTorch-Framework für asynchrone Prüfpunktausführung.

Weitere Informationen finden Sie auf der GitHub-Landingpage für den Connector for 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 von Connector for PyTorch benötigen Sie Folgendes:

  • Ein Cloud Storage-Bucket mit den Daten, mit denen Sie arbeiten 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 for PyTorch zur Authentifizierung verwendet, über eine IAM-Rolle wie Storage Object User gewährt werden.

Installation

Verwenden Sie den folgenden Befehl, um den Connector for 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 for 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 über die 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 for 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:

  • Textbasiertes Training mit Lightning
  • Bildtraining mit Lightning
  • Prüfpunkte für einzelne Knoten
  • Prüfpunkte für mehrere 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. Auflistungsvorgänge werden als Vorgänge der Klasse A abgerechnet.

Verwendung zusammengesetzter Objekte

Wenn Sie mit temporären zusammengesetzten Objekten arbeiten, sollten Sie darauf achten, dass für Ihren Bucket die folgenden Einstellungen verwendet werden, um zusätzliche Speicherkosten und Gebühren für das vorzeitige Löschen zu vermeiden:

Zusammengesetzte Objekte, die vom Connector for PyTorch erstellt wurden, werden in der Regel automatisch am Ende der Trainingsschleife entfernt. In seltenen Fällen kann es jedoch vorkommen, dass dies nicht geschieht. Führen Sie den folgenden Befehl aus, um zu prüfen, ob 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 Limits für Abfragen pro Sekunde (Queries per Second, QPS) und den Durchsatz 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 for PyTorch kompatibel, können aber oft die Ratenbegrenzungen von Cloud Storage auslösen.
  • 429-Fehler mit Meldungen wie „Diese Arbeitslast beansprucht eine zu große Bandbreite für ausgehenden Traffic aus Cloud Storage“ oder „Diese Arbeitslast hat die Bandbreitenbegrenzung für ausgehenden Traffic von Cloud Storage ausgelöst“ deuten darauf hin, dass die Durchsatzrate der Daten Ihrer Arbeitslast die maximale Kapazität Ihres Google Cloud -Projekts überschreitet. Gehen Sie so vor:
  • QPS-Grenzwerte können 429-Fehler mit einer Meldung im Antworttext auslösen, die TooManyRequests angibt. Häufiger führen sie jedoch zu langsameren 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 „Beobachtbarkeit“, wenn Sie Ihren Bucket über die Google Cloud Console aufrufen.
  • Wenn bei Ihrer Arbeitslast der Fehler TooManyRequests auftritt und die Fehlermeldung das Stichwort dataflux-composed-objects 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 Verwendung im großen Maßstab reduziert werden.

Arbeitsspeicherverbrauch

Prüfpunkt-Schreib- 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 Prüfpunkt im Arbeitsspeicher zu speichern, damit diese Leistungsverbesserungen genutzt werden können.

Support anfordern

Über die offiziellen Supportkanäle vonGoogle Cloud 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.