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 mit PyTorch bietet.

Übersicht

Connector for PyTorch bietet Vorteile sowohl beim Laden von Daten beim Training als auch beim Speichern von Checkpoints und Laden von Modellen:

Der Connector für PyTorch bietet beim Laden von Daten für das Training folgende Vorteile:

  • Der Connector für PyTorch enthält Optimierungen, die das Training in Datasets, die hauptsächlich aus Dateien mit einer Größe von weniger als 1 MB bestehen, bis zu dreimal schneller als bei der Standardversion von PyTorch machen.
  • Der Connector für PyTorch implementiert das Dataset-Primitive von PyTorch, mit dem sich Trainingsdaten effizient aus Cloud Storage-Buckets laden lassen.
  • 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 Rohbyte-Daten in das gewünschte Format umzuwandeln, sodass der PyTorch DataLoader flexibel mit NumPy-Arrays oder PyTorch-Tensoren arbeiten kann.

Connector for PyTorch bietet beim Checkpointing und Modellladen folgende Vorteile:

  • Eine Benutzeroberfläche für das Speichern von Modellprüfpunkten in einem Cloud Storage-Bucket und das Laden von Modellprüfpunkten aus dem Bucket.
  • Der Connector for PyTorch unterstützt das PyTorch Lightning-Prüfpunkt-Management. Dazu wird die DatafluxLightningCheckpoint-Implementierung von CheckpointIO von PyTorch Lightning verwendet.
  • Connector for PyTorch bietet StorageWriter- und StorageReader-Implementierungen für die 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 Connector-Checkpointing unterstützt sowohl synchrone als auch asynchrone Checkpoint-Speicherungen mit Lightning und der Basisversion von PyTorch.

Weitere Informationen finden Sie auf der GitHub-Startseite des PyTorch-Connectors.

Frameworks

Connector for PyTorch wird von den 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 for PyTorch benötigen Sie Folgendes:

  • Einen Cloud Storage-Bucket mit den Daten, mit denen Sie arbeiten möchten.
  • Die folgenden Berechtigungen für die Arbeit mit den im Bucket gespeicherten Daten:
    • 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 gewährt werden, das der Connector für PyTorch zur Authentifizierung verwendet. Verwenden Sie dazu eine IAM-Rolle wie Storage Object User.

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 mit Standardanmeldedaten für Anwendungen muss eine Authentifizierung über eine der folgenden Methoden erfolgen:

  • Wenn Sie den Connector für PyTorch auf einer Compute Engine-VM ausführen, werden für die Standardanmeldedaten für Anwendungen standardmäßig automatisch das angehängte Dienstkonto 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 Sammlung von Beispielen zur Verwendung des Connectors for PyTorch finden Sie im Demoverzeichnis des GitHub-Repositories für Connector for PyTorch. Hier einige Beispiele:

Leistung

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

  • Zur Optimierung der Listenleistung verwendet der Connector für PyTorch einen Algorithmus für schnelle Listen, der die Listenauslastung auf parallele Prozesse zum Erstellen von Objektlisten verteilt.
  • Um die Downloadleistung kleiner Dateien zu optimieren, verwendet der Connector for PyTorch den Zusammensetzungsvorgang, um mehrere kleinere Objekte zu einzelnen, größeren Objekten zusammenzuführen. Diese neuen zusammengesetzten Objekte werden im selben Bucket wie die Quellobjekte gespeichert und haben das Präfix dataflux-composed-objects/ im Namen.
  • Der mehrteilige Upload für das Schreiben von Checkpoints ermöglicht eine bis zu 10-fache Leistungssteigerung gegenüber dem standardmäßigen Checkpoint-Upload.

Auf GitHub finden Sie Leistungsdaten zu folgenden Themen:

  • Textbasierte Schulung für Lightning
  • Lightning Image Training
  • Prüfpunktausführung mit einem einzelnen Knoten
  • Mehrere Knoten für Checkpoints verwenden

Hinweise

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

Schnelle Listenvorgänge

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

