Este guia mostra como otimizar o desempenho do controlador CSI do FUSE do Cloud Storage no Google Kubernetes Engine (GKE).
Embora o FUSE do Cloud Storage ofereça flexibilidade e escalabilidade, a configuração e o ajuste cuidadosos são fundamentais para alcançar um desempenho ideal. O desempenho do FUSE do Cloud Storage pode diferir de um sistema de ficheiros POSIX em termos de latência, débito e consistência. O objetivo da otimização é minimizar a sobrecarga das operações de metadados e maximizar a eficiência do acesso aos dados. Se estiver a executar aplicações de IA/AM que consomem dados em contentores do Cloud Storage, a otimização do controlador CSI pode resultar em tempos de preparação e inferência mais rápidos para as suas aplicações de IA/AM.
Este guia destina-se a programadores e engenheiros de aprendizagem automática (AA) que pretendam melhorar o desempenho das respetivas aplicações que acedem a dados armazenados em contentores do Cloud Storage.
Antes de ler esta página, certifique-se de que conhece os conceitos básicos do Cloud Storage, do Kubernetes e do controlador CSI do FUSE do Cloud Storage. Certifique-se de que também verifica os requisitos da versão do GKE para funcionalidades específicas que quer usar.
Configure as opções de montagem
O controlador CSI FUSE do Cloud Storage suporta opções de montagem para configurar a forma como os contentores do Cloud Storage são montados no seu sistema de ficheiros local. Para ver a lista completa de opções de montagem suportadas, consulte a documentação de ficheiros da CLI FUSE do Cloud Storage.
Pode especificar opções de montagem das seguintes formas, consoante o tipo de volume que estiver a usar:
Volume efémero da CSI
Se usar volumes efémeros da CSI, especifique as opções de montagem no campo spec.volumes[n].csi.volumeAttributes.mountOptions
do manifesto do pod.
Tem de especificar as opções de montagem como uma string, com flags separadas por vírgulas e sem espaços. Por exemplo:
mountOptions: "implicit-dirs,file-cache=enable-parallel-downloads=true,file-cache=download-chunk-size-mb=3"
Volume persistente
Se usar volumes persistentes, especifique as opções de montagem no campo spec.mountOptions
no manifesto PersistentVolume.
Tem de especificar as opções de montagem como uma lista. Por exemplo:
mountOptions:
- implicit-dirs
- file-cache=enable-parallel-downloads=true
- file-cache=download-chunk-size-mb=3
Considerações sobre a montagem
Tenha em atenção as seguintes considerações ao configurar montagens com o controlador CSI:
Considerações gerais
- As seguintes flags não são permitidas:
app-name
,temp-dir
,foreground
,log-file
,log-format
,key-file
,token-url
ereuse-token-from-url
. - Por predefinição, o Cloud Storage FUSE não torna os diretórios implícitos visíveis.
- Se quiser montar apenas um diretório no contentor em vez de todo o contentor, transmita o caminho relativo do diretório através da flag
only-dir=relative/path/to/the/bucket/root
.
Segurança e autorizações
- Se usar um Security Context para o seu pod ou contentor, ou se a imagem do contentor usar um utilizador ou um grupo não raiz, tem de definir as flags de montagem
uid
egid
. Também tem de usar as flags de montagemfile-mode
edir-mode
para definir as autorizações do sistema de ficheiros. Tenha em atenção que não pode executar comandoschmod
,chown
ouchgrp
num sistema de ficheiros FUSE do Cloud Storage. Por isso, use as flags de montagemuid
,gid
,file-mode
edir-mode
para obter acesso para um utilizador ou um grupo não raiz.
Opções de montagem do kernel do Linux
- Se precisar de configurar as opções de montagem do kernel do Linux, pode transmitir as opções através da flag
o
. Por exemplo, se não quiser permitir a execução direta de ficheiros binários no sistema de ficheiros montado, defina a flago=noexec
. Cada opção requer um sinalizador separado, por exemplo,o=noexec
,o=noatime
. Apenas são permitidas as seguintes opções:exec
,noexec
,atime
,noatime
,sync
,async
edirsync
.
Configure a colocação em cache
Esta secção fornece uma vista geral das opções de colocação em cache disponíveis com o controlador CSI do FUSE do Cloud Storage para melhorar o desempenho.
Colocação em cache de ficheiros
Pode usar o controlador CSI FUSE do Cloud Storage com o armazenamento em cache de ficheiros para melhorar o desempenho de leitura das aplicações que processam ficheiros pequenos de contentores do Cloud Storage. A funcionalidade de cache de ficheiros FUSE do Cloud Storage é uma cache de leitura baseada no cliente que permite que as leituras repetidas de ficheiros sejam fornecidas mais rapidamente a partir do armazenamento em cache à sua escolha.
Pode escolher entre várias opções de armazenamento para a cache de leitura, incluindo SSD local, armazenamento em bloco duradouro, como o Google Cloud Hyperdisk ou o disco persistente, e disco RAM (memória), com base nas suas necessidades de preço/desempenho.
Ative e use a colocação em cache de ficheiros
Por predefinição, a funcionalidade de colocação em cache de ficheiros está desativada no GKE. Tem de ativar a opção para ativar o armazenamento em cache de ficheiros com o controlador CSI do FUSE do Cloud Storage.
Para ativar e controlar o armazenamento em cache de ficheiros, defina o atributo de volume
fileCacheCapacity
ou use a opção de montagem file-cache:max-size-mb
.
Por predefinição, o GKE usa um volume emptyDir
para a colocação em cache de ficheiros do Cloud Storage FUSE
com base no armazenamento efémero configurado no nó. Pode ser o disco de arranque associado ao nó ou um SSD local no nó. Se ativar o SSD local no nó, o GKE usa o SSD local para suportar o volume.emptyDir
Pode configurar um volume de cache de leitura personalizado para o contentor sidecar
para substituir o volume emptyDir
predefinido para o armazenamento em cache de ficheiros em operações de leitura.
Para saber mais acerca das práticas recomendadas para o armazenamento em cache de ficheiros, consulte o artigo Desempenho do FUSE do Cloud Storage.
Selecione o armazenamento para fazer uma cópia de segurança da cache de ficheiros
Para selecionar o armazenamento para fazer uma cópia de segurança da cache de ficheiros, tenha em atenção as seguintes considerações:
Para famílias de VMs de GPU e CPU que suportam SSD local (por exemplo, VMs A3), recomendamos que use o SSD local.
- Para VMs A3+, o GKE configura automaticamente o SSD local para os seus pods consumirem.
- Se a sua família de VMs não suportar SSD local, o GKE usa o disco de arranque para o armazenamento em cache. O tipo de disco predefinido para o disco de arranque no GKE é
pd-balanced
. Se a sua família de VMs suportar o SSD local, mas não tiver o armazenamento efémero no SSD local ativado por predefinição, pode ativar o SSD local no seu conjunto de nós. Isto aplica-se às famílias de máquinas de primeira e segunda geração, como as máquinas N1 e N2. Para saber mais, consulte o artigo Crie um cluster com SSD local.
Para verificar se o seu nó tem o armazenamento efémero no 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 as famílias de VMs de TPUs, especialmente v6+, recomendamos usar RAM como uma cache de ficheiros para o melhor desempenho, uma vez que estas instâncias de VMs têm uma RAM maior.
- Quando usar a RAM, preste atenção aos erros de falta de memória (OOM), uma vez que causam interrupções dos pods. O Cloud Storage FUSE consome memória, pelo que a configuração de uma cache de ficheiros para consumir o contentor auxiliar pode resultar em erros de falta de memória. Para evitar estes cenários, ajuste o campo
file-cache:max-size-mb
da configuração da cache de ficheiros para um valor inferior. - Para outras famílias de TPUs, recomendamos a utilização de
pd-balanced
oupd-ssd
. O tipo de disco predefinido para o disco de arranque no GKE épd-balanced
.
- Quando usar a RAM, preste atenção aos erros de falta de memória (OOM), uma vez que causam interrupções dos pods. O Cloud Storage FUSE consome memória, pelo que a configuração de uma cache de ficheiros para consumir o contentor auxiliar pode resultar em erros de falta de memória. Para evitar estes cenários, ajuste o campo
Evite usar o disco de arranque para o armazenamento em cache, pois pode levar a uma redução do desempenho e a encerramentos inesperados. Em alternativa, considere usar um PersistentVolume com base no armazenamento de blocos duradouro.
Use o armazenamento em cache de ficheiros baseado em disco RAM
Pode usar o disco RAM para colocar em cache ficheiros ou fazer transferências paralelas para reduzir a sobrecarga da utilização de um disco de arranque se estiver a usar uma VM de TPU com RAM suficientemente grande.
Para usar um disco RAM com o controlador CSI FUSE do Cloud Storage, adicione o seguinte ao seu manifesto:
volumes:
- name: gke-gcsfuse-cache
emptyDir:
medium: Memory
Cache de estatísticas
O controlador CSI FUSE do Cloud Storage melhora o desempenho ao colocar em cache os metadados dos ficheiros, como o tamanho e a hora de modificação. O controlador CSI ativa esta cache de estatísticas por predefinição e reduz a latência armazenando informações localmente em vez de as pedir repetidamente ao Cloud Storage. Pode configurar o tamanho máximo (a predefinição é 32 MB) e o tempo durante o qual os dados permanecem na cache (a predefinição é 60 segundos). Ao ajustar a cache de metadados, pode reduzir as chamadas API para o Cloud Storage, de modo a melhorar o desempenho e a eficiência da aplicação minimizando o tráfego de rede e a latência.
Para saber mais sobre as práticas recomendadas para o armazenamento em cache de estatísticas, consulte a vista geral do armazenamento em cache do FUSE do Cloud Storage.
Use a obtenção prévia de metadados para pré-preencher a cache de metadados
A funcionalidade de obtenção prévia de metadados permite que o controlador CSI do FUSE do Cloud Storage carregue proativamente metadados relevantes sobre os objetos no seu contentor do Cloud Storage para as caches do FUSE do Cloud Storage. Esta abordagem reduz as chamadas para o Cloud Storage e é especialmente benéfica para aplicações que acedem a grandes conjuntos de dados com muitos ficheiros, como cargas de trabalho de preparação de IA/AA.
Esta funcionalidade requer a versão 1.32.1-gke.1357001 ou posterior do GKE. Esta funcionalidade não é suportada com a montagem dinâmica, em que especifica um sublinhado (_) para montar todos os contentores aos quais a conta de serviço do Kubernetes pode aceder. Se usar a montagem dinâmica, a obtenção prévia de metadados não é realizada.
Para ver os ganhos de desempenho da obtenção prévia de metadados, tem de definir o valor de tempo de vida (TTL) dos itens da cache de metadados como ilimitado. Normalmente, a definição de um TTL impede que o conteúdo em cache fique desatualizado. Quando define o TTL como ilimitado, tem de tomar precauções para não alterar o conteúdo do contentor fora da banda (o que significa permitir que uma carga de trabalho ou um ator diferente modifique a carga de trabalho). As alterações fora da banda não são visíveis localmente e podem causar problemas de consistência.
Para ativar a obtenção prévia de metadados, faça as seguintes alterações de configuração. Recomendamos que ative esta funcionalidade em volumes que são muito lidos.
- Defina o atributo de volume
gcsfuseMetadataPrefetchOnMount: true
. - Atualize as seguintes opções de montagem:
metadata-cache:stat-cache-max-size-mb:-1
para anular a definição do limite de capacidade da cache de estatísticas.metadata-cache:type-cache-max-size-mb:-1
para anular a definição do limite de capacidade da cache de tipo.file-system:kernel-list-cache-ttl-secs:-1
para impedir que os itens da cache da lista do kernel expirem.metadata-cache:ttl-secs:-1
para evitar que os itens de metadados em cache expirem.
- Para evitar interrupções da carga de trabalho, pondere aumentar o limite de memória do sidecar
gke-gcsfuse-metadata-prefetch
.- Aumente os limites definindo a anotação do pod
gke-gcsfuse/metadata-prefetch-memory-limit
como"512Mi"
ou superior. Para mais informações, consulte o artigo Configure recursos de contentores auxiliares. - Em alternativa, anule a definição do limite de memória definindo a anotação do pod
gke-gcsfuse/metadata-prefetch-memory-limit
como"0"
(apenas suportado para clusters padrão).
- Aumente os limites definindo a anotação do pod
Para ver um exemplo, consulte o exemplo de código em Melhore o desempenho de leitura de ficheiros grandes através da transferência paralela.
Cache de listas
Para acelerar as listas de diretórios para aplicações, pode ativar a colocação em cache de listas. Esta funcionalidade armazena as fichas
do diretório na memória para que os pedidos repetidos possam ser processados mais rapidamente. A cache de listas está desativada por predefinição. Pode ativá-la definindo o parâmetro kernel-list-cache-ttl-secs
nas opções de montagem. Isto define durante quanto tempo as fichas são armazenadas em cache.
Melhore as leituras sequenciais de ficheiros grandes usando a leitura com buffer
As leituras em buffer podem melhorar o desempenho de leitura sequencial para ficheiros grandes pré-obtendo assincronamente partes de um objeto do Cloud Storage num buffer na memória. O armazenamento em buffer permite que as leituras subsequentes sejam publicadas a partir do buffer, em vez de exigir chamadas de rede.
Considere o seguinte antes de ativar as leituras com buffer:
As leituras com buffer são incompatíveis com o armazenamento em cache de ficheiros. Se as leituras em buffer e o armazenamento em cache de ficheiros estiverem ativados, o armazenamento em cache de ficheiros tem precedência e as leituras em buffer são ignoradas.
As leituras em buffer podem usar uma quantidade significativa de memória e recursos de computação.
Para ativar as leituras em buffer, no manifesto, configure esta definição adicional através das opções de montagem:
enable-buffered-read
.
Recomendamos que use as opções de montagem:
read-global-max-blocks
para especificar o número máximo de blocos
disponíveis para leituras com buffer em todos os identificadores de ficheiros.
Melhore o desempenho de leitura de ficheiros grandes através da transferência paralela
Pode usar a transferência paralela do FUSE do Cloud Storage para acelerar a leitura de ficheiros grandes do Cloud Storage para transferências com várias linhas de execução. A transferência paralela do FUSE do Cloud Storage pode ser particularmente vantajosa para exemplos de utilização de publicação de modelos com leituras superiores a 1 GB.
As transferências paralelas requerem que a cache de ficheiros esteja ativada. A partir da versão 1.32.0-gke.1795000 do GKE, o FUSE do Cloud Storage aplica rigorosamente este requisito e apresenta o seguinte erro se tentar usar transferências paralelas sem a cache de ficheiros, o que impede o início do seu 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
.
Seguem-se alguns exemplos comuns:
- Serviço de modelos, em que precisa de um grande buffer de obtenção prévia para acelerar a transferência do modelo durante o arranque da instância.
- Restauros de pontos de verificação, em que precisa de uma cache de dados só de leitura para melhorar o acesso único a vários ficheiros grandes.
Use a transferência paralela para aplicações que realizam leituras de ficheiros grandes com uma única thread. As aplicações com paralelismo de leitura elevado (que usam mais de oito threads) podem ter um desempenho inferior com esta funcionalidade.
Para usar a transferência paralela com o controlador CSI FUSE do Cloud Storage, siga estes passos:
Crie um cluster com a cache de ficheiros ativada, conforme descrito em Ative e use a cache de ficheiros.
No manifesto, configure estas definições adicionais através das opções de montagem para ativar a transferência paralela:
(Opcional) Se necessário, considere ajustar estes atributos de volume:
file-cache:cache-file-for-range-read
para leituras aleatórias ou parciais.metadata-cache:stat-cache-max-size-mb
emetadata-cache:type-cache-max-size-mb
para cargas de trabalho de treino.
Reduza o consumo de quota das verificações de controlo de acesso
Por predefinição, o controlador CSI realiza verificações de controlo de acesso para garantir que a conta de serviço do pod tem acesso aos seus contentores do Cloud Storage. Isto resulta em
sobrecarga adicional sob a forma de API Kubernetes Service, Security Token Service e
chamadas IAM. A partir da versão 1.29.9-gke.1251000 do GKE, pode usar o atributo de volume skipCSIBucketAccessCheck
para ignorar essas verificações redundantes e reduzir o consumo de quota.
Exemplo de publicação de inferências
O exemplo seguinte mostra como ativar a transferência em paralelo para o serviço de inferência:
Crie um manifesto 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 onde quer implementar o seu pod.BUCKET_NAME
: o nome do contentor do Cloud Storage que especificou ao configurar o acesso aos contentores do Cloud Storage. Pode especificar um caráter de sublinhado (_
) para montar todos os contentores aos quais a conta de serviço do Kubernetes pode aceder. Para saber mais, consulte o artigo Montagem dinâmica na documentação do Cloud Storage FUSE.
Aplique o manifesto ao cluster:
kubectl apply -f PV_FILE_PATH
Substitua
PV_FILE_PATH
pelo caminho para o seu ficheiro YAML.Crie um manifesto do Pod com a seguinte especificação para consumir o PersistentVolumeClaim, consoante esteja a usar o armazenamento em cache de ficheiros com base em SSD local ou o armazenamento em cache de ficheiros com base em 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 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
Aplique o manifesto ao cluster:
kubectl apply -f POD_FILE_PATH
Substitua
POD_FILE_PATH
pelo caminho para o seu ficheiro YAML.
Configure atributos de volume
Os atributos de volume permitem-lhe configurar o comportamento específico do controlador CSI do FUSE do Cloud Storage.
O controlador CSI do FUSE do Cloud Storage não lhe permite especificar diretamente o ficheiro de configuração do FUSE do Cloud Storage. Pode configurar alguns dos campos no ficheiro de configuração através dos atributos de volume do CSI FUSE do Cloud Storage. O controlador CSI processa a tradução dos valores dos atributos de volume para os campos do ficheiro de configuração.
Para ver a lista completa de atributos de volume suportados, consulte a referência de atributos de volume.
Pode especificar os atributos de volume das seguintes formas:
- No campo
spec.csi.volumeAttributes
num manifesto PersistentVolume, se usar volumes persistentes. - No campo
spec.volumes[n].csi.volumeAttributes
, se usar volumes efémeros de CSI.
No manifesto, os atributos de volume podem ser especificados como pares de chave-valor. Por exemplo:
volumeAttributes:
mountOptions: "implicit-dirs"
fileCacheCapacity: "-1"
gcsfuseLoggingSeverity: warning
Métricas do FUSE do Cloud Storage
As seguintes métricas do FUSE do Cloud Storage estão agora disponíveis através da API GKE Monitoring. Pode encontrar detalhes sobre as métricas do FUSE do Cloud Storage, como etiquetas, tipo e unidade, em Métricas do sistema do GKE. Estas métricas estão disponíveis para cada Pod que usa o Cloud Storage FUSE, e pode usar métricas para configurar estatísticas por volume e contentor.
As métricas estão ativadas por predefinição a partir da versão 1.33.0-gke.2248000 ou posterior do GKE. Para as desativar, defina o atributo de volume
disableMetrics
como "true".
Métricas do sistema de ficheiros
As métricas do sistema de ficheiros monitorizam o desempenho e o estado do seu sistema de ficheiros, incluindo o número de operações, erros e a velocidade das operações. Estas 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
Pode monitorizar as métricas do Cloud Storage, incluindo o volume de dados, a velocidade e a atividade de pedidos, para compreender como as suas aplicações interagem com os contentores do Cloud Storage. Estes dados podem ajudar a identificar áreas para otimização, como melhorar os padrões de leitura ou reduzir o número de pedidos.
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 da cache de ficheiros
Pode monitorizar as métricas da cache de ficheiros, incluindo o volume de dados lidos, a velocidade e a taxa de acertos da cache, para otimizar o Cloud Storage FUSE e o desempenho da aplicação. Analise estas métricas para melhorar a sua estratégia de colocação em cache e maximizar os acessos à cache.
gcsfusecsi/file_cache_read_bytes_count
gcsfusecsi/file_cache_read_latencies
gcsfusecsi/file_cache_read_count
Ative as predefinições de desempenho do FUSE do Cloud Storage
A partir da versão 1.33.2-gke.4655000, o GKE ativa automaticamente várias predefinições para o FUSE do Cloud Storage em execução em nós suportados por tipos de máquinas de elevado desempenho.
Durante a montagem de volumes, o controlador CSI do FUSE do Cloud Storage obtém o tipo de instância do nó do destino e transmite-o ao FUSE do Cloud Storage através de uma nova opção de montagem machine-type
.
Quando é transmitido um tipo de máquina de elevado desempenho, o Cloud Storage FUSE define automaticamente as seguintes opções de montagem predefinidas:
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 destas opções de montagem for especificada explicitamente, não é substituída pelas predefinições automáticas.
Pode optar por não usar a funcionalidade incluindo disable-autoconfig
nas opções de montagem. Por exemplo:
mountOptions: "implicit-dirs,disable-autoconfig"
Práticas recomendadas para o ajuste do desempenho
Esta secção apresenta algumas técnicas de otimização e ajuste de desempenho recomendadas para o controlador CSI do FUSE do Cloud Storage.
Tire partido dos contentores do espaço de nomes hierárquico (HNS): opte por contentores do HNS para alcançar um aumento substancial de 8 vezes nas consultas iniciais por segundo (QPS). Esta escolha também facilita as renomeações de diretórios rápidas e atómicas, um requisito crucial para a criação de pontos de verificação eficientes com o Cloud Storage FUSE. Os contentores HNS garantem uma melhor experiência semelhante a ficheiros, suportando 40 000 pedidos de leitura de objetos e 8000 pedidos de escrita de objetos por segundo, uma melhoria significativa em comparação com os 8000 pedidos de leitura de objetos e 1000 pedidos de escrita de objetos por segundo oferecidos pelos contentores simples.
Monte diretórios específicos sempre que possível: se a sua carga de trabalho envolver o acesso a um diretório específico num contentor, use a flag
--only-dir
durante a montagem. Esta abordagem focada agiliza as chamadas de listas, uma vez que limita o âmbito das chamadasLookUpInode
, que envolvem uma chamadalist+stat
para cada ficheiro ou diretório no caminho especificado. Ao restringir a montagem ao subdiretório necessário, minimiza estas chamadas, o que resulta em melhorias no desempenho.Otimize o armazenamento em cache de metadados: configure as caches de metadados para maximizar a respetiva capacidade e defina um tempo de vida (TTL) infinito. Esta prática armazena eficazmente em cache todos os metadados acedidos durante a execução da tarefa, minimizando os pedidos de acesso aos metadados no Cloud Storage. Esta configuração é particularmente vantajosa para volumes só de leitura, uma vez que elimina as pesquisas repetidas de metadados do Cloud Storage. No entanto, verifique se o consumo de memória associado a estas grandes caches de metadados está alinhado com as capacidades do seu sistema.
Maximize os recursos do sidecar do GKE: o FUSE do Cloud Storage opera num contentor sidecar num ambiente do GKE. Para evitar gargalos de recursos, remova as limitações no consumo de CPU e memória para o contentor sidecar. Isto permite que o Cloud Storage FUSE dimensione a utilização de recursos com base nas exigências da carga de trabalho, evitando a limitação e garantindo um débito ideal.
Preencher a cache de metadados de forma proativa: ative a obtenção prévia de metadados para o controlador CSI. Isto preenche de forma eficiente os metadados e as caches de listas, minimizando as chamadas de metadados para o Cloud Storage e acelerando a execução inicial. Muitos frameworks de ML fazem isto automaticamente, mas é fundamental garantir este passo para o código de preparação personalizado. Para saber mais, consulte o artigo Use a obtenção prévia de metadados para pré-preencher a cache de metadados.
Use a cache de ficheiros e as transferências paralelas: ative a funcionalidade de cache de ficheiros, especialmente para cargas de trabalho de formação de várias épocas, em que os dados são lidos repetidamente. A cache de ficheiros armazena dados acedidos com frequência no armazenamento local (SSD no caso das máquinas A3), o que melhora o desempenho de leitura. Complemente esta ação com a funcionalidade de transferências paralelas, especialmente para tarefas de processamento, para acelerar a transferência de ficheiros grandes dividindo-os em partes mais pequenas e transferindo-as em simultâneo.
Ativar leituras em buffer: as leituras em buffer podem melhorar o desempenho de leitura sequencial para ficheiros grandes pré-obtendo de forma assíncrona partes de um objeto do Cloud Storage num buffer na memória. O armazenamento em buffer permite que as leituras subsequentes sejam servidas a partir do buffer, em vez de exigir chamadas de rede. Para mais informações, consulte o artigo Melhore as leituras sequenciais de ficheiros grandes com a leitura em buffer.
Otimize os pontos de verificação: para a criação de pontos de verificação com o Cloud Storage FUSE, recomendamos vivamente a utilização de um contentor HNS. Se usar um contentor não HNS, defina o parâmetro
rename-dir-limit
para um valor elevado de modo a acomodar as renomeações de diretórios frequentemente usadas por frameworks de ML durante a criação de pontos de verificação. No entanto, tenha em atenção que as renomeações de diretórios em contentores que não sejam HNS podem não ser atómicas e podem demorar mais tempo a serem concluídas.Ative o armazenamento em cache de listas: use o armazenamento em cache de listas com a flag
--kernel-list-cache-ttl-secs
para melhorar ainda mais o desempenho. Esta funcionalidade coloca em cache as listas de diretórios e ficheiros, o que melhora a velocidade das operaçõesls
. O armazenamento em cache de listas é especialmente benéfico para cargas de trabalho que envolvem listagens completas repetidas de diretórios, comuns em cenários de preparação de IA/ML. É aconselhável usar o armazenamento em cache de listas com montagens só de leitura para manter a consistência dos dados.Aumente a leitura antecipada do kernel: para cargas de trabalho que envolvem principalmente leituras sequenciais de ficheiros grandes, como o fornecimento e a reposição de pontos de verificação, o aumento do tamanho da leitura antecipada pode melhorar significativamente o desempenho. Para aumentar a leitura antecipada do FUSE do Cloud Storage, especifique a flag
read_ahead_kb
emmountOptions
e defina-a como 1 MB (por exemplo,read_ahead_kb=1024
). Esta funcionalidade requer a versão 1.32.2-gke.1297001 ou posterior do GKE.Ative as escritas de streaming: as escritas de streaming são um novo caminho de escrita que carrega dados diretamente para o Cloud Storage à medida que são escritos. Esta abordagem difere do método de escrita predefinido, que prepara temporariamente toda a escrita num diretório local e, em seguida, carrega-a para o Cloud Storage numa operação
close
oufsync
. As escritas de streaming reduzem a latência e a utilização do espaço em disco, o que as torna particularmente vantajosas para escritas sequenciais grandes, como pontos de verificação. Para ativar as gravações de streaming, especifique o sinalizador da linha de comandosenable-streaming-writes
emmountOptions
.
Resolver problemas
Para mais informações sobre a resolução de problemas do controlador CSI do FUSE do Cloud Storage, consulte o guia de resolução de problemas na documentação do projeto do GitHub.
O que se segue?
- Explore exemplos adicionais para usar o controlador CSI no GitHub.
- Saiba mais sobre o FUSE do Cloud Storage.