In dieser Anleitung erfahren Sie, wie Sie die Leistung des Cloud Storage FUSE CSI-Treibers in der Google Kubernetes Engine (GKE) optimieren.
Cloud Storage FUSE bietet zwar Flexibilität und Skalierbarkeit, aber eine sorgfältige Konfiguration und Optimierung ist entscheidend, um eine optimale Leistung zu erzielen. Die Leistung von Cloud Storage FUSE kann sich in Bezug auf Latenz, Durchsatz und Konsistenz von einem POSIX-Dateisystem unterscheiden. Ziel der Optimierung ist es, den Overhead von Metadatenoperationen zu minimieren und die Effizienz des Datenzugriffs zu maximieren. Wenn Sie KI/ML-Anwendungen ausführen, die Daten in Cloud Storage-Buckets verbrauchen, kann die Optimierung des CSI-Treibers zu kürzeren Trainings- und Inferenzzeiten für Ihre KI/ML-Anwendungen führen.
Dieser Leitfaden richtet sich an Entwickler und Machine-Learning-Entwickler, die die Leistung ihrer Anwendungen verbessern möchten, die auf in Cloud Storage-Buckets gespeicherte Daten zugreifen.
Bevor Sie diese Seite lesen, sollten Sie mit den Grundlagen von Cloud Storage, Kubernetes und dem CSI-Treiber für Cloud Storage FUSE vertraut sein. Lesen Sie sich auch die Anforderungen an die GKE-Version für die gewünschten Funktionen durch.
Bereitstellungsoptionen konfigurieren
Der Cloud Storage FUSE CSI-Treiber unterstützt Bereitstellungsoptionen, um zu konfigurieren, wie Cloud Storage-Buckets in Ihrem lokalen Dateisystem bereitgestellt werden. Eine vollständige Liste der unterstützten Bereitstellungsoptionen finden Sie in der Dokumentation zur Cloud Storage FUSE-Befehlsdatei.
Je nach Volumetyp können Sie Bereitstellungsoptionen auf folgende Weise angeben:
Sitzungsspezifisches CSI-Volume
Wenn Sie sitzungsspezifische CSI-Volumes verwenden, geben Sie die Bereitstellungsoptionen im Feld spec.volumes[n].csi.volumeAttributes.mountOptions
Ihres Pod-Manifests an.
Sie müssen die Bereitstellungsoptionen als String angeben, wobei die Flags durch Kommas getrennt und ohne Leerzeichen angegeben werden. Beispiel:
mountOptions: "implicit-dirs,file-cache:enable-parallel-downloads:true,file-cache:download-chunk-size-mb:3"
Nichtflüchtiges Volume
Wenn Sie nichtflüchtige Volumes verwenden, geben Sie die Bereitstellungsoptionen im Feld spec.mountOptions
in Ihrem PersistentVolume-Manifest an.
Sie müssen die Bereitstellungsoptionen als Liste angeben. Beispiel:
mountOptions:
- implicit-dirs
- file-cache:enable-parallel-downloads:true
- file-cache:download-chunk-size-mb:3
Hinweise zum Bereitstellen
Beachten Sie beim Konfigurieren von Bereitstellungen mit dem CSI-Treiber die folgenden Hinweise:
Allgemeines
- Die folgenden Flags sind nicht zulässig:
app-name
,temp-dir
,foreground
,log-file
,log-format
,key-file
,token-url
undreuse-token-from-url
. - Cloud Storage FUSE macht die impliziten Verzeichnisse nicht standardmäßig sichtbar.
- Wenn Sie nur ein Verzeichnis im Bucket und nicht den gesamten Bucket bereitstellen möchten, übergeben Sie das Verzeichnis mit dem relativen Pfad mit dem Flag
only-dir=relative/path/to/the/bucket/root
.
Sicherheit und Berechtigungen
- Wenn Sie einen Sicherheitskontext für Ihren Pod oder Container verwenden oder wenn Ihr Container-Image einen Nicht-Root-Nutzer oder eine Gruppe verwendet, müssen Sie die Bereitstellungs-Flags
uid
undgid
festlegen. Außerdem müssen Sie die Bereitstellungs-Flagsfile-mode
unddir-mode
verwenden, um die Dateisystemberechtigungen festzulegen. Beachten Sie, dass Sie die Befehlechmod
,chown
oderchgrp
nicht für ein Cloud Storage FUSE-Dateisystem ausführen können. Daher sind die Bereitstellungs-Flagsuid
,gid
,file-mode
unddir-mode
erforderlich, um Zugriff für einen Nutzer oder eine Gruppe von Root-Nutzern zu gewähren.
Bereitstellungsoptionen für den Linux-Kernel
- Wenn Sie die Linux-Kernel-Bereitstellungsoptionen konfigurieren müssen, können Sie die Optionen über das Flag
o
übergeben. Wenn Sie beispielsweise keine direkte Ausführung von Binärdateien im bereitgestellten Dateisystem zulassen möchten, legen Sie das Flago=noexec
fest. Für jede Option ist ein separates Flag erforderlich, z. B.o=noexec
,o=noatime
. Nur die folgenden Optionen sind zulässig:exec
,noexec
,atime
,noatime
,sync
,async
unddirsync
.
Caching konfigurieren
In diesem Abschnitt finden Sie einen Überblick über die Caching-Optionen, die mit dem CSI-Treiber für Cloud Storage FUSE zur Leistungssteigerung verfügbar sind.
Datei-Caching
Sie können den Cloud Storage FUSE CSI-Treiber mit Datei-Caching verwenden, um die Leseleistung von Anwendungen zu verbessern, die kleine Dateien aus Cloud Storage-Buckets verarbeiten. Das Datei-Cache-Feature von Cloud Storage FUSE ist ein clientbasierter Lese-Cache, mit dem Dateilesevorgänge wiederholt werden können, um sie schneller von einem Cache-Speicher Ihrer Wahl bereitzustellen.
Je nach Preis-Leistungs-Anforderung können Sie aus einer Reihe von Speicheroptionen für den Lesecache auswählen, darunter lokale SSDs, nichtflüchtiger Speicher und RAM-Speicher (Speicher).
Datei-Caching aktivieren und verwenden
Die Datei-Caching-Funktion ist in GKE standardmäßig deaktiviert. Sie müssen das Datei-Caching mit dem CSI-Treiber für Cloud Storage FUSE aktivieren.
Wenn Sie das Datei-Caching aktivieren und steuern möchten, setzen Sie das Volume-Attribut fileCacheCapacity
oder verwenden Sie die Bereitstellungsoption file-cache:max-size-mb
.
GKE verwendet standardmäßig ein emptyDir
-Volume für das Cloud Storage FUSE-Dateicaching, das vom sitzungsspezifischen Speicher unterstützt wird, der auf dem Knoten konfiguriert ist. Dies kann das am Knoten angeschlossene Bootlaufwerk oder ein lokales SSD auf dem Knoten sein. Wenn Sie Local SSD auf dem Knoten aktivieren, verwendet GKE die lokale SSD, um das emptyDir
-Volume zu unterstützen.
Sie können ein benutzerdefiniertes Lese-Cache-Volume für den Sidecar-Container konfigurieren, um das Standard-emptyDir
-Volume für das Datei-Caching bei Lesevorgängen zu ersetzen.
Weitere Informationen zu Best Practices für das Datei-Caching finden Sie unter Cloud Storage FUSE-Leistung.
Speicher für die Sicherung des Dateicaches auswählen
Beachten Sie die folgenden Punkte, um den Speicher für die Sicherung Ihres Dateicaches auszuwählen:
Für GPU- und CPU-VM-Familien, die lokale SSDs unterstützen (z. B. A3-VMs), empfehlen wir die Verwendung lokaler SSDs.
- Für A3- und höherwertige VMs richtet GKE automatisch lokale SSDs für Ihre Pods ein.
- Wenn Ihre VM-Familie lokale SSDs nicht unterstützt, verwendet GKE das Bootlaufwerk für das Caching. Der Standardlaufwerktyp für das Bootlaufwerk in GKE ist
pd-balanced
. Wenn Ihre VM-Familie lokale SSDs unterstützt, der sitzungsspezifische Speicher auf lokalen SSDs aber nicht standardmäßig aktiviert ist, können Sie lokale SSDs in Ihrem Knotenpool aktivieren. Das gilt für Maschinenfamilien der ersten und zweiten Generation, z. B. N1- und N2-Maschinen. Weitere Informationen finden Sie unter Cluster mit lokalen SSDs erstellen.
Führen Sie den folgenden Befehl aus, um zu prüfen, ob für Ihren Knoten sitzungsspezifischer Speicher auf dem lokalen SSD aktiviert ist:
kubectl describe node <code><var>NODE_NAME</var></code> | grep "cloud.google.com/gke-ephemeral-storage-local-ssd"
Für TPU-VM-Familien, insbesondere Version 6 und höher, empfehlen wir die Verwendung von RAM als Dateicache, um die beste Leistung zu erzielen, da diese VM-Instanzen mehr RAM haben.
- Achten Sie bei der Verwendung von RAM auf Fehler aufgrund von unzureichendem Arbeitsspeicher, da diese zu Pod-Unterbrechungen führen. Cloud Storage FUSE verbraucht Arbeitsspeicher. Wenn Sie also einen Dateicache einrichten, um den Sidecar-Container zu nutzen, kann dies zu OOM-Fehlern führen. Um solche Szenarien zu vermeiden, passen Sie das Feld
file-cache:max-size-mb
in der Dateicache-Konfiguration auf einen kleineren Wert an. - Für andere TPU-Familien empfehlen wir
pd-balanced
oderpd-ssd
. Der Standardlaufwerktyp für das Bootlaufwerk in GKE istpd-balanced
.
- Achten Sie bei der Verwendung von RAM auf Fehler aufgrund von unzureichendem Arbeitsspeicher, da diese zu Pod-Unterbrechungen führen. Cloud Storage FUSE verbraucht Arbeitsspeicher. Wenn Sie also einen Dateicache einrichten, um den Sidecar-Container zu nutzen, kann dies zu OOM-Fehlern führen. Um solche Szenarien zu vermeiden, passen Sie das Feld
Verwenden Sie das Bootlaufwerk nicht für das Caching, da dies zu Leistungseinbußen und unerwarteten Abstürzen führen kann. Verwenden Sie stattdessen ein PersistentVolume, das von einem nichtflüchtigen Speicher unterstützt wird.
RAM-Disk-basiertes Datei-Caching verwenden
Sie können ein RAM-Laufwerk für das Datei-Caching oder den parallelen Download verwenden, um den Overhead der Verwendung eines Bootlaufwerks oder eines nichtflüchtigen Laufwerks zu reduzieren, wenn Sie eine TPU-VM mit ausreichend großem RAM verwenden.
Wenn Sie ein RAM-Laufwerk mit dem Cloud Storage FUSE CSI-Treiber verwenden möchten, fügen Sie Ihrem Manifest Folgendes hinzu:
volumes:
- name: gke-gcsfuse-cache
emptyDir:
medium: Memory
Statistik-Cache
Der Cloud Storage FUSE CSI-Treiber verbessert die Leistung, indem Dateimetadaten wie Größe und Änderungszeit im Cache gespeichert werden. Der CSI-Treiber aktiviert diesen Stat-Cache standardmäßig und reduziert die Latenz, indem Informationen lokal gespeichert werden, anstatt sie wiederholt aus Cloud Storage anzufordern. Sie können die maximale Größe (Standard: 32 MB) und die Dauer des Verbleibs der Daten im Cache (Standard: 60 Sekunden) konfigurieren. Durch die Optimierung des Metadaten-Caches können Sie API-Aufrufe an Cloud Storage reduzieren, um die Anwendungsleistung und -effizienz zu verbessern, indem Sie den Netzwerkverkehr und die Latenz minimieren.
Weitere Informationen zu Best Practices für das Stat-Caching finden Sie unter Cloud Storage FUSE-Caching – Übersicht.
Metadaten-Prefetch verwenden, um den Metadaten-Cache vorab zu füllen
Mit der Funktion zum Vorabladen von Metadaten kann der CSI-Treiber für Cloud Storage FUSE relevante Metadaten zu den Objekten in Ihrem Cloud Storage-Bucket proaktiv in Cloud Storage FUSE-Caches laden. Dieser Ansatz reduziert die Aufrufe von Cloud Storage und ist besonders vorteilhaft für Anwendungen, die auf große Datensätze mit vielen Dateien zugreifen, z. B. KI-/ML-Trainingsarbeitslasten.
Für diese Funktion ist die GKE-Version 1.31.3-gke.1162000 oder höher erforderlich.
Wenn Sie Leistungssteigerungen durch den Metadaten-Prefetch erzielen möchten, müssen Sie die Gültigkeitsdauer (TTL) der Metadaten-Cache-Elemente auf „unbegrenzt“ festlegen. In der Regel verhindert die Einstellung einer TTL, dass zwischengespeicherte Inhalte veraltet werden. Wenn Sie die TTL auf „unbegrenzt“ festlegen, müssen Sie darauf achten, den Inhalt des Buckets nicht außerhalb des Bandes zu ändern, d. h., Sie dürfen nicht zulassen, dass eine andere Arbeitslast oder ein anderer Akteur die Arbeitslast ändert. Out-of-Band-Änderungen sind lokal nicht sichtbar und können zu Konsistenzproblemen führen.
Wenn Sie das Vorabladen von Metadaten aktivieren möchten, nehmen Sie die folgenden Konfigurationsänderungen vor: Wir empfehlen, diese Funktion für Volumes zu aktivieren, die häufig gelesen werden.
- Legen Sie das Lautstärkeattribut
gcsfuseMetadataPrefetchOnMount: true
fest. - Aktualisieren Sie die folgenden Bereitstellungsoptionen:
metadata-cache:stat-cache-max-size-mb:-1
, um das Limit für die Kapazität des Statistik-Caches zurückzusetzen.metadata-cache:type-cache-max-size-mb:-1
, um das Kapazitätslimit für den Typ-Cache zurückzusetzen.file-system:kernel-list-cache-ttl-secs:-1
, um zu verhindern, dass Kernel-Listen-Cache-Elemente ablaufen.metadata-cache:ttl-secs:-1
, um zu verhindern, dass im Cache gespeicherte Metadatenelemente ablaufen.
Ein Beispiel finden Sie im Codebeispiel unter Leseleistung bei großen Dateien durch parallelen Download verbessern.
Listencache
Um Verzeichniseinträge für Anwendungen zu beschleunigen, können Sie das Listen-Caching aktivieren. Mit dieser Funktion werden Verzeichnislisten im Arbeitsspeicher gespeichert, damit wiederholte Anfragen schneller verarbeitet werden können. Der Listen-Cache ist standardmäßig deaktiviert. Sie können ihn aktivieren, indem Sie den Parameter kernel-list-cache-ttl-secs
in den Bereitstellungsoptionen festlegen. Damit wird festgelegt, wie lange Einträge im Cache gespeichert werden.
Leseleistung bei großen Dateien durch parallelen Download verbessern
Mit dem parallelen Download von Cloud Storage FUSE können Sie das Lesen großer Dateien aus Cloud Storage für Downloads mit mehreren Threads beschleunigen. Der parallele Download mit Cloud Storage FUSE kann sich besonders bei Anwendungsfällen mit Lesevorgängen von mehr als 1 GB auszahlen.
Beispiele:
- Modellbereitstellung, bei der ein großer Prefetch-Zwischenspeicher erforderlich ist, um den Modelldownload beim Starten der Instanz zu beschleunigen.
- Wiederherstellung von Checkpoints, bei der Sie einen Lesezugriffs-Datencache benötigen, um den einmaligen Zugriff auf mehrere große Dateien zu verbessern.
Verwenden Sie den parallelen Download für Anwendungen, die große Dateien mit nur einem Thread lesen. Bei Anwendungen mit hoher Leseparallelität (mehr als acht Threads) kann es mit dieser Funktion zu einer geringeren Leistung kommen.
So verwenden Sie den parallelen Download mit dem Cloud Storage FUSE CSI-Treiber:
Erstellen Sie einen Cluster mit aktiviertem Datei-Caching, wie unter Datei-Caching aktivieren und verwenden beschrieben.
Konfigurieren Sie in Ihrem Manifest mithilfe von Bereitstellungsoptionen diese zusätzlichen Einstellungen, um den parallelen Download zu ermöglichen:
- Legen Sie
file-cache:enable-parallel-downloads:true
fest. - Passen Sie
file-cache:parallel-downloads-per-file
,file-cache:parallel-downloads-per-file
,file-cache:max-parallel-downloads
undfile-cache:download-chunk-size-mb
nach Bedarf an.
- Legen Sie
Optional: Passen Sie bei Bedarf die folgenden Lautstärkeattribute an:
file-cache:cache-file-for-range-read
für zufällige oder teilweise Lesevorgänge.metadata-cache:stat-cache-max-size-mb
undmetadata-cache:type-cache-max-size-mb
für Trainingsarbeitslasten.
Kontingentverbrauch durch Zugriffssteuerungsüberprüfungen reduzieren
Standardmäßig führt der CSI-Treiber Zugriffssteuerungsüberprüfungen durch, um sicherzustellen, dass das Pod-Dienstkonto Zugriff auf Ihre Cloud Storage-Buckets hat. Dies führt zu zusätzlichem Overhead in Form von Kubernetes Service API, Security Token Service und IAM-Aufrufen. Ab der GKE-Version 1.29.9-gke.1251000 können Sie das Volume-Attribut skipCSIBucketAccessCheck
verwenden, um solche redundanten Prüfungen zu überspringen und den Kontingentverbrauch zu reduzieren.
Beispiel für die Inferenzauslieferung
Im folgenden Beispiel wird gezeigt, wie Sie den parallelen Download für die Inferenzbereitstellung aktivieren:
Erstellen Sie ein Manifest für PersistentVolume und PersistentVolumeClaim mit der folgenden Spezifikation:
apiVersion: v1 kind: PersistentVolume metadata: name: serving-bucket-pv spec: accessModes: - ReadWriteMany capacity: storage: 64Gi persistentVolumeReclaimPolicy: Retain storageClassName: example-storage-class claimRef: namespace: NAMESPACE name: serving-bucket-pvc mountOptions: - implicit-dirs #avoid if list cache enabled and doing metadata prefetch - metadata-cache:ttl-secs:-1 - metadata-cache:stat-cache-max-size-mb:-1 - metadata-cache:type-cache-max-size-mb:-1 - file-cache:max-size-mb:-1 - file-cache:cache-file-for-range-read:true - file-system:kernel-list-cache-ttl-secs:-1 - file-cache:enable-parallel-downloads:true csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME volumeAttributes: skipCSIBucketAccessCheck: "true" gcsfuseMetadataPrefetchOnMount: "true" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: serving-bucket-pvc namespace: NAMESPACE spec: accessModes: - ReadWriteMany resources: requests: storage: 64Gi volumeName: serving-bucket-pv storageClassName: example-storage-class
Ersetzen Sie die folgenden Werte:
NAMESPACE
: der Kubernetes-Namespace, in dem Sie Ihren Pod bereitstellen möchten.BUCKET_NAME
: den Namen des Cloud Storage-Bucket, den Sie beim Konfigurieren des Zugriffs auf die Cloud Storage-Buckets angegeben haben. Sie können einen Unterstrich (_
) angeben, um alle Buckets bereitzustellen, auf die das Kubernetes-Dienstkonto zugreifen kann. Weitere Informationen finden Sie unter Dynamische Bereitstellung in der Cloud Storage FUSE-Dokumentation.
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f PV_FILE_PATH
Ersetzen Sie
PV_FILE_PATH
durch den Pfad zu Ihrer YAML-Datei.Erstellen Sie ein Pod-Manifest mit der folgenden Spezifikation, um den PersistentVolumeClaim zu verwenden. Dabei hängt es davon ab, ob Sie den Dateicache auf einem lokalen SSD oder auf einem RAM-Laufwerk verwenden:
Lokale SSD
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-pod namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" gke-gcsfuse/cpu-limit: "0" gke-gcsfuse/memory-limit: "0" gke-gcsfuse/ephemeral-storage-limit: "0" spec: containers: # Your workload container spec ... volumeMounts: - name: serving-bucket-vol mountPath: /serving-data readOnly: true serviceAccountName: KSA_NAME volumes: - name: serving-bucket-vol persistentVolumeClaim: claimName: serving-bucket-pvc
RAM-Laufwerk
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-pod namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" gke-gcsfuse/cpu-limit: "0" gke-gcsfuse/memory-limit: "0" gke-gcsfuse/ephemeral-storage-limit: "0" spec: containers: # Your workload container spec ... volumeMounts: - name: serving-bucket-vol mountPath: /serving-data readOnly: true serviceAccountName: KSA_NAME volumes: - name: gke-gcsfuse-cache # gcsfuse file cache backed by RAM Disk emptyDir: medium: Memory - name: serving-bucket-vol persistentVolumeClaim: claimName: serving-bucket-pvc
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f POD_FILE_PATH
Ersetzen Sie
POD_FILE_PATH
durch den Pfad zu Ihrer YAML-Datei.
Volume-Attribute konfigurieren
Mit Volume-Attributen können Sie das Verhalten des CSI-Treibers für Cloud Storage FUSE konfigurieren.
Mit dem Cloud Storage FUSE CSI-Treiber können Sie die Cloud Storage FUSE-Konfigurationsdatei nicht direkt angeben. Sie können einige der Felder in der Konfigurationsdatei mit den Volume-Attributen von Cloud Storage FUSE CSI konfigurieren. Der CSI-Treiber übernimmt die Übersetzung der Werte der Volume-Attribute in die Felder der Konfigurationsdatei.
Eine vollständige Liste der unterstützten Lautstärkeattribute finden Sie in der Referenz zu Lautstärkeattributen.
Sie können die Volume-Attribute auf folgende Weise angeben:
- Im Feld
spec.csi.volumeAttributes
für ein PersistentVolume-Manifest, wenn Sie nichtflüchtige Volumes verwenden. - Im Feld
spec.volumes[n].csi.volumeAttributes
, wenn Sie sitzungsspezifische CSI-Volumes verwenden.
Im Manifest können die Volume-Attribute als Schlüssel/Wert-Paare angegeben werden. Beispiel:
volumeAttributes:
mountOptions: "implicit-dirs"
fileCacheCapacity: "-1"
gcsfuseLoggingSeverity: warning
Cloud Storage FUSE-Messwerte
Die folgenden Cloud Storage FUSE-Messwerte sind jetzt über die GKE Monitoring API verfügbar. Details zu Cloud Storage FUSE-Messwerten wie Labels, Typ und Einheit finden Sie unter GKE-Systemmesswerte. Diese Messwerte sind für jeden Pod verfügbar, der Cloud Storage FUSE verwendet. Sie können Messwerte verwenden, um Statistiken pro Volume und Bucket zu konfigurieren.
Messwerte sind standardmäßig deaktiviert. Wenn Sie sie aktivieren möchten, setzen Sie das LautstärkeattributdisableMetrics
auf „false“.
Dateisystemmesswerte
Mithilfe von Dateisystemmesswerten können Sie die Leistung und den Zustand Ihres Dateisystems erfassen, einschließlich der Anzahl der Vorgänge, Fehler und der Ausführungsgeschwindigkeit. Diese Messwerte können Ihnen helfen, Engpässe zu identifizieren und die Leistung zu optimieren.
gcsfusecsi/fs_ops_count
gcsfusecsi/fs_ops_error_count
gcsfusecsi/fs_ops_latency
Cloud Storage-Messwerte
Sie können Cloud Storage-Messwerte wie Datenvolumen, Geschwindigkeit und Anfrageaktivität überwachen, um zu sehen, wie Ihre Anwendungen mit Cloud Storage-Buckets interagieren. Anhand dieser Daten können Sie Bereiche für Optimierungen identifizieren, z. B. die Verbesserung von Lesemustern oder die Reduzierung der Anzahl von Anfragen.
gcsfusecsi/gcs_download_bytes_count
gcsfusecsi/gcs_read_count
gcsfusecsi/gcs_read_bytes_count
gcsfusecsi/gcs_reader_count
gcsfusecsi/gcs_request_count
gcsfusecsi/gcs_request_latencies
Dateicache-Messwerte
Sie können Datei-Cache-Messwerte wie das Datenlesevolumen, die Geschwindigkeit und die Cache-Trefferquote überwachen, um Cloud Storage FUSE und die Anwendungsleistung zu optimieren. Analysieren Sie diese Messwerte, um Ihre Caching-Strategie zu verbessern und Cache-Treffer zu maximieren.
gcsfusecsi/file_cache_read_bytes_count
gcsfusecsi/file_cache_read_latencies
gcsfusecsi/file_cache_read_count
Best Practices für die Leistungsoptimierung
In diesem Abschnitt finden Sie einige empfohlene Verfahren zur Leistungsoptimierung des CSI-Treibers für Cloud Storage FUSE.
Hierarchical Namespace-Buckets (HNS) verwenden:Mit HNS-Buckets lässt sich die anfängliche Anzahl der Abfragen pro Sekunde (Queries Per Second, QPS) um das Achtfache steigern. Diese Option ermöglicht auch schnelle und atomare Verzeichnisumbenennungen, eine wichtige Voraussetzung für ein effizientes Checkpointing mit Cloud Storage FUSE. HNS-Buckets bieten eine bessere nutzungsfreundliche Dateistruktur, da sie 40.000 Leseanfragen und 8.000 Schreibanfragen pro Sekunde unterstützen. Das ist eine deutliche Verbesserung im Vergleich zu den 8.000 Leseanfragen und 1.000 Schreibanfragen pro Sekunde, die von flachen Buckets angeboten werden.
Bereiten Sie nach Möglichkeit bestimmte Verzeichnisse vor:Wenn Ihre Arbeitslast den Zugriff auf ein bestimmtes Verzeichnis in einem Bucket erfordert, verwenden Sie beim Bereitstellen das Flag
--only-dir
. Dieser fokussierte Ansatz beschleunigt Listenaufrufe, da der Umfang derLookUpInode
-Aufrufe eingeschränkt wird. Bei diesen Aufrufen wird für jede Datei oder jedes Verzeichnis im angegebenen Pfad einlist+stat
-Aufruf ausgeführt. Wenn Sie die Bereitstellung auf das erforderliche Unterverzeichnis beschränken, werden diese Aufrufe minimiert, was zu Leistungssteigerungen führt.Metadaten-Caching optimieren:Konfigurieren Sie Ihre Metadaten-Caches so, dass ihre Kapazität maximiert wird, und legen Sie eine unbegrenzte Gültigkeitsdauer (TTL) fest. Dadurch werden alle abgerufenen Metadaten für die Dauer des Jobs im Cache gespeichert und die Anzahl der Metadatenzugriffsanfragen auf Cloud Storage wird minimiert. Diese Konfiguration ist besonders für Lesezugriffsvolumes von Vorteil, da wiederholte Cloud Storage-Metadatenabfragen vermieden werden. Prüfen Sie jedoch, ob die mit diesen großen Metadaten-Caches verbundene Speichernutzung den Möglichkeiten Ihres Systems entspricht.
GKE-Sidecar-Ressourcen maximieren:Cloud Storage FUSE wird in einem Sidecar-Container in einer GKE-Umgebung ausgeführt. Entfernen Sie Einschränkungen für den CPU- und Arbeitsspeicherverbrauch für den Sidecar-Container, um Ressourcenengpässe zu vermeiden. So kann Cloud Storage FUSE die Ressourcennutzung je nach Arbeitslastanforderungen skalieren, um eine Drosselung zu verhindern und einen optimalen Durchsatz zu gewährleisten.
Metadaten-Cache proaktiv füllen:Aktivieren Sie den Metadaten-Prefetch für den CSI-Treiber. Dadurch werden die Metadaten- und Listencaches effizient gefüllt, Metadatenaufrufe an Cloud Storage minimiert und der erste Durchlauf beschleunigt. Viele ML-Frameworks führen diesen Schritt automatisch aus. Bei benutzerdefiniertem Trainingscode ist er jedoch unbedingt erforderlich. Weitere Informationen finden Sie unter Metadaten-Prefetch verwenden, um den Metadaten-Cache vorab zu füllen.
Dateicache und parallele Downloads verwenden:Aktivieren Sie die Dateicache-Funktion, insbesondere für Trainingsarbeitslasten mit mehreren Epochen, bei denen Daten wiederholt gelesen werden. Der Dateicache speichert häufig aufgerufene Daten im lokalen Speicher (SSD bei A3-Maschinen), wodurch die Leseleistung verbessert wird. Ergänzen Sie dies mit der Funktion für parallele Downloads, insbesondere für Arbeitslasten beim Bereitstellen, um den Download großer Dateien zu beschleunigen, indem sie in kleinere Blöcke aufgeteilt und gleichzeitig heruntergeladen werden.
Knotenpunkte optimieren:Für das Erstellen von Checkpoints mit Cloud Storage FUSE empfehlen wir dringend die Verwendung eines HNS-Buckets. Wenn Sie keinen HNS-Bucket verwenden, legen Sie für den Parameter
rename-dir-limit
einen hohen Wert fest, um die häufig von ML-Frameworks beim Checkpointing verwendeten Verzeichnisumbenennungen zu berücksichtigen. Beachten Sie jedoch, dass das Umbenennen von Verzeichnissen in Nicht-HNS-Buckets möglicherweise nicht atomar ist und länger dauern kann.Listen-Caching aktivieren:Aktivieren Sie das Listen-Caching mit dem Flag
--kernel-list-cache-ttl-secs
, um die Leistung weiter zu verbessern. Mit dieser Funktion werden Verzeichnis- und Dateilisten im Cache gespeichert, wodurch die Geschwindigkeit vonls
-Vorgängen verbessert wird. Das Caching von Listen ist besonders nützlich für Arbeitslasten, die wiederholte vollständige Verzeichniseinträge umfassen, was in KI/ML-Trainingsszenarien häufig vorkommt. Es wird empfohlen, das Listen-Caching mit Lesezugriffs-Bereitstellungen zu verwenden, um die Datenkonsistenz aufrechtzuerhalten.
Nächste Schritte
- Weitere Beispiele für die Verwendung des CSI-Treibers auf GitHub
- Weitere Informationen zu Cloud Storage FUSE