Otimizar o driver CSI do Cloud Storage FUSE para a performance do GKE


Neste guia, mostramos como otimizar a performance do driver CSI do Cloud Storage FUSE no Google Kubernetes Engine (GKE).

Embora o Cloud Storage FUSE ofereça flexibilidade e escalonabilidade, a configuração e o ajuste cuidadosos são cruciais para alcançar a performance ideal. O desempenho do Cloud Storage FUSE pode ser diferente de um sistema de arquivos POSIX em termos de latência, capacidade de processamento e consistência. O objetivo do ajuste é minimizar a sobrecarga das operações de metadados e maximizar a eficiência do acesso aos dados. Se você estiver executando aplicativos de IA/ML que consomem dados em buckets do Cloud Storage, ajustar o driver CSI poderá reduzir os tempos de treinamento e inferência dos aplicativos de IA/ML.

Este guia é destinado a desenvolvedores e engenheiros de machine learning (ML) que querem melhorar o desempenho dos aplicativos que acessam dados armazenados em buckets do Cloud Storage.

Antes de ler esta página, conheça os conceitos básicos do Cloud Storage, do Kubernetes e do driver CSI do Cloud Storage FUSE. Verifique também os requisitos de versão do GKE para recursos específicos que você quer usar.

Configurar opções de ativação

O driver CSI do Cloud Storage FUSE é compatível com opções de ativação para configurar como os buckets do Cloud Storage são ativados no sistema de arquivos local. Para conferir a lista completa de opções de montagem compatíveis, consulte a documentação de arquivos da CLI do Cloud Storage FUSE.

É possível especificar opções de montagem das seguintes maneiras, dependendo do tipo de volume que você está usando:

Volume temporário do CSI

Se você usar volumes temporários do CSI, especifique as opções de montagem no campo spec.volumes[n].csi.volumeAttributes.mountOptions do manifesto do pod.

É preciso especificar as opções de montagem como uma string, com flags separadas por vírgulas e sem espaços. Exemplo:

  mountOptions: "implicit-dirs,file-cache:enable-parallel-downloads:true,file-cache:download-chunk-size-mb:3"

Volume permanente

Se você usar volumes permanentes, especifique as opções de montagem no campo spec.mountOptions do manifesto PersistentVolume.

É preciso especificar as opções de montagem como uma lista. Exemplo:

  mountOptions:
    - implicit-dirs
    - file-cache:enable-parallel-downloads:true
    - file-cache:download-chunk-size-mb:3

Considerações sobre montagem

Use as seguintes considerações ao configurar ativações com o driver CSI:

Considerações gerais

  • As flags a seguir não são permitidas: app-name, temp-dir, foreground, log-file, log-format, key-file, token-url e reuse-token-from-url.
  • O Cloud Storage FUSE não torna os diretórios implícitos visíveis por padrão.
  • Se você só quiser ativar um diretório no bucket em vez de todo o bucket, passe o caminho relativo do diretório usando a sinalização only-dir=relative/path/to/the/bucket/root.

Segurança e permissões

  • Se você usa um Contexto de segurança para o pod ou contêiner, ou se a imagem do contêiner usa um usuário ou grupo não raiz, é necessário definir as flags de ativação uid e gid. Também é necessário usar as flags de montagem file-mode e dir-mode para definir as permissões do sistema de arquivos. Não é possível executar comandos chmod, chown ou chgrp em um sistema de arquivos FUSE do Cloud Storage. Use as flags de montagem uid, gid, file-mode e dir-mode para conceder acesso a um usuário ou grupo não raiz.

Opções de ativação do kernel do Linux

  • Se você precisar configurar as opções de ativação do kernel do Linux, transmita as opções usando a flag o. Por exemplo, se você não quiser permitir a execução direta de binários no sistema de arquivos montado, defina a flag o=noexec. Cada opção requer uma flag separada, por exemplo, o=noexec,o=noatime. Somente as seguintes opções são permitidas: exec, noexec, atime, noatime, sync, async e dirsync.

Configurar o armazenamento em cache