Verwendung zusammengesetzter Objekte

Um bei der Arbeit mit temporären zusammengesetzten Objekten übermäßige Speicherkosten und Gebühren für vorzeitiges Löschen zu vermeiden, sollten Sie für Ihren Bucket die folgenden Einstellungen verwenden:

Vom Connector for PyTorch erstellte zusammengesetzte Objekte werden normalerweise am Ende des Trainingsloops automatisch entfernt. In seltenen Fällen ist das jedoch nicht der Fall. Um sicherzustellen, dass die Objekte aus Ihrem Bucket entfernt werden, können Sie den folgenden Befehl ausführen:

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 Konfigurationsteil des zu erstellenden Datensatzes einfügen. Wenn Sie dieses Verhalten jedoch deaktivieren, kann das Training deutlich länger dauern, insbesondere bei der Arbeit mit kleinen Dateien.

Wenn Sie zusammengesetzte Objekte verwenden, werden die Limits für die Abfragerate pro Sekunde und den Durchsatz in Cloud Storage schneller erreicht als beim direkten Herunterladen von Dateien. Sie sollten die Verwendung von zusammengesetzten Objekten deaktivieren, wenn Sie mit vielen Knoten arbeiten und die QPS- oder Durchsatzlimits des Projekts auch ohne zusammengesetzte Objekte erreichen.

429-Fehler und Leistungseinbußen

Wenn Sie mit dem Connector for PyTorch arbeiten, erhalten Sie möglicherweise 429-Fehler oder die Ausführung dauert länger als erwartet. Dafür gibt es mehrere häufige Gründe:

  • Bei vielen Projekten für maschinelles Lernen wird ein hochgradig verteiltes Trainingsmodell mit Tools wie PyTorch Lightning und Ray verwendet. Diese Modelle sind mit dem Connector für PyTorch kompatibel, können aber häufig die Ratenlimits von Cloud Storage auslösen.
  • 429-Fehler, die von Meldungen wie „Diese Arbeitslast beansprucht zu viel ausgehende Bandbreite von Cloud Storage“ oder „Diese Arbeitslast hat die ausgehende Bandbreitenobergrenze von Cloud Storage ausgelöst“ begleitet werden, weisen darauf hin, dass die Durchsatzrate Ihrer Arbeitslast die maximale Kapazität Ihres Google Cloud-Projekts überschreitet. So beheben Sie diese Probleme:
  • Grenzwerte für die Abfragerate pro Sekunde können 429-Fehler mit der Meldung TooManyRequests im Textkörper auslösen. Häufiger treten jedoch Ausführungszeiten auf, die länger als erwartet sind. Engpässe bei der Abfragerate sind häufiger, wenn mit einer großen Anzahl kleiner Dateien gearbeitet wird. Die Limits für die Anfragen pro Sekunde eines Buckets skalieren mit der Zeit natürlich. Eine Aufwärmphase kann daher oft zu einer besseren Leistung führen. Weitere Informationen zur Leistung eines Ziel-Buckets finden Sie auf dem Tab „Beobachtbarkeit“, wenn Sie sich den Bucket in der Google Cloud Console ansehen.
  • Wenn bei Ihrer Arbeitslast ein TooManyRequests-Fehler auftritt, der das Keyword dataflux-composed-objects enthält, sollten Sie als ersten Schritt zur Fehlerbehebung die Verwendung zusammengesetzter Objekte deaktivieren. So lässt sich die durch Zusammenstellungsvorgänge verursachte QPS-Last bei der Verwendung in großem Umfang reduzieren.

Arbeitsspeicherverbrauch

Das Schreiben und Laden von Checkpoints, einschließlich der endgültigen Modelle für die Inferenz, wird vollständig im Arbeitsspeicher ausgeführt, um die Upload- und Downloadleistung zu optimieren. Auf jedem Computer muss genügend freier RAM vorhanden sein, um den Checkpoint im Arbeitsspeicher zu platzieren, damit diese Leistungsverbesserungen genutzt werden können.

Support kontaktieren

Ü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.