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 vonCheckpointIO
von PyTorch Lightning. - Connector for PyTorch bietet
StorageWriter
- undStorageReader
-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.
- Weitere empfohlene Einstellungen für den Bucket finden Sie unter Verwendung zusammengesetzter Objekte.
- 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:
- Ein einfaches Jupyter-Notebook für den Einstieg (gehostet von Google Colab).
- End-to-End-Anleitung für eine Trainingsarbeitslast zur Bildsegmentierung
- End-to-End-Beispiel und Notebook für die PyTorch Lightning-Integration
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:
- Vorläufiges Löschen deaktiviert
- Bucket-Sperre deaktiviert
- Objektversionierung deaktiviert
- Standard-Speicher als Speicherklasse für den Bucket und die Objekte.
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:
- Prüfen Sie, ob andere Arbeitslasten in Ihrem Projekt übermäßig viel Bandbreite beanspruchen.
- Kontingenterhöhung beantragen
- Passen Sie die Optionen
list_retry_config
unddownload_retry_config
im Konfigurationsabschnitt der Datasets an, die Sie erstellen, um den exponentiellen Backoff für Wiederholungsversuche zu optimieren und die Leistung zu maximieren.
- 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 Keyworddataflux-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.