In dieser Anleitung erfahren Sie, wie Sie die Leistung des Cloud Storage FUSE-CSI-Treibers in Google Kubernetes Engine (GKE) optimieren.
Cloud Storage FUSE bietet zwar Flexibilität und Skalierbarkeit, aber eine sorgfältige Konfiguration und Optimierung sind 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 Metadatenvorgängen zu minimieren und die Effizienz des Datenzugriffs zu maximieren. Wenn Sie KI/ML-Anwendungen ausführen, die Daten in Cloud Storage-Buckets verwenden, kann die Optimierung des CSI-Treibers zu schnelleren Trainings- und Inferenzzeiten für Ihre KI/ML-Anwendungen führen.
Dieser Leitfaden richtet sich an Entwickler und ML-Entwickler, die die Leistung ihrer Anwendungen verbessern möchten, die auf Daten zugreifen, die in Cloud Storage-Buckets gespeichert sind.
Bevor Sie diese Seite lesen, sollten Sie sich mit den Grundlagen von Cloud Storage, Kubernetes und dem CSI-Treiber für Cloud Storage FUSE vertraut machen. Achten Sie darauf, auch die GKE-Versionsanforderungen für bestimmte Funktionen zu prüfen, die Sie verwenden möchten.
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-Befehlszeile.
Je nach Art des verwendeten Volumes haben Sie folgende Möglichkeiten, Bereitstellungsoptionen anzugeben:
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 Mount-Optionen 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 zur Montage
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. Verwenden Sie daher die Bereitstellungs-Flagsuid
,gid
,file-mode
unddir-mode
, 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, 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 verfügbar sind, um die Leistung zu verbessern.
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 wiederholte Dateilesevorgänge schneller aus einem Cache-Speicher Ihrer Wahl bereitgestellt werden können.
Je nach Ihren Preis-Leistungs-Anforderungen können Sie aus einer Reihe von Speicheroptionen für den Lese-Cache auswählen, darunter lokale SSD, dauerhafter Blockspeicher wie Google Cloud Hyperdisk oder Persistent Disk und RAM-Disk (Arbeitsspeicher).
Datei-Caching aktivieren und verwenden
Das Feature zum Zwischenspeichern von Dateien ist in GKE standardmäßig deaktiviert. Sie müssen das Datei-Caching-Opt-in mit dem CSI-Treiber für Cloud Storage FUSE auswählen.
Um das Datei-Caching zu aktivieren und zu steuern, legen Sie das Volume-Attribut fileCacheCapacity
fest oder verwenden Sie die Bereitstellungsoption file-cache:max-size-mb
.
Standardmäßig verwendet GKE ein emptyDir
-Volume für das Dateicaching von Cloud Storage FUSE, das durch den auf dem Knoten konfigurierten sitzungsspezifischen Speicher unterstützt wird. Das kann das Bootlaufwerk sein, das an den Knoten angehängt ist, oder eine lokale SSD auf dem Knoten. Wenn Sie Lokale SSD auf dem Knoten aktivieren, verwendet GKE die lokale SSD zur Unterstützung des emptyDir
-Volumes.
Sie können ein benutzerdefiniertes Lese-Cache-Volume für den Sidecar-Container konfigurieren, um das Standard-Volume emptyDir
für das Datei-Caching bei Lesevorgängen zu ersetzen.
Weitere Informationen zu Best Practices für das Dateicaching finden Sie unter Cloud Storage FUSE-Leistung.
Speicher zum Sichern des Dateicache auswählen
Beachten Sie die folgenden Punkte, wenn Sie den Speicher für das Sichern Ihres Dateicache auswählen:
Für GPU- und CPU-VM-Familien, die lokale SSD unterstützen (z. B. A3-VMs), empfehlen wir die Verwendung lokaler SSDs.
- Bei A3+-VMs richtet GKE automatisch eine lokale SSD für Ihre Pods ein.
- Wenn Ihre VM-Familie keine lokale SSD 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. Dies gilt für Maschinenfamilien der ersten und zweiten Generation wie N1- und N2-Maschinen. Weitere Informationen finden Sie unter Cluster mit lokaler SSD erstellen.
Führen Sie den folgenden Befehl aus, um zu prüfen, ob auf Ihrem Knoten sitzungsspezifischer Speicher auf lokalen SSDs 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 v6+, empfehlen wir, RAM als Dateicache zu verwenden, um die beste Leistung zu erzielen, da diese VM-Instanzen über einen größeren RAM verfügen.
- Achten Sie bei der Verwendung von RAM auf Fehler aufgrund von unzureichendem Speicherplatz, da diese zu Pod-Unterbrechungen führen. Cloud Storage FUSE verbraucht Arbeitsspeicher. Wenn Sie also einen Datei-Cache einrichten, der den Sidecar-Container nutzt, kann dies zu OOM-Fehlern führen. Um solche Szenarien zu vermeiden, passen Sie das Feld
file-cache:max-size-mb
in der Konfiguration des Dateicache an einen kleineren Wert an. - Für andere TPU-Familien empfehlen wir die Verwendung von
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 Speicherplatz, da diese zu Pod-Unterbrechungen führen. Cloud Storage FUSE verbraucht Arbeitsspeicher. Wenn Sie also einen Datei-Cache einrichten, der den Sidecar-Container nutzt, kann dies zu OOM-Fehlern führen. Um solche Szenarien zu vermeiden, passen Sie das Feld
Vermeiden Sie die Verwendung der Bootdisk für das Caching, da dies zu Leistungseinbußen und unerwarteten Beendigungen führen kann. Verwenden Sie stattdessen ein PersistentVolume, das von langlebigem Blockspeicher unterstützt wird.
Datei-Caching auf RAM-Disk verwenden
Sie können eine RAM-Festplatte für das Zwischenspeichern von Dateien oder für parallele Downloads verwenden, um den Overhead der Verwendung eines Bootlaufwerks zu reduzieren, wenn Sie eine TPU-VM mit ausreichend großem RAM verwenden.
Wenn Sie eine RAM-Festplatte 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 durch das Cachen von Dateimetadaten wie Größe und Änderungszeit. Der CSI-Treiber aktiviert diesen Stat-Cache standardmäßig und reduziert die Latenz, indem er Informationen lokal speichert, anstatt sie wiederholt von Cloud Storage anzufordern. Sie können die maximale Größe (Standard: 32 MB) und die Dauer, für die die Daten im Cache bleiben (Standard: 60 Sekunden), konfigurieren. Durch die Feinabstimmung des Metadatencaches können Sie API-Aufrufe an Cloud Storage reduzieren, um die Anwendungsleistung und ‑effizienz zu verbessern, indem Sie den Netzwerk-Traffic und die Latenz minimieren.
Weitere Informationen zu Best Practices für das Stat-Caching finden Sie in der Übersicht zum Cloud Storage FUSE-Caching.
Metadaten-Prefetching verwenden, um den Metadatencache vorab zu füllen
Mit der Funktion zum Vorabrufen von Metadaten kann der CSI-Treiber für Cloud Storage FUSE proaktiv relevante Metadaten zu den Objekten in Ihrem Cloud Storage-Bucket 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 Datasets mit vielen Dateien zugreifen, z. B. KI-/ML-Trainingsarbeitslasten.
Für dieses Feature ist die GKE-Version 1.32.1-gke.1357001 oder höher erforderlich. Diese Funktion wird nicht für die dynamische Bereitstellung unterstützt, bei der Sie einen Unterstrich (_) angeben, um alle Buckets bereitzustellen, auf die das Kubernetes-Dienstkonto zugreifen kann. Wenn Sie dynamisches Einbinden verwenden, wird kein Metadaten-Prefetching durchgeführt.
Damit Sie von der Vorabruf-Funktion für Metadaten profitieren, müssen Sie den TTL-Wert (Time to Live, Gültigkeitsdauer) von Metadaten-Cache-Elementen auf „unbegrenzt“ festlegen. Durch das Festlegen einer TTL wird in der Regel verhindert, dass zwischengespeicherte Inhalte veralten. Wenn Sie die TTL auf „unbegrenzt“ festlegen, müssen Sie Vorkehrungen treffen, um die Inhalte des Buckets nicht out-of-band zu ändern. Das bedeutet, dass Sie nicht zulassen dürfen, dass eine andere Arbeitslast oder ein anderer Akteur die Arbeitslast ändert. Out-of-Band-Änderungen sind lokal nicht sichtbar und können zu Inkonsistenzen führen.
Wenn Sie das Vorabrufen von Metadaten aktivieren möchten, nehmen Sie die folgenden Änderungen an der Konfiguration 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 Kapazitätslimit für den Statistik-Cache aufzuheben.metadata-cache:type-cache-max-size-mb:-1
, um das Kapazitätslimit für den Typ-Cache aufzuheben.file-system:kernel-list-cache-ttl-secs:-1
, um zu verhindern, dass Cache-Elemente der Kernelliste ablaufen.metadata-cache:ttl-secs:-1
, um zu verhindern, dass im Cache gespeicherte Metadatenelemente ablaufen.
Ein Beispiel finden Sie im Codebeispiel unter Leseleistung großer Dateien mit parallelem Download verbessern.
Cache auflisten
Um die Verzeichnisauflistung für Anwendungen zu beschleunigen, können Sie das Listen-Caching aktivieren. Bei dieser Funktion werden Verzeichniseinträge im Arbeitsspeicher gespeichert, damit wiederholte Anfragen schneller bearbeitet 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 Mount-Optionen festlegen. Damit wird festgelegt, wie lange Einträge im Cache gespeichert werden.
Leseleistung großer Dateien mit parallelen Downloads 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.
Für parallele Downloads muss der Dateicache aktiviert sein. Ab der GKE-Version 1.32.0-gke.1795000 wird diese Anforderung von Cloud Storage FUSE streng durchgesetzt und es wird der folgende Fehler ausgegeben, wenn Sie versuchen, parallele Downloads ohne den Datei-Cache zu verwenden, wodurch verhindert wird, dass Ihr Pod gestartet wird: MountVolume.SetUp failed for volume "gcs-fuse-csi-pv" : rpc error: code = Internal desc = gcsfuse failed with error: Error: error while parsing config: error parsing parallel download config: file cache should be enabled for parallel download support
.
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 schreibgeschützten Datencache benötigen, um den einmaligen Zugriff auf mehrere große Dateien zu verbessern.
Verwenden Sie parallele Downloads für Anwendungen, die große Dateien mit nur einem Thread lesen. Bei Anwendungen mit hoher Leseparallelität (mit mehr als acht Threads) kann es bei Verwendung 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 diese zusätzlichen Einstellungen in Ihrem Manifest mit mount options, um parallele Downloads 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 Zugriffssteuerungsprüfungen reduzieren
Standardmäßig führt der CSI-Treiber Zugriffssteuerungsprü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 die Kontingentnutzung zu reduzieren.
Beispiel für die Bereitstellung von Inferenz
Das folgende Beispiel zeigt, 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 - read_ahead_kb=1024 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
: Der Name 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 Dokumentation zu Cloud Storage FUSE.
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 nutzen. Das hängt davon ab, ob Sie das Dateicaching mit lokalen SSDs oder mit RAM-Laufwerken 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 spezifische 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 Cloud Storage FUSE CSI-Volume-Attributen konfigurieren. Der CSI-Treiber übersetzt die 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 PersistentVolumes verwenden. - Im Feld
spec.volumes[n].csi.volumeAttributes
, wenn Sie sitzungsspezifische CSI-Volumes verwenden.
Im Manifest können die Lautstärkeattribute 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 ab GKE-Version 1.33.0-gke.2248000 oder höher standardmäßig aktiviert. Wenn Sie sie deaktivieren möchten, setzen Sie das volume-Attribut disableMetrics
auf „true“.
Dateisystemmesswerte
Messwerte zum Dateisystem geben Aufschluss über die Leistung und den Zustand Ihres Dateisystems, einschließlich der Anzahl der Vorgänge, Fehler und der Vorgangsgeschwindigkeit. Mithilfe dieser Messwerte lassen sich Engpässe erkennen und die Leistung 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 Anforderungsaktivität im Blick behalten, um zu sehen, wie Ihre Anwendungen mit Cloud Storage-Buckets interagieren. Anhand dieser Daten können Sie Bereiche für die Optimierung identifizieren, z. B. Lesemuster verbessern oder die Anzahl der Anfragen reduzieren.
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
Messwerte für den Dateicache
Sie können Messwerte für den Datei-Cache überwachen, darunter das gelesene Datenvolumen, die Geschwindigkeit und die Cache-Trefferquote, um die Leistung von Cloud Storage FUSE und Anwendungen zu optimieren. Analysieren Sie diese Messwerte, um Ihre Caching-Strategie zu verbessern und die Anzahl der Cache-Treffer zu maximieren.
gcsfusecsi/file_cache_read_bytes_count
gcsfusecsi/file_cache_read_latencies
gcsfusecsi/file_cache_read_count
Cloud Storage FUSE-Leistungsstandardeinstellungen aktivieren
Ab Version 1.33.2-gke.1043000 aktiviert GKE automatisch eine Reihe von Standardeinstellungen für Cloud Storage FUSE, das auf Knoten ausgeführt wird, die von leistungsstarken Maschinentypen unterstützt werden.
Bei der Volume-Bereitstellung ruft der Cloud Storage FUSE CSI-Treiber den Knoteninstanztyp des Ziels ab und übergibt ihn über eine neue Bereitstellungsoption machine-type
an Cloud Storage FUSE.
Wenn ein leistungsstarker Maschinentyp übergeben wird, legt Cloud Storage FUSE automatisch die folgenden Standardbereitstellungsoptionen fest:
metadata-cache.negative-ttl-secs: 0
metadata-cache.ttl-secs: -1
metadata-cache.stat-cache-max-size-mb: 1024
metadata-cache.type-cache-max-size-mb: 128
implicit-dirs: true
file-system.rename-dir-limit: 200000
Wenn eine dieser Mount-Optionen explizit angegeben wird, wird sie nicht durch die automatischen Standardeinstellungen überschrieben.
Sie können die Funktion deaktivieren, indem Sie disable-autoconfig
in die Bereitstellungsoptionen aufnehmen. Beispiel:
mountOptions: "implicit-dirs,disable-autoconfig"
Best Practices für die Leistungsoptimierung
In diesem Abschnitt werden einige empfohlene Techniken zur Leistungsoptimierung und ‑anpassung für den Cloud Storage FUSE CSI-Treiber aufgeführt.
Buckets mit hierarchischem Namespace (HNS) nutzen:Wenn Sie HNS-Buckets verwenden, können Sie die anfänglichen Abfragen pro Sekunde (Queries Per Second, QPS) um das Achtfache steigern. Diese Option ermöglicht auch schnelle und atomare Umbenennungen von Verzeichnissen, was eine wichtige Voraussetzung für effizientes Checkpointing mit Cloud Storage FUSE ist. HNS-Buckets bieten eine bessere dateiähnliche Erfahrung, da sie 40.000 Objektleseanfragen und 8.000 Objektschreibanfragen pro Sekunde unterstützen. Dies ist eine deutliche Verbesserung gegenüber den 8.000 Objektleseanfragen und 1.000 Objektschreibanfragen pro Sekunde, die von Flat-Buckets angeboten werden.
Nach Möglichkeit bestimmte Verzeichnisse bereitstellen:Wenn Ihre Arbeitslast den Zugriff auf ein bestimmtes Verzeichnis in einem Bucket umfasst, verwenden Sie beim Bereitstellen das Flag
--only-dir
. Dieser fokussierte Ansatz beschleunigt Listenaufrufe, da er den Umfang vonLookUpInode
-Aufrufen einschränkt. Diese umfassen einenlist+stat
-Aufruf für jede Datei oder jedes Verzeichnis im angegebenen Pfad. Wenn Sie die Einbindung auf das erforderliche Unterverzeichnis beschränken, minimieren Sie diese Aufrufe und erzielen so eine bessere Leistung.Metadaten-Caching optimieren:Konfigurieren Sie Ihre Metadatencaches so, dass ihre Kapazität maximiert wird, und legen Sie eine unendliche Gültigkeitsdauer (TTL) fest. Dadurch werden alle aufgerufenen Metadaten für die Dauer Ihres Jobs effektiv im Cache gespeichert, wodurch die Anzahl der Metadatenzugriffsanfragen an Cloud Storage minimiert wird. Diese Konfiguration ist besonders für schreibgeschützte Volumes von Vorteil, da sie wiederholte Cloud Storage-Metadaten-Lookups vermeidet. Prüfen Sie jedoch, ob der mit diesen großen Metadatencaches verbundene Speicherverbrauch mit den Funktionen Ihres Systems übereinstimmt.
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 an die Anforderungen der Arbeitslast anpassen, um Drosselung zu vermeiden und einen optimalen Durchsatz zu gewährleisten.
Metadaten-Cache proaktiv füllen:Aktivieren Sie das Vorabrufen von Metadaten für den CSI-Treiber. Dadurch werden die Metadaten- und Listencaches effizient gefüllt, wodurch Metadatenaufrufe an Cloud Storage minimiert und der erste Lauf beschleunigt wird. Viele ML-Frameworks führen diesen Schritt automatisch aus. Bei benutzerdefiniertem Trainingscode ist es jedoch wichtig, dass Sie ihn selbst ausführen. Weitere Informationen finden Sie unter Metadaten-Prefetching verwenden, um den Metadaten-Cache vorab zu füllen.
Dateicache und parallele Downloads verwenden:Aktivieren Sie die Dateicachefunktion, insbesondere für Trainingsarbeitslasten mit mehreren Epochen, bei denen Daten wiederholt gelesen werden. Im Dateicache werden häufig aufgerufene Daten im lokalen Speicher (SSD bei A3-Geräten) gespeichert, wodurch die Leseleistung verbessert wird. Ergänzen Sie dies mit der Funktion für parallele Downloads, insbesondere für Serving-Arbeitslasten, um den Download großer Dateien zu beschleunigen, indem Sie sie in kleinere Blöcke aufteilen und gleichzeitig herunterladen.
Checkpoints optimieren:Für Checkpointing mit Cloud Storage FUSE empfehlen wir dringend, einen HNS-Bucket zu verwenden. Wenn Sie einen Bucket verwenden, der nicht HNS-fähig ist, legen Sie den Parameter
rename-dir-limit
auf einen hohen Wert fest, um die Verzeichnisumbenennungen zu berücksichtigen, die von ML-Frameworks häufig während der Prüfpunkterstellung verwendet werden. Das Umbenennen von Verzeichnissen in Buckets, die nicht HNS-fähig sind, ist jedoch möglicherweise nicht atomar und kann länger dauern.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 im Rahmen der Ausführung vollständige Verzeichniseinträge wiederholen, z. B. KI/ML-Trainingsläufe. Es empfiehlt sich, die Listencache-Funktion mit schreibgeschützten Bereitstellungen zu verwenden, um die Datenkonsistenz zu gewährleisten.Kernel-Read-Ahead erhöhen:Bei Arbeitslasten, bei denen hauptsächlich sequenzielle Lesevorgänge großer Dateien anfallen, z. B. beim Serving und beim Wiederherstellen von Checkpoints, kann eine Erhöhung der Read-Ahead-Größe die Leistung erheblich verbessern. Wenn Sie den Cloud Storage FUSE-Readahead-Wert erhöhen möchten, geben Sie das Flag
read_ahead_kb
inmountOptions
an und legen Sie es auf 1 MB fest (z.B.read_ahead_kb=1024
). Für dieses Feature ist die GKE-Version 1.32.2-gke.1297001 oder höher erforderlich.Streaming-Schreibvorgänge aktivieren:Streaming-Schreibvorgänge sind ein neuer Schreibpfad, mit dem Daten direkt in Cloud Storage hochgeladen werden, während sie geschrieben werden. Dieser Ansatz unterscheidet sich von der Standardschreibmethode, bei der der gesamte Schreibvorgang vorübergehend in einem lokalen Verzeichnis bereitgestellt und dann bei einem
close
- oderfsync
-Vorgang in Cloud Storage hochgeladen wird. Streaming-Schreibvorgänge reduzieren sowohl die Latenz als auch die Festplattenspeichernutzung. Das ist besonders vorteilhaft bei großen, sequenziellen Schreibvorgängen wie Checkpoints. Geben Sie das Befehlszeilenflagenable-streaming-writes
inmountOptions
an, um Streaming-Schreibvorgänge zu aktivieren.
Nächste Schritte
- Weitere Beispiele für die Verwendung des CSI-Treibers auf GitHub
- Weitere Informationen zu Cloud Storage FUSE