Esta seção oferece uma visão geral das opções de armazenamento em cache disponíveis com o driver CSI do Cloud Storage FUSE para melhorar o desempenho.

Armazenamento em cache de arquivos

É possível usar o driver CSI do Cloud Storage FUSE com armazenamento em cache de arquivos para melhorar o desempenho de leitura de aplicativos que processam arquivos pequenos de buckets do Cloud Storage. O recurso de cache de arquivos do Cloud Storage FUSE é um cache de leitura baseado em cliente que permite que leituras repetidas de arquivos sejam veiculadas mais rapidamente a partir do armazenamento em cache de sua escolha.

Escolha entre uma variedade de opções de armazenamento para o cache de leitura, incluindo SSD local, armazenamento em blocos durável, como o Hyperdisk ou o Persistent Disk do Google Cloud, e disco RAM (memória), de acordo com suas necessidades de preço-desempenho.

Ativar e usar o armazenamento em cache de arquivos

Por padrão, o recurso de armazenamento em cache de arquivos está desativado no GKE. É necessário ativar o armazenamento em cache de arquivos com o driver CSI do Cloud Storage FUSE.

Para ativar e controlar o armazenamento em cache de arquivos, defina o atributo de volume fileCacheCapacity ou use a opção de montagem file-cache:max-size-mb.

O GKE usa um volume emptyDir por padrão para armazenamento em cache de arquivos do Cloud Storage FUSE com suporte do armazenamento efêmero configurado no nó. Pode ser o disco de inicialização anexado ao nó ou um SSD local no nó. Se você ativar o SSD local no nó, o GKE usará o SSD local para retornar o volume emptyDir.

É possível configurar um volume personalizado de cache de leitura para o contêiner secundário para substituir o volume emptyDir padrão para armazenamento em cache de arquivos em operações de leitura.

Para saber mais sobre as práticas recomendadas de armazenamento em cache de arquivos, consulte Desempenho do Cloud Storage FUSE.

Selecione o armazenamento para fazer backup do cache de arquivos

Para selecionar o armazenamento do backup do cache de arquivos, consulte estas considerações:

  • Para famílias de VMs de GPU e CPU que oferecem suporte a SSD local (por exemplo, VMs A3), recomendamos o uso de SSD local.

    • Para VMs A3+, o GKE configura automaticamente o SSD local para consumo pelos seus pods.
    • Se a família de VMs não for compatível com SSD local, o GKE usará o disco de inicialização para armazenamento em cache. O tipo de disco padrão para o disco de inicialização no GKE é pd-balanced.
    • Se a família de VMs for compatível com SSD local, mas não tiver o armazenamento temporário em SSD local ativado por padrão, você poderá ativar o SSD local no pool de nós. Isso se aplica a famílias de máquinas de primeira e segunda geração, como as máquinas N1 e N2. Para saber mais, consulte Criar um cluster com SSD local.

      Para verificar se o nó tem o armazenamento temporário em SSD local ativado, execute o seguinte comando:

      kubectl describe node <code><var>NODE_NAME</var></code> | grep "cloud.google.com/gke-ephemeral-storage-local-ssd"
      
  • Para famílias de VMs da TPU, especialmente v6+, recomendamos usar RAM como um cache de arquivos para ter o melhor desempenho, já que essas instâncias de VM têm mais RAM.

    • Ao usar a RAM, preste atenção aos erros de falta de memória (OOM), porque eles causam interrupções no pod. O Cloud Storage FUSE consome memória. Portanto, configurar um cache de arquivos para consumir o contêiner secundário pode resultar em erros de falta de memória. Para evitar esses cenários, ajuste o campo file-cache:max-size-mb da configuração de cache de arquivos para um valor menor.
    • Para outras famílias de TPU, recomendamos usar pd-balanced ou pd-ssd. O tipo de disco padrão para o disco de inicialização no GKE é pd-balanced.
  • Evite usar o disco de inicialização para armazenamento em cache, porque isso pode reduzir o desempenho e causar encerramentos inesperados. Em vez disso, use um PersistentVolume com suporte de armazenamento em blocos durável.

Usar o armazenamento em cache de arquivos com base em disco de RAM

