Armazenamento em cache de arquivos no Cloud Storage FUSE

Este documento oferece uma visão geral do armazenamento em cache de arquivos do Cloud Storage FUSE e instruções sobre como configurar e usar esse recurso.

O armazenamento em cache de arquivos do Cloud Storage FUSE é um cache de leitura do lado do cliente que melhora o desempenho das operações de leitura ao veicular leituras repetidas de arquivos de um armazenamento em cache mais rápido de sua escolha. Quando o armazenamento em cache de arquivos está ativado, o Cloud Storage FUSE armazena cópias de arquivos acessados com frequência localmente, permitindo que leituras subsequentes sejam veiculadas diretamente do cache, o que reduz a latência e melhora a capacidade de transferência.

Benefícios do armazenamento em cache de arquivos

O armazenamento em cache de arquivos oferece os seguintes benefícios:

  • Melhor desempenho para E/S pequenas e aleatórias: o armazenamento em cache de arquivos melhora a latência e a capacidade veiculando leituras diretamente da mídia de cache. Operações de E/S pequenas e aleatórias podem ser significativamente mais rápidas quando exibidas do cache.

  • Downloads paralelos ativados automaticamente: os downloads paralelos são ativados automaticamente no Cloud Storage FUSE versões 2.12 e mais recentes quando o cache de arquivos está ativado. Os downloads paralelos usam vários workers para baixar um arquivo em paralelo usando o diretório de cache de arquivos como um buffer de pré-busca, o que pode resultar em um tempo de carregamento do modelo até nove vezes mais rápido. Recomendamos que você use downloads paralelos para cenários de leitura de linha única que carregam arquivos grandes, como a veiculação de modelos e restaurações de pontos de controle.

  • Uso da capacidade atual: o armazenamento em cache de arquivos pode usar a capacidade da máquina provisionada atual do seu diretório de cache sem gerar cobranças de armazenamento adicional. Isso inclui SSDs locais que vêm com tipos de máquina das GPUs do Cloud, como a2-ultragpu, a3-highgpu, Persistent Disk (que é o disco de inicialização usado por cada VM) ou /tmpfs na memória.

  • Cobranças reduzidas: as ocorrências em cache são veiculadas localmente e não geram cobranças de operações do Cloud Storage nem de rede.

  • Melhoria no custo total de propriedade para treinamento de IA e ML: o armazenamento em cache de arquivos aumenta a utilização das GPUs do Cloud e da Cloud TPU ao carregar dados mais rapidamente, o que reduz o tempo de treinamento e oferece uma relação melhor custo-benefício para cargas de trabalho de treinamento de inteligência artificial e machine learning (IA/ML).

Downloads paralelos

Os downloads paralelos podem melhorar o desempenho de leitura usando vários workers para baixar várias partes de um arquivo em paralelo usando o diretório de cache de arquivos como um buffer de pré-busca. Recomendamos o uso de downloads paralelos para cenários de leitura que carregam arquivos grandes, como veiculação de modelos, restaurações de pontos de controle e treinamento em objetos grandes.

Os casos de uso para ativar o armazenamento em cache de arquivos com downloads paralelos incluem o seguinte:

Tipo de caso de uso Descrição
Treinamento Ative o armazenamento em cache de arquivos se os dados que você quer acessar forem lidos várias vezes, seja o mesmo arquivo várias vezes ou diferentes intervalos do mesmo arquivo. Se o conjunto de dados for maior que o cache de arquivos, ele vai permanecer desativado. Em vez disso, use um dos seguintes métodos:
Veiculação de pesos de modelo e leituras de checkpoint Ative o armazenamento em cache de arquivos com downloads paralelos para usar downloads paralelos, que carregam arquivos grandes muito mais rápido do que se o armazenamento em cache de arquivos e os downloads paralelos não forem usados.

