Colocação em cache de ficheiros no FUSE do Cloud Storage

Este documento fornece uma vista geral da colocação em cache de ficheiros do FUSE do Cloud Storage e instruções sobre como configurar e usar a colocação em cache de ficheiros.

A colocação em cache de ficheiros FUSE do Cloud Storage é uma cache de leitura do lado do cliente que melhora o desempenho das operações de leitura ao disponibilizar leituras de ficheiros repetidas a partir de um armazenamento em cache mais rápido à sua escolha. Quando o armazenamento em cache de ficheiros está ativado, o FUSE do Cloud Storage armazena cópias de ficheiros acedidos com frequência localmente, o que permite que as leituras subsequentes sejam fornecidas diretamente a partir da cache, o que reduz a latência e melhora o débito.

Vantagens do armazenamento em cache de ficheiros

O armazenamento em cache de ficheiros oferece as seguintes vantagens:

  • Desempenho melhorado para E/S pequenas e aleatórias: o armazenamento em cache de ficheiros melhora a latência e o débito ao fornecer leituras diretamente a partir do suporte de cache. As operações de E/S pequenas e aleatórias podem ser significativamente mais rápidas quando são servidas a partir da cache.

  • Transferências paralelas ativadas automaticamente: as transferências paralelas são ativadas automaticamente nas versões 2.12 e posteriores do FUSE do Cloud Storage quando a cache de ficheiros está ativada. As transferências paralelas usam vários trabalhadores para transferir um ficheiro em paralelo usando o diretório da cache de ficheiros como um buffer de obtenção prévia, o que pode resultar num tempo de carregamento do modelo até nove vezes mais rápido. Recomendamos que use transferências paralelas para cenários de leitura de thread único que carregam ficheiros grandes, como a publicação de modelos e os restauros de pontos de verificação.

  • Utilização da capacidade existente: o armazenamento em cache de ficheiros pode usar a capacidade da máquina aprovisionada existente para o diretório da cache sem incorrer em custos de armazenamento adicional. Isto inclui SSDs locais fornecidos com tipos de máquinas de GPUs do Google Cloud, como a2-ultragpu, a3-highgpu, disco persistente (que é o disco de arranque usado por cada VM) ou /tmpfs

  • Redução dos custos: os resultados da cache são apresentados localmente e não incorrem em custos de rede ou de operação do Cloud Storage.

  • Custo total de propriedade melhorado para a preparação de IA e AA: o armazenamento em cache de ficheiros aumenta a utilização das GPUs e das TPUs da nuvem ao carregar os dados mais rapidamente, o que reduz o tempo de preparação e oferece uma melhor relação preço/desempenho para as cargas de trabalho de preparação de inteligência artificial e aprendizagem automática (IA/AA).

Transferências paralelas

As transferências paralelas podem melhorar o desempenho de leitura através da utilização de vários trabalhadores para transferir várias partes de um ficheiro em paralelo através do diretório da cache de ficheiros como um buffer de obtenção prévia. Recomendamos a utilização de transferências paralelas para cenários de leitura que carregam ficheiros grandes, como o serviço de modelos, as restaurações de pontos de verificação e a preparação em objetos grandes.

Seguem-se alguns exemplos de utilização da ativação da colocação em cache de ficheiros com transferências paralelas:

Tipo de exemplo de utilização Descrição
Formação Ative o armazenamento em cache de ficheiros se os dados aos quais quer aceder forem lidos várias vezes, quer seja o mesmo ficheiro várias vezes ou diferentes deslocamentos do mesmo ficheiro. Se o conjunto de dados for maior do que a cache de ficheiros, a cache de ficheiros deve permanecer desativada e, em alternativa, use um dos seguintes métodos:
Publicação de ponderações de modelos e leituras de pontos de verificação Ative a colocação em cache de ficheiros com transferências em paralelo para poder usar transferências em paralelo, que carregam ficheiros grandes muito mais rapidamente do que se a colocação em cache de ficheiros e as transferências em paralelo não forem usadas.