É possível usar um disco RAM para cache de arquivos ou download paralelo e reduzir a sobrecarga de usar um disco de inicialização se você estiver usando uma VM da TPU com RAM suficientemente grande.

Para usar um disco RAM com o driver CSI do Cloud Storage FUSE, adicione o seguinte ao manifesto:

volumes:
  - name: gke-gcsfuse-cache
    emptyDir:
      medium: Memory

Cache de estatísticas

O driver CSI do Cloud Storage FUSE melhora o desempenho armazenando em cache metadados de arquivos, como tamanho e tempo de modificação. O driver CSI ativa esse cache de estatísticas por padrão e reduz a latência armazenando informações localmente em vez de solicitá-las repetidamente do Cloud Storage. É possível configurar o tamanho máximo (o padrão é 32 MB) e por quanto tempo os dados permanecem no cache (o padrão é 60 segundos). Ao ajustar o cache de metadados, é possível reduzir as chamadas de API para o Cloud Storage, melhorando o desempenho e a eficiência do aplicativo ao minimizar o tráfego de rede e a latência.

Para saber mais sobre as práticas recomendadas de armazenamento em cache de estatísticas, consulte a visão geral do armazenamento em cache do Cloud Storage FUSE.

Usar a pré-busca de metadados para pré-preencher o cache de metadados

Com a pré-busca de metadados, o driver CSI do Cloud Storage FUSE carrega de forma proativa metadados relevantes sobre os objetos no bucket do Cloud Storage em caches do Cloud Storage FUSE. Essa abordagem reduz as chamadas ao Cloud Storage e é especialmente benéfica para aplicativos que acessam grandes conjuntos de dados com muitos arquivos, como cargas de trabalho de treinamento de IA/ML.

Esse recurso exige a versão 1.32.1-gke.1357001 ou mais recente do GKE. Esse recurso não é compatível com a montagem dinâmica, em que você especifica um sublinhado (_) para ativar todos os buckets que a conta de serviço do Kubernetes pode acessar. Se você usar a montagem dinâmica, a pré-busca de metadados não será realizada.

Para conferir os ganhos de performance da pré-busca de metadados, defina o valor de time to live (TTL) dos itens de cache de metadados como ilimitado. Normalmente, definir um TTL impede que o conteúdo armazenado em cache fique desatualizado. Quando você define o TTL como ilimitado, é preciso tomar precauções para não mudar o conteúdo do bucket fora da banda (permitindo que uma carga de trabalho ou um ator diferente modifique a carga de trabalho). As mudanças fora da banda não ficam visíveis localmente e podem causar problemas de consistência.

Para ativar a pré-busca de metadados, faça as seguintes mudanças na configuração. Recomendamos ativar esse recurso em volumes que são muito lidos.

Para ver um exemplo, consulte a exemplo de código em Melhorar o desempenho de leitura de arquivos grandes usando o download paralelo.

Cache de lista

Para acelerar as listagens de diretórios para aplicativos, ative o armazenamento em cache de listas. Esse recurso armazena listas de diretórios na memória para que as solicitações repetidas possam ser atendidas mais rapidamente. O cache de lista fica desativado por padrão. Para ativá-lo, defina o parâmetro kernel-list-cache-ttl-secs nas opções de montagem. Isso define por quanto tempo as informações são armazenadas em cache.

Melhorar o desempenho de leitura de arquivos grandes usando o download paralelo

O download paralelo do Cloud Storage FUSE pode ser usado para acelerar a leitura de arquivos grandes do Cloud Storage para downloads multithread. O download paralelo do Cloud Storage FUSE pode ser particularmente benéfico para casos de uso de disponibilização do modelo com leituras de mais de 1 GB.

Os downloads paralelos exigem que o cache de arquivos esteja ativado. A partir da versão 1.32.0-gke.1795000 do GKE, o Cloud Storage FUSE aplica estritamente esse requisito e gera o seguinte erro se você tentar usar downloads paralelos sem o cache de arquivos, o que impede a inicialização do 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.

