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 vonCheckpointIOvon PyTorch Lightning. - Connector for PyTorch bietet
StorageWriter- undStorageReader-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.
- 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.createstorage.objects.liststorage.objects.getstorage.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:
- Ein einfaches Jupyter-Notebook für den Einstieg (gehostet von Google Colab).
- Schritt-für-Schritt-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 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:
- Vorläufiges Löschen deaktiviert
- Bucket-Sperre deaktiviert
- Objektversionsverwaltung deaktiviert
- Standard Storage als Speicherklasse für den Bucket und die Objekte.
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:
- Prüfen Sie, ob andere Arbeitslasten in Ihrem Projekt übermäßig viel Bandbreite nutzen.
- Beantragen Sie eine Kontingenterhöhung.
- Passen Sie die Optionen
list_retry_configunddownload_retry_configim Konfigurationsabschnitt der Datasets an, die Sie erstellen, um den exponentiellen Backoff für Wiederholungsversuche zu optimieren und die Leistung zu maximieren.
- QPS-Grenzwerte können 429-Fehler mit einer Meldung im Antworttext auslösen, die
TooManyRequestsangibt. 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
TooManyRequestsauftritt und die Fehlermeldung das Stichwortdataflux-composed-objectsenthä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.