Considerações

  • Tempo de vida (TTL) da cache de ficheiros: se uma entrada da cache de ficheiros ainda não tiver expirado com base no respetivo TTL e o ficheiro estiver na cache, as operações de leitura desse ficheiro são fornecidas a partir da cache do cliente local sem que seja emitido qualquer pedido para o Cloud Storage.

  • Expiração da entrada de cache de ficheiros: se uma entrada de cache de ficheiros tiver expirado, é feita primeiro uma chamada de atributos de ficheiros para o Cloud Storage.GET Se o ficheiro estiver em falta ou os respetivos atributos ou conteúdos tiverem sido alterados, o novo conteúdo é obtido. Se os atributos tiverem sido apenas invalidados, mas o conteúdo permanecer válido, o que significa que a geração de objetos não foi alterada, o conteúdo é publicado a partir da cache apenas depois de a chamada de atributo confirmar a respetiva validade. Ambas as operações incorrem em latências de rede.

  • Invalidar a cache de ficheiros: quando um cliente do FUSE do Cloud Storage modifica um ficheiro em cache ou os respetivos atributos, a entrada de cache desse cliente é imediatamente invalidada para garantir a consistência. No entanto, outros clientes que acedem ao mesmo ficheiro continuam a ler as respetivas versões em cache até que as definições de TTL individuais provoquem uma invalidação.

  • Tamanho do ficheiro e capacidade disponível: o ficheiro que está a ser lido tem de caber na capacidade disponível no diretório da cache de ficheiros, que pode ser controlada através da opção --file-cache-max-size-mb ou do campo file-cache:max-size-mb.

  • Remoção da cache: a remoção dos metadados e dos dados em cache baseia-se num algoritmo de menos usados recentemente (LRU) 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 respetivo TTL, é feita primeiro uma chamada de metadados para o Cloud Storage e está sujeita a latências de rede.GET Uma vez que os dados e os metadados são geridos separadamente, pode ocorrer a remoção ou a invalidação de uma entidade e não da outra.

  • Persistência da cache: as caches do FUSE do Cloud Storage não são persistidas em desmontagens e reinícios. Para a colocação em cache de ficheiros, embora as entradas de metadados necessárias para disponibilizar ficheiros a partir da cache sejam removidas em desmontagens e reinícios, os dados na cache de ficheiros podem ainda estar presentes no diretório de ficheiros. Recomendamos que elimine os dados no diretório da cache de ficheiros após a desmontagem ou o reinício.

  • Gestão de leitura aleatória e parcial: quando a primeira operação de leitura de ficheiros começa a partir do início do ficheiro, no deslocamento 0, a cache de ficheiros do Cloud Storage FUSE introduz e carrega o ficheiro completo na cache, mesmo que esteja a ler apenas a partir de um pequeno subconjunto de intervalos. Isto permite que as leituras aleatórias ou parciais subsequentes do mesmo objeto sejam publicadas diretamente a partir da cache.

    Por predefinição, a leitura a partir de qualquer outro deslocamento não aciona uma obtenção assíncrona do ficheiro completo. Para alterar este comportamento de modo que o Cloud Storage FUSE carregue um ficheiro para a 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 ative esta propriedade se forem realizadas muitas operações de leitura aleatórias ou parciais diferentes no mesmo objeto.

  • Segurança dos dados: quando ativa o armazenamento em cache, o Cloud Storage FUSE usa o diretório de cache especificado através da opção --cache-dir ou do campo cache-dir como o diretório subjacente para que a cache persista os ficheiros do seu contentor do Cloud Storage num formato encriptado. Qualquer utilizador ou processo que tenha acesso a este diretório de cache pode aceder a estes ficheiros. Recomendamos que restrinja o acesso a este diretório.

  • Acesso direto ou múltiplo à cache de ficheiros: a utilização de um processo que não seja o FUSE do Cloud Storage para aceder ou modificar um ficheiro no diretório da cache pode levar à danificação de dados. As caches do FUSE do Cloud Storage são específicas de cada processo de execução do FUSE do Cloud Storage, sem conhecimento dos diferentes processos do FUSE do Cloud Storage em execução na mesma máquina ou em máquinas diferentes. Por conseguinte, não recomendamos a utilização do mesmo diretório de cache para diferentes processos do FUSE do armazenamento na nuvem.

  • Executar vários processos FUSE do Cloud Storage na mesma máquina: se for necessário executar vários processos FUSE do Cloud Storage na mesma máquina, cada processo FUSE do Cloud Storage deve ter o seu próprio diretório de cache específico ou usar um dos seguintes métodos para garantir que os seus dados não são danificados:

    • Montar todos os contentores com uma cache partilhada: use a montagem dinâmica para montar todos os contentores aos quais tem acesso num único processo com uma cache partilhada. Para saber mais, consulte o artigo Montagem dinâmica do FUSE do Cloud Storage.

    • Ativar o armazenamento em cache num contentor específico: ative o armazenamento em cache apenas num contentor especificado através da montagem estática. Para saber mais, consulte o artigo Montagem estática do FUSE do Cloud Storage.

    • Colocar em cache apenas uma pasta ou um diretório específico: monte e coloque em cache apenas uma pasta específica ao nível do contentor em vez de montar um contentor inteiro. Para saber mais, consulte o artigo Monte um diretório num contentor.