São exemplos comuns:

  • A disponibilização do modelo, em que você precisa de um buffer de pré-busca grande para acelerar o download do modelo durante a inicialização da instância.
  • Restaurações de checkpoints, em que você precisa de um cache de dados somente leitura para melhorar o acesso único a vários arquivos grandes.
Prática recomendada:

Use o download paralelo para aplicativos que executam leituras de arquivos grandes de thread único. Aplicativos com alto paralelismo de leitura (que usam mais de oito threads) podem apresentar um desempenho menor com esse recurso.

Para usar o download paralelo com o driver CSI do Cloud Storage FUSE, siga estas etapas:

  1. Crie um cluster com o armazenamento em cache de arquivos ativado, conforme descrito em Ativar e usar o armazenamento em cache de arquivos.

  2. No manifesto, configure estas outras configurações usando opções de montagem para ativar o download paralelo:

    1. Defina file-cache:enable-parallel-downloads:true.
    2. Ajuste file-cache:parallel-downloads-per-file, file-cache:parallel-downloads-per-file, file-cache:max-parallel-downloads e file-cache:download-chunk-size-mb conforme necessário.
  3. (Opcional) Se precisar, ajuste estes atributos de volume:

Reduzir o consumo de cota das verificações de controle de acesso

Por padrão, o driver CSI realiza verificações de controle de acesso para garantir que a conta de serviço do pod tenha acesso aos seus buckets do Cloud Storage. Isso resulta em sobrecarga adicional na forma de API do serviço Kubernetes, Security Token Service e chamadas do IAM. A partir da versão 1.29.9-gke.1251000 do GKE, é possível usar o atributo de volume skipCSIBucketAccessCheck para ignorar essas verificações redundantes e reduzir o consumo de cota.

Exemplo de veiculação de inferência

O exemplo a seguir mostra como ativar o download paralelo para o serviço de inferência:

  1. Crie um manifesto de PersistentVolume e PersistentVolumeClaim com a seguinte especificação:

    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
    

    Substitua os seguintes valores:

    • NAMESPACE: o namespace do Kubernetes em que você quer implantar o pod.
    • BUCKET_NAME: o nome do bucket do Cloud Storage especificado ao configurar o acesso aos buckets do Cloud Storage. É possível especificar um sublinhado (_) para ativar todos os buckets que a conta de serviço do Kubernetes pode acessar. Para saber mais, consulte Ativação dinâmica na documentação do Cloud Storage FUSE.
  2. Aplique o manifesto ao cluster:

    kubectl apply -f PV_FILE_PATH
    

    Substitua PV_FILE_PATH pelo caminho para o arquivo YAML.

  3. Crie um manifesto do pod com a seguinte especificação para consumir o PersistentVolumeClaim, dependendo se você está usando o cache de arquivos com suporte de SSD local ou o cache de arquivos com suporte de disco RAM:

    SSD local

    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 de 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. Aplique o manifesto ao cluster:

    kubectl apply -f POD_FILE_PATH
    

    Substitua POD_FILE_PATH pelo caminho para o arquivo YAML.

Configurar atributos de volume

Com os atributos de volume, é possível configurar um comportamento específico do driver CSI do Cloud Storage FUSE.

O driver CSI do Cloud Storage FUSE não permite especificar diretamente o arquivo de configuração do Cloud Storage FUSE. É possível configurar alguns dos campos no arquivo de configuração usando os atributos de volume do CSI do Cloud Storage FUSE. O driver CSI processa a tradução dos valores de atributos de volume para os campos do arquivo de configuração.

Para conferir a lista completa de atributos de volume compatíveis, consulte a Referência de atributos de volume.

É possível especificar os atributos de volume das seguintes maneiras:

  • No campo spec.csi.volumeAttributes em um manifesto PersistentVolume, se você usar volumes permanentes.
  • No campo spec.volumes[n].csi.volumeAttributes, se você usar volumes temporários de CSI.

No manifesto, os atributos de volume podem ser especificados como pares de chave-valor. Exemplo:

volumeAttributes:
  mountOptions: "implicit-dirs"
  fileCacheCapacity: "-1"
  gcsfuseLoggingSeverity: warning

