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 vonCheckpointIO
von PyTorch Lightning verwendet. - Connector for PyTorch bietet
StorageWriter
- undStorageReader
-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.
- Weitere empfohlene Einstellungen für den Bucket finden Sie unter Verwendung von zusammengesetzten Objekten.
- 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:
- Ein einfaches Jupyter-Starter-Notebook (von Google Colab gehostet).
- End-to-End-Anleitung für eine Trainingsarbeitslast zur Bildsegmentierung
- End-to-End-Beispiel und Notebook für die PyTorch Lightning-Integration
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:
- Deaktiviert: Vorläufiges Löschen
- Deaktivierte Bucket-Sperre
- Deaktivierte Objektversionierung
- Standardspeicher als Speicherklasse sowohl für den Bucket als auch für die Objekte.
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:
- Prüfen Sie, ob andere Arbeitslasten in Ihrem Projekt nicht zu viel Bandbreite verbrauchen.
- Beantragen Sie eine Kontingenterhöhung.
- Passen Sie die Optionen
list_retry_config
unddownload_retry_config
im Konfigurationsteil der von Ihnen erstellten Datensätze an, um die Wartezeit für den nächsten Versuch zu optimieren und die Leistung zu maximieren.
- 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 Keyworddataflux-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.