Ottimizza il driver CSI di Cloud Storage FUSE per le prestazioni di GKE


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 e reuse-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 e gid. Devi anche utilizzare i flag di montaggio file-mode e dir-mode per impostare le autorizzazioni del file system. Tieni presente che non puoi eseguire comandi chmod, chown o chgrp su un file system FUSE di Cloud Storage, quindi utilizza i flag di montaggio uid, gid, file-mode e dir-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 flag o=noexec. Ogni opzione richiede un flag separato, ad esempio o=noexec,o=noatime. Sono consentite solo le seguenti opzioni: exec, noexec, atime, noatime, sync, async e dirsync.

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 o pd-ssd. Il tipo di disco predefinito per il disco di avvio su GKE è pd-balanced.
  • 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.

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.
Best practice:

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:

  1. Crea un cluster con la memorizzazione nella cache dei file abilitata, come descritto in Abilitare e utilizzare la memorizzazione nella cache dei file.

  2. Nel manifest, configura queste impostazioni aggiuntive utilizzando le opzioni di montaggio per attivare il download parallelo:

    1. Imposta file-cache:enable-parallel-downloads:true.
    2. Regola file-cache:parallel-downloads-per-file, file-cache:parallel-downloads-per-file, file-cache:max-parallel-downloads e file-cache:download-chunk-size-mb in base alle esigenze.
  3. (Facoltativo) Se necessario, valuta la possibilità di modificare questi attributi di volume:

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:

  1. 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.
  2. Applica il manifest al cluster:

    kubectl apply -f PV_FILE_PATH
    

    Sostituisci PV_FILE_PATH con il percorso del file YAML.

  3. 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
    
  4. 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 chiamate LookUpInode, che comportano una chiamata list+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 operazioni ls. 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 in mountOptions 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 o fsync. 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 comando enable-streaming-writes in mountOptions.

Passaggi successivi