Métricas do Cloud Storage FUSE

As seguintes métricas do Cloud Storage FUSE agora estão disponíveis na API GKE Monitoring. Detalhes sobre métricas do Cloud Storage FUSE, como rótulos, tipo e unidade, podem ser encontrados em Métricas do sistema do GKE. Essas métricas estão disponíveis para cada pod que usa o Cloud Storage FUSE, e é possível usá-las para configurar insights por volume e bucket.

As métricas são ativadas por padrão a partir da versão 1.33.0-gke.2248000 ou mais recente do GKE. Para desativar, defina o atributo de volume disableMetrics como "true".

Métricas do sistema de arquivos

As métricas do sistema de arquivos rastreiam o desempenho e a integridade dele, incluindo o número de operações, erros e velocidade de operação. Essas métricas podem ajudar a identificar gargalos e otimizar o desempenho.

  • gcsfusecsi/fs_ops_count
  • gcsfusecsi/fs_ops_error_count
  • gcsfusecsi/fs_ops_latency

Métricas do Cloud Storage

É possível monitorar as métricas do Cloud Storage, incluindo volume de dados, velocidade e atividade de solicitação, para entender como seus aplicativos interagem com os buckets do Cloud Storage. Esses dados podem ajudar você a identificar áreas de otimização, como melhorar os padrões de leitura ou reduzir o número de solicitações.

  • 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

Métricas de cache de arquivos

É possível monitorar métricas de cache de arquivos, incluindo volume de dados lidos, velocidade e taxa de ocorrência em cache, para otimizar o desempenho do Cloud Storage FUSE e dos aplicativos. Analise essas métricas para melhorar sua estratégia de armazenamento em cache e maximizar os acertos de cache.

  • gcsfusecsi/file_cache_read_bytes_count
  • gcsfusecsi/file_cache_read_latencies
  • gcsfusecsi/file_cache_read_count

Ativar os padrões de desempenho do Cloud Storage FUSE

A partir da versão 1.33.2-gke.1043000, o GKE ativa automaticamente vários padrões para o Cloud Storage FUSE executado em nós com suporte de tipos de máquinas de alta performance.

Durante a montagem do volume, o driver CSI do Cloud Storage FUSE busca o tipo de instância do nó de destino e o transmite para o Cloud Storage FUSE usando uma nova opção de montagem machine-type.

Quando um tipo de máquina de alto desempenho é transmitido, o Cloud Storage FUSE define automaticamente as seguintes opções de montagem padrão:

  • 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 alguma dessas opções de montagem for especificada explicitamente, ela não será substituída pelos padrões automáticos.

Para desativar o recurso, inclua disable-autoconfig nas opções de ativação. Exemplo:

mountOptions: "implicit-dirs,disable-autoconfig"

Práticas recomendadas para ajuste de desempenho