Considerações

  • Time to live (TTL) do cache de arquivos: se uma entrada de cache de arquivos ainda não tiver expirado com base no TTL e o arquivo estiver no cache, as operações de leitura desse arquivo serão disponibilizadas a partir do cache do cliente local sem que nenhuma solicitação seja emitida para o Cloud Storage.

  • Expiração da entrada de cache de arquivos: se uma entrada de cache de arquivos tiver expirado, uma chamada de atributos de arquivo GET será feita primeiro para o Cloud Storage. Se o arquivo estiver ausente ou se os atributos ou o conteúdo dele tiverem mudado, o novo conteúdo será recuperado. Se os atributos foram apenas invalidados, mas o conteúdo permanece válido, ou seja, a geração de objetos não mudou, o conteúdo será veiculado do cache somente depois que a chamada de atributo confirmar a validade dele. Ambas as operações causam latências de rede.

  • Invalidação do cache de arquivos: quando um cliente do Cloud Storage FUSE modifica um arquivo armazenado em cache ou os atributos dele, a entrada de cache desse cliente é imediatamente invalidada para garantir a consistência. No entanto, outros clientes que acessam o mesmo arquivo continuam lendo as versões armazenadas em cache até que as configurações individuais de TTL causem uma invalidação.

  • Tamanho do arquivo e capacidade disponível: o arquivo lido precisa caber na capacidade disponível do diretório de cache de arquivos, que pode ser controlada usando a opção --file-cache-max-size-mb ou o campo file-cache:max-size-mb.

  • Remoção de cache: a remoção de metadados e dados armazenados em cache é baseada em um algoritmo usado menos recentemente (LRU, na sigla em inglês) que começa quando o limite de espaço configurado por limite de --file-cache-max-size-mb é atingido. Se a entrada expirar com base no TTL, uma chamada de metadados GET será feita primeiro para o Cloud Storage e estará sujeita a latências de rede. Como os dados e metadados são gerenciados separadamente, é possível que uma entidade seja removida ou invalidada e não a outra.

  • Permanência do cache: os caches do Cloud Storage FUSE não são mantidos após a desmontagem e reinicialização. Para o armazenamento em cache de arquivos, embora as entradas de metadados necessárias para veicular arquivos do cache sejam removidas em desmontagens e reinicializações, os dados no cache de arquivos ainda podem estar presentes no diretório de arquivos. Recomendamos que você exclua os dados no diretório de cache de arquivos após desmontagens ou reinicializações.

  • Gerenciamento de leitura aleatória e parcial: quando a primeira operação de leitura de arquivo começa no início do arquivo, no deslocamento 0, o cache de arquivos do Cloud Storage FUSE ingere e carrega todo o arquivo no cache, mesmo que você esteja lendo apenas de um subconjunto pequeno. Isso permite que leituras aleatórias ou parciais subsequentes do mesmo objeto sejam veiculadas diretamente no cache.

    Por padrão, a leitura de qualquer outro deslocamento não aciona uma busca assíncrona de arquivo completo. Para mudar esse comportamento e fazer com que o Cloud Storage FUSE ingira um arquivo no cache após uma leitura aleatória inicial, defina a opção --file-cache-cache-file-for-range-read ou o campo file-cache:cache-file-for-range-read como true.

    Recomendamos que você ative essa propriedade se muitas operações de leitura aleatória ou parcial diferentes forem executadas no mesmo objeto.

  • Segurança de dados: quando você ativa o armazenamento em cache, o Cloud Storage FUSE usa o diretório de cache especificado com a opção --cache-dir ou o campo cache-dir como o diretório subjacente para o cache manter os arquivos do bucket do Cloud Storage em um formato criptografado. Qualquer usuário ou processo com acesso a esse diretório de cache pode acessar esses arquivos. Recomendamos restringir o acesso a esse diretório.

  • Acesso direto ou múltiplo ao cache de arquivos: usar um processo diferente do Cloud Storage FUSE para acessar ou modificar um arquivo no diretório de cache pode corromper os dados. Os caches do Cloud Storage FUSE são específicos para cada processo em execução do Cloud Storage FUSE, sem reconhecimento entre diferentes processos do Cloud Storage FUSE em execução na mesma máquina ou em máquinas diferentes. Portanto, não recomendamos usar o mesmo diretório de cache para diferentes processos do Cloud Storage FUSE.

  • Executar vários processos do Cloud Storage FUSE na mesma máquina: se vários processos do Cloud Storage FUSE precisarem ser executados na mesma máquina, cada processo precisará ter o próprio diretório de cache específico ou usar um dos métodos a seguir para garantir que os dados não sejam corrompidos:

    • Monte todos os buckets com um cache compartilhado: use a montagem dinâmica para ativar todos os buckets a que você tem acesso em um único processo com um cache compartilhado. Para saber mais, consulte Ativação dinâmica do Cloud Storage FUSE.

    • Ativar o armazenamento em cache em um bucket específico: é possível ativar o armazenamento em cache somente em um bucket especificado usando a montagem estática. Para saber mais, consulte Ativação estática do Cloud Storage FUSE.

    • Armazenar em cache somente uma pasta ou um diretório específico: ative e armazene em cache somente uma pasta específica no nível do bucket em vez de ativar um bucket inteiro. Para saber mais, consulte Montar um diretório em um bucket.

Antes de começar

