Questa guida mostra come ottimizzare le prestazioni del driver CSI di Cloud Storage FUSE su Google Kubernetes Engine (GKE).
Sebbene Cloud Storage FUSE offra flessibilità e scalabilità, una configurazione e un'ottimizzazione attente sono fondamentali per ottenere prestazioni ottimali. Le prestazioni di Cloud Storage FUSE possono differire da un file system POSIX in termini di latenza, throughput e coerenza. L'obiettivo dell'ottimizzazione è ridurre al minimo l'overhead delle operazioni sui metadati e massimizzare l'efficienza dell'accesso ai dati. Se esegui applicazioni AI/ML che utilizzano dati nei bucket Cloud Storage, l'ottimizzazione del driver CSI può ridurre i tempi di addestramento e inferenza per le tue applicazioni AI/ML.
Questa guida è rivolta a sviluppatori e machine learning engineer che vogliono migliorare le prestazioni delle loro applicazioni che accedono ai dati archiviati nei bucket Cloud Storage.
Prima di leggere questa pagina, assicurati di conoscere le nozioni di base di Cloud Storage, Kubernetes e del driver CSI di Cloud Storage FUSE. Assicurati di controllare anche i requisiti di versione di GKE per le funzionalità specifiche che vuoi utilizzare.
Configura le opzioni di montaggio
Il driver CSI di Cloud Storage FUSE supporta le opzioni di montaggio per configurare la modalità di montaggio dei bucket Cloud Storage nel file system locale. Per l'elenco completo delle opzioni di montaggio supportate, consulta la documentazione del file CLI di Cloud Storage FUSE.
Puoi specificare le opzioni di montaggio nei seguenti modi, a seconda del tipo di volume che utilizzi:
Volume temporaneo CSI
Se utilizzi volumi effimeri CSI, specifica le opzioni di montaggio nel
campo spec.volumes[n].csi.volumeAttributes.mountOptions
del manifest
del pod.
Devi specificare le opzioni di montaggio come stringa, con i flag separati da virgole e senza spazi. Ad esempio:
mountOptions: "implicit-dirs,file-cache:enable-parallel-downloads:true,file-cache:download-chunk-size-mb:3"
Volume permanente
Se utilizzi volumi permanenti, specifica le opzioni di montaggio nel campo
spec.mountOptions
del manifest PersistentVolume.
Devi specificare le opzioni di montaggio come elenco. Ad esempio:
mountOptions:
- implicit-dirs
- file-cache:enable-parallel-downloads:true
- file-cache:download-chunk-size-mb:3
Considerazioni sul montaggio
Tieni presenti le seguenti considerazioni quando configuri i montaggi con il driver CSI:
Considerazioni generali
- I seguenti flag non sono consentiti:
app-name
,temp-dir
,foreground
,log-file
,log-format
,key-file
,token-url
ereuse-token-from-url
. - Cloud Storage FUSE non rende visibili le directory implicite per impostazione predefinita.
- Se vuoi montare solo una directory nel bucket anziché l'intero bucket, passa il percorso relativo della directory utilizzando il flag
only-dir=relative/path/to/the/bucket/root
.
Sicurezza e autorizzazioni
- Se utilizzi un Security Context per il pod o il container oppure se l'immagine container utilizza un utente o un gruppo non root, devi impostare i flag di montaggio
uid
egid
. Devi anche utilizzare i flag di montaggiofile-mode
edir-mode
per impostare le autorizzazioni del file system. Tieni presente che non puoi eseguire comandichmod
,chown
ochgrp
su un file system FUSE di Cloud Storage, quindi utilizza i flag di montaggiouid
,gid
,file-mode
edir-mode
per ottenere l'accesso per un utente o un gruppo non root.
Opzioni di montaggio del kernel Linux
- Se devi configurare le opzioni di montaggio del kernel Linux, puoi passare le
opzioni utilizzando il flag
o
. Ad esempio, se non vuoi consentire l'esecuzione diretta di file binari sul file system montato, imposta il flago=noexec
. Ogni opzione richiede un flag separato, ad esempioo=noexec
,o=noatime
. Sono consentite solo le seguenti opzioni:exec
,noexec
,atime
,noatime
,sync
,async
edirsync
.
Configurare la memorizzazione nella cache
Questa sezione fornisce una panoramica delle opzioni di memorizzazione nella cache disponibili con il driver CSI di Cloud Storage FUSE per migliorare le prestazioni.
Memorizzazione nella cache dei file
Puoi utilizzare il driver CSI di Cloud Storage FUSE con la memorizzazione nella cache dei file per migliorare le prestazioni di lettura delle applicazioni che gestiscono file di piccole dimensioni dai bucket Cloud Storage. La funzionalità di cache dei file di Cloud Storage FUSE è una cache di lettura basata sul client che consente di servire più rapidamente le letture ripetute dei file dalla cache di archiviazione di tua scelta.
Puoi scegliere tra una serie di opzioni di archiviazione per la cache di lettura, tra cui SSD locale, archiviazione a blocchi durevole come Google Cloud Hyperdisk o Persistent Disk e RAM disk (memoria), in base alle tue esigenze di prezzo-prestazioni.
Attivare e utilizzare la memorizzazione nella cache dei file
Per impostazione predefinita, la funzionalità di memorizzazione nella cache dei file è disattivata su GKE. Devi attivare l'opzione per abilitare la memorizzazione nella cache dei file con il driver CSI di Cloud Storage FUSE.
Per attivare e controllare la memorizzazione nella cache dei file, imposta l'attributo del volume
fileCacheCapacity
o utilizza l'opzione di montaggio file-cache:max-size-mb
.
Per impostazione predefinita, GKE utilizza un volume emptyDir
per la memorizzazione nella cache dei file Cloud Storage FUSE
supportata dall'archiviazione temporanea configurata sul nodo. Potrebbe
essere il disco di avvio collegato al nodo o un SSD locale sul nodo. Se abiliti
SSD locale
sul nodo, GKE utilizza l'SSD locale per supportare il volume emptyDir
.
Puoi configurare un volume di cache di lettura personalizzato per il container sidecar
per sostituire il volume emptyDir
predefinito per la memorizzazione nella cache dei file nelle operazioni di lettura.
Per saperne di più sulle best practice per la memorizzazione nella cache dei file, consulta Prestazioni di Cloud Storage FUSE.
Seleziona lo spazio di archiviazione per il backup della cache dei file
Per selezionare lo spazio di archiviazione per il backup della cache dei file, tieni conto di questi fattori:
Per le famiglie di VM GPU e CPU che supportano l'SSD locale (ad esempio, le VM A3), ti consigliamo di utilizzare l'SSD locale.
- Per le VM A3+, GKE configura automaticamente l'SSD locale per l'utilizzo da parte dei pod.
- Se la famiglia di VM non supporta l'SSD locale, GKE utilizza il disco di avvio
per la memorizzazione nella cache. Il tipo di disco predefinito per il disco di avvio su GKE è
pd-balanced
. Se la tua famiglia di VM supporta l'SSD locale, ma non ha l'archiviazione temporanea sull'SSD locale abilitata per impostazione predefinita, puoi abilitare l'SSD locale nel tuopool di nodil. Ciò vale per le famiglie di macchine di prima e seconda generazione, come le macchine N1 e N2. Per saperne di più, vedi Creare un cluster con SSD locale.
Per verificare se sul nodo è abilitato lo spazio di archiviazione temporaneo su SSD locale, esegui questo comando:
kubectl describe node <code><var>NODE_NAME</var></code> | grep "cloud.google.com/gke-ephemeral-storage-local-ssd"
Per le famiglie di VM TPU, in particolare v6+, consigliamo di utilizzare la RAM come cache di file per ottenere le migliori prestazioni, poiché queste istanze VM hanno una RAM più grande.
- Quando utilizzi la RAM, presta attenzione agli errori di esaurimento della memoria (OOM) perché causano
interruzioni dei pod. Cloud Storage FUSE utilizza la memoria, quindi la configurazione di una cache di file
per utilizzare il container collaterale può causare errori di esaurimento della memoria. Per evitare questi
scenari, modifica il campo
file-cache:max-size-mb
della configurazione della cache dei file impostando un valore inferiore. - Per altre famiglie di TPU, ti consigliamo di utilizzare
pd-balanced
opd-ssd
. Il tipo di disco predefinito per il disco di avvio su GKE èpd-balanced
.
- Quando utilizzi la RAM, presta attenzione agli errori di esaurimento della memoria (OOM) perché causano
interruzioni dei pod. Cloud Storage FUSE utilizza la memoria, quindi la configurazione di una cache di file
per utilizzare il container collaterale può causare errori di esaurimento della memoria. Per evitare questi
scenari, modifica il campo
Evita di utilizzare il disco di avvio per la memorizzazione nella cache, in quanto può comportare una riduzione delle prestazioni e interruzioni impreviste. Valuta invece l'utilizzo di un PersistentVolume supportato da spazio di archiviazione a blocchi durevole.
Utilizzare la memorizzazione nella cache dei file basata su disco RAM
Puoi utilizzare il disco RAM per la memorizzazione nella cache dei file o il download parallelo per ridurre il sovraccarico dell'utilizzo di un disco di avvio se utilizzi una VM TPU con RAM sufficientemente grande.
Per utilizzare un disco RAM con il driver CSI di Cloud Storage FUSE, aggiungi quanto segue al manifest:
volumes:
- name: gke-gcsfuse-cache
emptyDir:
medium: Memory
Cache delle statistiche
Il driver CSI di Cloud Storage FUSE migliora le prestazioni memorizzando nella cache i metadati dei file, come dimensioni e ora di modifica. Il driver CSI abilita questa cache delle statistiche per impostazione predefinita e riduce la latenza memorizzando le informazioni localmente anziché richiederle ripetutamente a Cloud Storage. Puoi configurare la dimensione massima (il valore predefinito è 32 MB) e per quanto tempo i dati rimangono nella cache (il valore predefinito è 60 secondi). Ottimizzando la cache dei metadati, puoi ridurre le chiamate API a Cloud Storage, per migliorare le prestazioni e l'efficienza delle applicazioni riducendo al minimo il traffico di rete e la latenza.
Per saperne di più sulle best practice per la memorizzazione nella cache delle statistiche, consulta la panoramica della memorizzazione nella cache di Cloud Storage FUSE.
Utilizzare il recupero preliminare dei metadati per precompilare la cache dei metadati
La funzionalità di precaricamento dei metadati consente al driver CSI di Cloud Storage FUSE di caricare in modo proattivo i metadati pertinenti sugli oggetti nel bucket Cloud Storage nelle cache di Cloud Storage FUSE. Questo approccio riduce le chiamate a Cloud Storage ed è particolarmente vantaggioso per le applicazioni che accedono a set di dati di grandi dimensioni con molti file, come i carichi di lavoro di addestramento AI/ML.
Questa funzionalità richiede GKE versione 1.32.1-gke.1357001 o successive. Questa funzionalità non è supportata con il montaggio dinamico, in cui si specifica un carattere di sottolineatura (_) per montare tutti i bucket a cui può accedere il service account Kubernetes. Se utilizzi il montaggio dinamico, il recupero preliminare dei metadati non viene eseguito.
Per visualizzare i miglioramenti delle prestazioni ottenuti dal precaricamento dei metadati, devi impostare il valore Time to Live (TTL) degli elementi della cache dei metadati su illimitato. In genere, l'impostazione di un TTL impedisce che i contenuti memorizzati nella cache diventino obsoleti. Quando imposti il TTL su illimitato, devi fare attenzione a non modificare i contenuti del bucket out-of-band (ovvero consentendo a un workload o a un attore diverso di modificare il workload). Le modifiche out-of-band non sono visibili localmente e potrebbero causare problemi di coerenza.
Per abilitare il recupero preliminare dei metadati, apporta le seguenti modifiche alla configurazione. Ti consigliamo di attivare questa funzionalità sui volumi più letti.
- Imposta l'attributo del volume
gcsfuseMetadataPrefetchOnMount: true
. - Aggiorna le seguenti opzioni di montaggio:
metadata-cache:stat-cache-max-size-mb:-1
per annullare l'impostazione del limite di capacità della cache delle statistiche.metadata-cache:type-cache-max-size-mb:-1
per annullare il limite di capacità della cache dei tipi.file-system:kernel-list-cache-ttl-secs:-1
per impedire la scadenza degli elementi della cache dell'elenco dei kernel.metadata-cache:ttl-secs:-1
per impedire la scadenza degli elementi di metadati memorizzati nella cache.
Per un esempio, consulta il esempio di codice in Migliorare le prestazioni di lettura di file di grandi dimensioni utilizzando il download parallelo.
Cache di elenchi
Per velocizzare gli elenchi di directory per le applicazioni, puoi attivare la memorizzazione nella cache degli elenchi. Questa funzionalità memorizza gli elenchi
della directory in memoria, in modo che le richieste ripetute possano essere gestite più rapidamente. La cache dell'elenco è
disabilitata per impostazione predefinita; puoi abilitarla impostando il
parametro kernel-list-cache-ttl-secs
nelle opzioni di montaggio. Definisce per quanto tempo vengono memorizzate nella cache le schede.
Migliorare le prestazioni di lettura di file di grandi dimensioni utilizzando il download parallelo
Puoi utilizzare il download parallelo di Cloud Storage FUSE per accelerare la lettura di file di grandi dimensioni da Cloud Storage per i download multithread. Il download parallelo di Cloud Storage FUSE può essere particolarmente utile per i casi d'uso di servizio di modelli con letture di dimensioni superiori a 1 GB.
I download paralleli richiedono l'attivazione della cache dei file. A partire dalla versione 1.32.0-gke.1795000 di GKE, Cloud Storage FUSE applica rigorosamente questo requisito e genera il seguente errore se tenti di utilizzare i download paralleli senza la cache dei file, il che impedisce l'avvio del pod: 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
.
Ecco alcuni esempi comuni:
- Servizio di modelli, in cui è necessario un buffer di prefetch di grandi dimensioni per accelerare il download del modello durante l'avvio dell'istanza.
- Ripristini del checkpoint, in cui è necessaria una cache di dati di sola lettura per migliorare l'accesso una tantum a più file di grandi dimensioni.
Utilizza il download parallelo per le applicazioni che eseguono letture di file di grandi dimensioni a thread singolo. Le applicazioni con parallelismo di lettura elevato (che utilizzano più di otto thread) potrebbero riscontrare prestazioni inferiori con questa funzionalità.
Per utilizzare il download parallelo con il driver CSI di Cloud Storage FUSE:
Crea un cluster con la memorizzazione nella cache dei file abilitata, come descritto in Abilitare e utilizzare la memorizzazione nella cache dei file.
Nel manifest, configura queste impostazioni aggiuntive utilizzando le opzioni di montaggio per attivare il download parallelo:
- Imposta
file-cache:enable-parallel-downloads:true
. - Regola
file-cache:parallel-downloads-per-file
,file-cache:parallel-downloads-per-file
,file-cache:max-parallel-downloads
efile-cache:download-chunk-size-mb
in base alle esigenze.
- Imposta
(Facoltativo) Se necessario, valuta la possibilità di modificare questi attributi di volume:
file-cache:cache-file-for-range-read
per letture casuali o parziali.metadata-cache:stat-cache-max-size-mb
emetadata-cache:type-cache-max-size-mb
per i carichi di lavoro di addestramento.
Ridurre il consumo di quota dai controlli dell'accesso
Per impostazione predefinita, il driver CSI esegue controlli di controllo dell'accesso'accesso per assicurarsi che il account di servizio del pod abbia accesso ai tuoi bucket Cloud Storage. Ciò comporta un overhead aggiuntivo sotto forma di API Kubernetes Service, Security Token Service e chiamate IAM. A partire dalla versione 1.29.9-gke.1251000 di GKE, puoi
utilizzare l'attributo volume skipCSIBucketAccessCheck
per ignorare questi controlli ridondanti e
ridurre il consumo di quota.
Esempio di pubblicazione di inferenze
L'esempio seguente mostra come attivare il download parallelo per la pubblicazione di inferenze:
Crea un manifest PersistentVolume e PersistentVolumeClaim con la seguente specifica:
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
Sostituisci i seguenti valori:
NAMESPACE
: lo spazio dei nomi Kubernetes in cui vuoi eseguire il deployment del pod.BUCKET_NAME
: il nome del bucket Cloud Storage che hai specificato durante la configurazione dell'accesso ai bucket Cloud Storage. Puoi specificare un carattere di sottolineatura (_
) per montare tutti i bucket a cui può accedere il service account Kubernetes. Per saperne di più, consulta la sezione Montaggio dinamico nella documentazione di Cloud Storage FUSE.
Applica il manifest al cluster:
kubectl apply -f PV_FILE_PATH
Sostituisci
PV_FILE_PATH
con il percorso del file YAML.Crea un manifest del pod con la seguente specifica per utilizzare PersistentVolumeClaim, a seconda che tu stia utilizzando la memorizzazione nella cache dei file supportata da SSD locali o da RAM disk:
SSD locale
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
Disco RAM
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
Applica il manifest al cluster:
kubectl apply -f POD_FILE_PATH
Sostituisci
POD_FILE_PATH
con il percorso del file YAML.
Configurare gli attributi del volume
Gli attributi del volume ti consentono di configurare un comportamento specifico del driver CSI di Cloud Storage FUSE.
Il driver CSI di Cloud Storage FUSE non consente di specificare direttamente il file di configurazione di Cloud Storage FUSE. Puoi configurare alcuni campi nel file di configurazione utilizzando gli attributi del volume CSI di Cloud Storage FUSE. Il driver CSI gestisce la conversione dei valori degli attributi del volume nei campi del file di configurazione.
Per l'elenco completo degli attributi del volume supportati, consulta la Guida di riferimento agli attributi del volume.
Puoi specificare gli attributi del volume nei seguenti modi:
- Nel campo
spec.csi.volumeAttributes
di un manifest PersistentVolume, se utilizzi volumi permanenti. - Nel campo
spec.volumes[n].csi.volumeAttributes
, se utilizzi volumi effimeri CSI.
Nel manifest, gli attributi del volume possono essere specificati come coppie chiave-valore. Ad esempio:
volumeAttributes:
mountOptions: "implicit-dirs"
fileCacheCapacity: "-1"
gcsfuseLoggingSeverity: warning
Metriche di Cloud Storage FUSE
Le seguenti metriche di Cloud Storage FUSE sono ora disponibili tramite l'API GKE Monitoring. I dettagli sulle metriche di Cloud Storage FUSE, come etichette, tipo e unità, sono disponibili in Metriche di sistema di GKE. Queste metriche sono disponibili per ogni pod che utilizza Cloud Storage FUSE e puoi utilizzarle per configurare approfondimenti per volume e bucket.
Le metriche sono abilitate per impostazione predefinita a partire dalla versione 1.33.0-gke.2248000 o successive di GKE. Per disattivarli, imposta l'attributo del volume
disableMetrics
su "true".
Metriche del file system
Le metriche del file system monitorano le prestazioni e l'integrità del file system, inclusi il numero di operazioni, gli errori e la velocità delle operazioni. Queste metriche possono aiutarti a identificare i colli di bottiglia e ottimizzare le prestazioni.
gcsfusecsi/fs_ops_count
gcsfusecsi/fs_ops_error_count
gcsfusecsi/fs_ops_latency
Metriche Cloud Storage
Puoi monitorare le metriche di Cloud Storage, tra cui volume di dati, velocità e attività delle richieste, per capire come le tue applicazioni interagiscono con i bucket Cloud Storage. Questi dati possono aiutarti a identificare le aree di ottimizzazione, ad esempio migliorando i pattern di lettura o riducendo il numero di richieste.
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
Metriche della cache dei file
Puoi monitorare le metriche della cache dei file, tra cui volume di lettura dei dati, velocità e tasso di successo della cache, per ottimizzare Cloud Storage FUSE e le prestazioni delle applicazioni. Analizza queste metriche per migliorare la tua strategia di memorizzazione nella cache e massimizzare gli hit della cache.
gcsfusecsi/file_cache_read_bytes_count
gcsfusecsi/file_cache_read_latencies
gcsfusecsi/file_cache_read_count
Abilita i valori predefiniti delle prestazioni di Cloud Storage FUSE
A partire dalla versione 1.33.2-gke.1043000, GKE abilita automaticamente una serie di valori predefiniti per Cloud Storage FUSE in esecuzione su nodi supportati da tipi di macchine ad alte prestazioni.
Durante il montaggio del volume, il driver CSI di Cloud Storage FUSE recupera il tipo di istanza del nodo di destinazione e lo passa a Cloud Storage FUSE tramite una nuova opzione di montaggio machine-type
.
Quando viene passato un tipo di macchina ad alte prestazioni, Cloud Storage FUSE imposta automaticamente le seguenti opzioni di montaggio predefinite:
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
Se una di queste opzioni di montaggio viene specificata in modo esplicito, non verrà sovrascritta dai valori predefiniti automatici.
Puoi disattivare la funzionalità includendo disable-autoconfig
nelle opzioni di montaggio. Ad esempio:
mountOptions: "implicit-dirs,disable-autoconfig"
Best practice per l'ottimizzazione delle prestazioni
Questa sezione elenca alcune tecniche consigliate di ottimizzazione e messa a punto delle prestazioni per il driver CSI di Cloud Storage FUSE.
Utilizza i bucket dello spazio dei nomi gerarchico (HNS):scegli i bucket HNS per ottenere un aumento sostanziale di 8 volte delle query al secondo (QPS) iniziali. Questa scelta facilita anche i cambi di nome delle directory rapidi e atomici, un requisito fondamentale per un checkpointing efficiente con Cloud Storage FUSE. I bucket HNS garantiscono un'esperienza migliore simile a quella dei file supportando 40.000 richieste di lettura di oggetti e 8000 richieste di scrittura di oggetti al secondo, un miglioramento significativo rispetto alle 8000 richieste di lettura di oggetti e alle 1000 richieste di scrittura di oggetti al secondo offerte dai bucket flat.
Monta directory specifiche, se possibile:se il tuo carico di lavoro prevede l'accesso a una directory specifica all'interno di un bucket, utilizza il flag
--only-dir
durante il montaggio. Questo approccio mirato accelera le chiamate di elenco, in quanto limita l'ambito delle chiamateLookUpInode
, che comportano una chiamatalist+stat
per ogni file o directory nel percorso specificato. Se restringi il montaggio alla sottodirectory richiesta, riduci al minimo queste chiamate, con conseguente miglioramento delle prestazioni.Ottimizza la memorizzazione nella cache dei metadati:configura le cache dei metadati per massimizzarne la capacità e imposta una durata (TTL) infinita. Questa pratica memorizza in modo efficace nella cache tutti i metadati a cui si accede per la durata del job, riducendo al minimo le richieste di accesso ai metadati a Cloud Storage. Questa configurazione si rivela particolarmente vantaggiosa per i volumi di sola lettura, in quanto elimina le ricerche ripetute dei metadati di Cloud Storage. Tuttavia, verifica che il consumo di memoria associato a queste grandi cache di metadati sia in linea con le funzionalità del tuo sistema.
Massimizza le risorse sidecar GKE:Cloud Storage FUSE opera all'interno di un container sidecar in un ambiente GKE. Per evitare colli di bottiglia delle risorse, rimuovi le limitazioni al consumo di CPU e memoria per il container sidecar. Ciò consente a Cloud Storage FUSE di scalare l'utilizzo delle risorse in base alle esigenze del carico di lavoro, evitando la limitazione e garantendo una velocità effettiva ottimale.
Compila in modo proattivo la cache dei metadati:attiva il recupero preliminare dei metadati per il driver CSI. In questo modo vengono compilate in modo efficiente le cache di metadati e di elenchi, riducendo al minimo le chiamate ai metadati a Cloud Storage e accelerando l'esecuzione iniziale. Molti framework ML lo fanno automaticamente, ma è fondamentale assicurarsi che questo passaggio venga eseguito per il codice di addestramento personalizzato. Per saperne di più, consulta Utilizzare il recupero preliminare dei metadati per precompilare la cache dei metadati.
Utilizza la cache dei file e i download paralleli: attiva la funzionalità di cache dei file, soprattutto per i carichi di lavoro di addestramento multi-epoca, in cui i dati vengono letti ripetutamente. La cache dei file memorizza i dati a cui si accede di frequente nell'archiviazione locale (SSD nel caso delle macchine A3), migliorando le prestazioni di lettura. Completa questa operazione con la funzionalità di download paralleli, in particolare per i carichi di lavoro di gestione, per accelerare il download di file di grandi dimensioni dividendoli in blocchi più piccoli e scaricandoli contemporaneamente.
Ottimizza i checkpoint:per il checkpointing con Cloud Storage FUSE, ti consigliamo vivamente di utilizzare un bucket HNS. Se utilizzi un bucket non HNS, imposta il parametro
rename-dir-limit
su un valore elevato per adattarsi ai cambi di nome delle directory spesso utilizzati dai framework ML durante il checkpointing. Tuttavia, tieni presente che i cambi di nome delle directory nei bucket non HNS potrebbero non essere atomici e potrebbero richiedere più tempo per essere completati.Attiva la memorizzazione nella cache degli elenchi:attiva la memorizzazione nella cache degli elenchi utilizzando il flag
--kernel-list-cache-ttl-secs
per migliorare ulteriormente il rendimento. Questa funzionalità memorizza nella cache gli elenchi di directory e file, migliorando la velocità delle operazionils
. La memorizzazione nella cache delle liste è particolarmente utile per i workload che prevedono elenchi completi di directory ripetuti, comuni negli scenari di addestramento AI/ML. Per mantenere la coerenza dei dati, ti consigliamo di utilizzare la memorizzazione nella cache delle liste con i montaggi in sola lettura.Aumenta la lettura anticipata del kernel:per i carichi di lavoro che comportano principalmente letture sequenziali di file di grandi dimensioni, come la pubblicazione e il ripristino del checkpoint, l'aumento delle dimensioni della lettura anticipata può migliorare notevolmente le prestazioni. Per aumentare la lettura anticipata di Cloud Storage FUSE, specifica il flag
read_ahead_kb
inmountOptions
e impostalo su 1 MB (ad es.read_ahead_kb=1024
). Questa funzionalità richiede GKE versione 1.32.2-gke.1297001 o successive.Attiva le scritture in streaming:le scritture in streaming sono un nuovo percorso di scrittura che carica i dati direttamente in Cloud Storage man mano che vengono scritti. Questo approccio è diverso dal metodo di scrittura predefinito, che esegue temporaneamente il staging dell'intera scrittura in una directory locale e poi la carica su Cloud Storage in seguito a un'operazione
close
ofsync
. Le scritture in streaming riducono sia la latenza che l'utilizzo dello spazio su disco, il che le rende particolarmente utili per scritture sequenziali di grandi dimensioni come i checkpoint. Per abilitare le scritture in streaming, specifica il flag della riga di comandoenable-streaming-writes
inmountOptions
.