Esta seção lista algumas técnicas recomendadas de ajuste e otimização de desempenho para o driver CSI do Cloud Storage FUSE.

  • Aproveite os buckets de namespace hierárquico (HNS):escolha buckets de HNS para aumentar em oito vezes as consultas iniciais por segundo (QPS). Essa escolha também facilita renomeações rápidas e atômicas de diretórios, um requisito crucial para a criação eficiente de pontos de verificação com o Cloud Storage FUSE. Os buckets do HNS garantem uma experiência melhor semelhante a arquivos, oferecendo suporte a 40.000 solicitações de leitura de objetos e 8.000 solicitações de gravação de objetos por segundo, uma melhoria significativa em comparação com as 8.000 solicitações de leitura de objetos e 1.000 solicitações de gravação de objetos por segundo oferecidas pelos buckets simples.

  • Ative diretórios específicos quando possível:se sua carga de trabalho envolver o acesso a um diretório específico em um bucket, use a flag --only-dir durante a ativação. Essa abordagem focada acelera as chamadas de lista, porque limita o escopo das chamadas LookUpInode, que envolvem uma chamada list+stat para cada arquivo ou diretório no caminho especificado. Ao restringir a montagem ao subdiretório necessário, você minimiza essas chamadas, o que melhora o desempenho.

  • Otimize o armazenamento em cache de metadados:configure os caches de metadados para maximizar a capacidade deles e defina um time to live (TTL) infinito. Essa prática armazena em cache todos os metadados acessados durante a execução do job, minimizando as solicitações de acesso a metadados do Cloud Storage. Essa configuração é especialmente útil para volumes somente leitura, porque elimina pesquisas repetidas de metadados do Cloud Storage. No entanto, verifique se o consumo de memória associado a esses grandes caches de metadados está alinhado com os recursos do seu sistema.

  • Maximizar os recursos de sidecar do GKE:o Cloud Storage FUSE opera em um contêiner sidecar em um ambiente do GKE. Para evitar gargalos de recursos, remova as limitações no consumo de CPU e memória do contêiner sidecar. Isso permite que o Cloud Storage FUSE dimensione a utilização de recursos com base nas demandas de carga de trabalho, evitando a limitação e garantindo a capacidade de transferência ideal.

  • Preencha o cache de metadados de forma proativa:ative a pré-busca de metadados para o driver CSI. Isso preenche de maneira eficiente os caches de metadados e de listas, minimizando as chamadas de metadados para o Cloud Storage e acelerando a execução inicial. Muitos frameworks de ML fazem isso automaticamente, mas é fundamental garantir essa etapa para o código de treinamento personalizado. Para saber mais, consulte Usar a pré-busca de metadados para pré-preencher o cache de metadados.

  • Use o cache de arquivos e downloads paralelos:ative o recurso de cache de arquivos, principalmente para cargas de trabalho de treinamento de várias épocas, em que os dados são lidos repetidamente. O cache de arquivos armazena dados acessados com frequência no armazenamento local (SSD no caso de máquinas A3), melhorando o desempenho de leitura. Complemente isso com o recurso de downloads paralelos, principalmente para veicular cargas de trabalho, para acelerar o download de arquivos grandes dividindo-os em partes menores e baixando-os simultaneamente.

  • Otimizar pontos de verificação:para pontos de verificação com o Cloud Storage FUSE, recomendamos usar um bucket do HNS. Se você estiver usando um bucket que não é do HNS, defina o parâmetro rename-dir-limit com um valor alto para acomodar as renomeações de diretório usadas com frequência por frameworks de ML durante o checkpoint. No entanto, renomeações de diretórios em buckets não HNS podem não ser atômicas e podem levar mais tempo para serem concluídas.

  • Ativar o cache de lista:use a flag --kernel-list-cache-ttl-secs para ativar o cache de lista do Engage e melhorar ainda mais a performance. Esse recurso armazena em cache as listagens de diretórios e arquivos, melhorando a velocidade das operações ls. O cache de listas é especialmente útil para cargas de trabalho que envolvem listagens completas de diretórios repetidas, comuns em cenários de treinamento de IA/ML. É recomendável usar o armazenamento em cache de listas com montagens somente leitura para manter a consistência dos dados.

  • Aumentar a leitura antecipada do kernel:para cargas de trabalho que envolvem principalmente leituras sequenciais de arquivos grandes, como veiculação e restauração de pontos de controle, aumentar o tamanho da leitura antecipada pode melhorar significativamente o desempenho. Para aumentar o readahead do Cloud Storage FUSE, especifique a flag read_ahead_kb em mountOptions e defina como 1 MB (por exemplo, read_ahead_kb=1024). Esse recurso requer o GKE versão 1.32.2-gke.1297001 ou mais recente.

  • Ativar gravações por streaming:as gravações por streaming são um novo caminho de gravação que faz upload de dados diretamente para o Cloud Storage à medida que são gravados. Essa abordagem é diferente do método de gravação padrão, que prepara temporariamente toda a gravação em um diretório local e depois faz o upload para o Cloud Storage em uma operação close ou fsync. As gravações de streaming reduzem a latência e o uso de espaço em disco, o que é especialmente benéfico para gravações grandes e sequenciais, como pontos de verificação. Para ativar gravações de streaming, especifique a flag de linha de comando enable-streaming-writes em mountOptions.

A seguir