O cache de arquivos exige que um caminho de diretório seja usado para armazenar arquivos em cache. É possível criar um novo diretório em um sistema de arquivos atual ou um novo no armazenamento provisionado. Se você estiver provisionando um novo armazenamento a ser usado, siga as instruções a seguir para criar um novo sistema de arquivos:

  1. Para o Google Cloud Hyperdisk, consulte Criar um volume do Google Cloud Hyperdisk.

  2. Para o Persistent Disk, consulte Criar um novo volume de Persistent Disk.

  3. Para SSDs locais, consulte Adicionar uma SSD local à VM.

  4. Para discos RAM na memória, consulte Como criar discos RAM na memória.

Ativar e configurar o comportamento do armazenamento em cache de arquivos

  1. Selecione o método que você quer usar para ativar e configurar o cache de arquivos:

  2. Especifique o diretório de cache que você quer usar com um dos seguintes métodos. Isso permite ativar o cache de arquivos para implantações que não são do Google Kubernetes Engine:

    Se você estiver usando uma implantação do Google Kubernetes Engine com o driver CSI do Cloud Storage FUSE para o Google Kubernetes Engine, especifique um dos seguintes métodos:

  3. Opcional: ative os downloads paralelos definindo um dos seguintes métodos como true se eles não tiverem sido ativados automaticamente:

  4. Limite a capacidade total que o cache do Cloud Storage FUSE pode usar no diretório ativado ajustando uma das seguintes opções, que é definida automaticamente como um valor de -1 quando você especifica um diretório de cache:

    Você também pode especificar um valor em MiB ou GiB para limitar o tamanho do cache.

  5. Opcional: ignore a expiração de TTL das entradas armazenadas em cache e disponibilize os metadados do arquivo do cache, se ele estiver disponível, usando um dos seguintes métodos e definindo um valor de -1:

    O padrão é de 60 segundos, e um valor de -1 define como ilimitado. Também é possível especificar um valor alto com base nos seus requisitos. Recomendamos definir o valor de ttl-secs como o máximo permitido pela carga de trabalho. Para mais informações sobre o TTL de entradas em cache, consulte Considerações.

  6. Opcional: ative a capacidade do cache de arquivos de carregar de forma assíncrona todo o arquivo no cache se a primeira operação de leitura do arquivo começar de qualquer lugar que não seja offset 0 para que leituras subsequentes de diferentes deslocamentos do mesmo arquivo também possam ser veiculadas do cache. Use um dos seguintes métodos e defina a opção como true:

  7. Opcional: configure o armazenamento em cache de estatísticas e de tipos. Para saber mais sobre caches de estatísticas e tipos, consulte Visão geral do armazenamento em cache de tipos ou Visão geral do armazenamento em cache de estatísticas.

  8. Execute manualmente o comando ls -R no bucket ativado antes de executar a carga de trabalho para pré-preencher os metadados e garantir que o cache de tipos seja preenchido antes da primeira leitura em um método mais rápido e em lote. Para mais informações sobre como melhorar a performance da leitura pela primeira vez, consulte Melhorar as leituras pela primeira vez.

Depois de ativar o armazenamento em cache de arquivos, os downloads paralelos serão ativados automaticamente nas versões 2.12 e mais recentes do Cloud Storage FUSE. Se você estiver usando uma versão mais antiga do Cloud Storage FUSE, defina a opção enable-parallel-downloads como true para ativar os downloads paralelos.

Configurar propriedades de suporte para downloads paralelos

É possível configurar as seguintes propriedades de suporte para downloads paralelos usando a CLI do Cloud Storage FUSE ou um arquivo de configuração do Cloud Storage FUSE:

Descrição da propriedade Opção gcsfuse Campo do arquivo de configuração
O número máximo de workers que podem ser gerados por arquivo para baixar o objeto do Cloud Storage para o cache de arquivos. --file-cache-parallel-downloads-per-file file-cache:parallel-downloads-per-file
O número máximo de workers que podem ser gerados a qualquer momento em todos os jobs de download de arquivos. O padrão é definido como o dobro do número de núcleos de CPU na máquina. Para não especificar um limite, insira o valor `-1`. --file-cache-max-parallel-downloads file-cache:max-parallel-downloads
O tamanho de cada solicitação de leitura em MiB que cada worker faz para o Cloud Storage ao fazer o download do objeto no cache de arquivos. Um download paralelo só é acionado se o arquivo que está sendo lido tiver o tamanho especificado. --file-cache-download-chunk-size-mb file-cache:download-chunk-size-mb

Desativar downloads paralelos

Para desativar os downloads paralelos, defina um dos seguintes como false:

  • Opção gcsfuse: --file-cache-enable-parallel-downloads
  • Campo do arquivo de configuração: file-cache:enable-parallel-downloads

A seguir