Antes de começar

A cache de ficheiros requer um caminho de diretório para ser usada para colocar ficheiros em cache. Pode criar um novo diretório num sistema de ficheiros existente ou criar um novo sistema de ficheiros num armazenamento aprovisionado. Se estiver a aprovisionar novo armazenamento para utilização, siga as instruções abaixo para criar um novo sistema de ficheiros:

  1. Para o Google Cloud Hyperdisk, consulte o artigo Crie um novo volume do Google Cloud Hyperdisk.

  2. Para o Persistent Disk, consulte o artigo Crie um novo volume do Persistent Disk.

  3. Para SSDs locais, consulte o artigo Adicione um SSD local à sua VM.

  4. Para discos RAM na memória, consulte o artigo Criar discos RAM na memória.

Ative e configure o comportamento da colocação em cache de ficheiros

  1. Selecione o método através do qual quer ativar e configurar o armazenamento em cache de ficheiros com um dos seguintes métodos:

  2. Especifique o diretório da cache que quer usar com um dos seguintes métodos. Isto permite-lhe ativar a cache de ficheiros para implementações do Google Kubernetes Engine que não sejam da Google:

    Se estiver a usar uma implementação do Google Kubernetes Engine com o controlador CSI do FUSE do Cloud Storage para o Google Kubernetes Engine, especifique um dos seguintes métodos:

  3. Opcional: ative as transferências em paralelo definindo um dos seguintes métodos como true se as transferências em paralelo não tiverem sido ativadas automaticamente:

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

    Também pode especificar um valor em MiB ou GiB para limitar o tamanho da cache.

  5. Opcional: ignore a expiração do TTL das entradas em cache e publique metadados de ficheiros a partir da cache, se estiverem disponíveis, através de um dos seguintes métodos e definindo um valor de -1:

    A predefinição é de 60 segundos e um valor de -1 define-o como ilimitado. Também pode especificar um valor elevado com base nos seus requisitos. Recomendamos que defina o valor de ttl-secs o mais alto possível, de acordo com a sua carga de trabalho. Para mais informações sobre o TTL para entradas em cache, consulte as Considerações.

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

  7. Opcional: configure a colocação em cache de estatísticas e a colocação em cache de tipos. Para saber mais sobre as caches de estatísticas e de tipos, consulte o artigo Vista geral da colocação em cache de tipos ou Vista geral da colocação em cache de estatísticas.

  8. Execute manualmente o comando ls -R no seu contentor montado antes de executar a carga de trabalho para pré-preencher os metadados e garantir que a cache de tipos é preenchida antes da primeira leitura através de um método mais rápido e em lote. Para mais informações sobre como melhorar o desempenho da primeira leitura, consulte o artigo Melhore as primeiras leituras.

Depois de ativar a colocação em cache de ficheiros, as transferências paralelas são ativadas automaticamente nas versões 2.12 e posteriores do FUSE do Cloud Storage. Se estiver a usar uma versão mais antiga do Cloud Storage FUSE, defina a opção enable-parallel-downloads como true para ativar as transferências em paralelo.

Configure propriedades de apoio para transferências em paralelo

Opcionalmente, pode configurar as seguintes propriedades de suporte para transferências paralelas através da CLI do FUSE do Cloud Storage ou de um ficheiro de configuração do FUSE do Cloud Storage:

Descrição da propriedade Opção gcsfuse Campo do ficheiro de configuração
O número máximo de trabalhadores que podem ser gerados por ficheiro para transferir o objeto do Cloud Storage para a cache de ficheiros. --file-cache-parallel-downloads-per-file file-cache:parallel-downloads-per-file
O número máximo de trabalhadores que podem ser gerados em qualquer altura em todas as tarefas de transferência de ficheiros. A predefinição está definida para o dobro do número de núcleos da CPU na sua máquina. Para não especificar nenhum limite, introduza o valor "-1". --file-cache-max-parallel-downloads file-cache:max-parallel-downloads
O tamanho de cada pedido de leitura em MiB que cada trabalhador faz ao Cloud Storage quando transfere o objeto para a cache de ficheiros. Tenha em atenção que uma transferência paralela só é acionada se o ficheiro que está a ser lido tiver o tamanho especificado. --file-cache-download-chunk-size-mb file-cache:download-chunk-size-mb

Desative as transferências em paralelo

Para desativar as transferências paralelas, defina uma das seguintes opções como false:

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

O que se segue?