En esta guía se muestra cómo optimizar el rendimiento del controlador CSI de Cloud Storage FUSE en Google Kubernetes Engine (GKE).
Aunque Cloud Storage FUSE ofrece flexibilidad y escalabilidad, es fundamental configurar y ajustar el servicio con cuidado para conseguir un rendimiento óptimo. El rendimiento de Cloud Storage FUSE puede diferir de un sistema de archivos POSIX en términos de latencia, rendimiento y coherencia. El objetivo de la optimización es minimizar la sobrecarga de las operaciones de metadatos y maximizar la eficiencia del acceso a los datos. Si ejecutas aplicaciones de IA o aprendizaje automático que consumen datos en los contenedores de Cloud Storage, ajustar el controlador CSI puede reducir los tiempos de entrenamiento e inferencia de tus aplicaciones de IA o aprendizaje automático.
Esta guía está dirigida a desarrolladores e ingenieros de aprendizaje automático (ML) que quieran mejorar el rendimiento de sus aplicaciones que acceden a datos almacenados en segmentos de Cloud Storage.
Antes de leer esta página, asegúrate de conocer los conceptos básicos de Cloud Storage, Kubernetes y el controlador CSI de FUSE de Cloud Storage. Asegúrate de consultar los requisitos de la versión de GKE para las funciones específicas que quieras usar.
Configurar opciones de montaje
El controlador CSI de FUSE de Cloud Storage admite opciones de montaje para configurar cómo se montan los segmentos de Cloud Storage en el sistema de archivos local. Para ver la lista completa de opciones de montaje admitidas, consulta la documentación del archivo de la CLI de Cloud Storage FUSE.
Puedes especificar las opciones de montaje de las siguientes formas, en función del tipo de volumen que utilices:
Volumen efímero de CSI
Si usas volúmenes efímeros de CSI, especifica las opciones de montaje en el campo spec.volumes[n].csi.volumeAttributes.mountOptions
del manifiesto de tu pod.
Debe especificar las opciones de montaje como una cadena, con marcas separadas por comas y sin espacios. Por ejemplo:
mountOptions: "implicit-dirs,file-cache:enable-parallel-downloads:true,file-cache:download-chunk-size-mb:3"
Volumen persistente
Si usas volúmenes persistentes, especifica las opciones de montaje en el campo spec.mountOptions
del manifiesto PersistentVolume.
Debe especificar las opciones de montaje como una lista. Por ejemplo:
mountOptions:
- implicit-dirs
- file-cache:enable-parallel-downloads:true
- file-cache:download-chunk-size-mb:3
Consideraciones sobre el montaje
Ten en cuenta lo siguiente al configurar los montajes con el controlador CSI:
Consideraciones generales
- No se permiten las siguientes marcas:
app-name
,temp-dir
,foreground
,log-file
,log-format
,key-file
,token-url
yreuse-token-from-url
. - Cloud Storage FUSE no muestra los directorios implícitos de forma predeterminada.
- Si solo quieres montar un directorio del segmento en lugar de todo el segmento, pasa la ruta relativa del directorio mediante la marca
only-dir=relative/path/to/the/bucket/root
.
Seguridad y permisos
- Si usas un contexto de seguridad para tu pod o contenedor, o si la imagen de tu contenedor usa un usuario o un grupo que no es root, debes definir las marcas de montaje
uid
ygid
. También debes usar las marcas de montajefile-mode
ydir-mode
para definir los permisos del sistema de archivos. Ten en cuenta que no puedes ejecutar comandoschmod
,chown
ochgrp
en un sistema de archivos FUSE de Cloud Storage, por lo que debes usar las marcas de montajeuid
,gid
,file-mode
ydir-mode
para que un usuario o grupo que no sea root pueda acceder.
Opciones de montaje del kernel de Linux
- Si necesitas configurar las opciones de montaje del kernel de Linux, puedes pasar las opciones mediante la marca
o
. Por ejemplo, si no quieres permitir la ejecución directa de ningún archivo binario en el sistema de archivos montado, define la marcao=noexec
. Cada opción requiere una marca independiente; por ejemplo,o=noexec
,o=noatime
. Solo se permiten las siguientes opciones:exec
,noexec
,atime
,noatime
,sync
,async
ydirsync
.
Configurar el almacenamiento en caché
En esta sección se ofrece una descripción general de las opciones de almacenamiento en caché disponibles con el controlador CSI de FUSE de Cloud Storage para mejorar el rendimiento.
Almacenamiento en caché de archivos
Puedes usar el controlador CSI de Cloud Storage FUSE con el almacenamiento en caché de archivos para mejorar el rendimiento de lectura de las aplicaciones que gestionan archivos pequeños de segmentos de Cloud Storage. La función de caché de archivos FUSE de Cloud Storage es una caché de lectura basada en el cliente que permite que las lecturas de archivos repetidas se sirvan más rápido desde el almacenamiento en caché que elijas.
Puedes elegir entre varias opciones de almacenamiento para la caché de lectura, como SSD local, almacenamiento en bloques duradero (por ejemplo, Google Cloud Hyperdisk o Persistent Disk) y disco RAM (memoria), en función de tus necesidades de precio y rendimiento.
Habilitar y usar el almacenamiento en caché de archivos
De forma predeterminada, la función de almacenamiento en caché de archivos está inhabilitada en GKE. Debes habilitar el almacenamiento en caché de archivos con el controlador CSI de Cloud Storage FUSE.
Para habilitar y controlar el almacenamiento en caché de archivos, define el atributo de volumen
fileCacheCapacity
o usa la opción de montaje file-cache:max-size-mb
.
GKE usa un volumen emptyDir
de forma predeterminada para el almacenamiento en caché de archivos de Cloud Storage FUSE, que se basa en el almacenamiento efímero configurado en el nodo. Puede ser el disco de arranque conectado al nodo o un SSD local del nodo. Si habilitas SSD local en el nodo, GKE usará la SSD local para crear una copia de seguridad del emptyDir
volumen.
Puedes configurar un volumen de caché de lectura personalizado para el contenedor sidecar
para sustituir el volumen emptyDir
predeterminado de almacenamiento en caché de archivos en las operaciones de lectura.
Para obtener más información sobre las prácticas recomendadas para el almacenamiento en caché de archivos, consulta Rendimiento de Cloud Storage FUSE.
Selecciona el almacenamiento para crear una copia de seguridad de la caché de archivos
Para seleccionar el almacenamiento en el que se creará la copia de seguridad de la caché de archivos, ten en cuenta lo siguiente:
En el caso de las familias de VMs con GPU y CPU que admiten SSD local (por ejemplo, las VMs A3), te recomendamos que uses SSD local.
- En las VMs A3+, GKE configura automáticamente el SSD local para que lo consuman tus pods.
- Si tu familia de VMs no admite SSD local, GKE usa el disco de arranque para el almacenamiento en caché. El tipo de disco predeterminado del disco de arranque en GKE es
pd-balanced
. Si tu familia de VMs admite SSD local, pero no tiene habilitado de forma predeterminada el almacenamiento efímero en SSD local, puedes habilitar el SSD local en tu pool de nodos. Esto se aplica a las familias de máquinas de primera y segunda generación, como las máquinas N1 y N2. Para obtener más información, consulta Crear un clúster con SSD local.
Para comprobar si tu nodo tiene habilitado el almacenamiento efímero en SSD local, ejecuta el siguiente comando:
kubectl describe node <code><var>NODE_NAME</var></code> | grep "cloud.google.com/gke-ephemeral-storage-local-ssd"
En el caso de las familias de VMs TPU, especialmente las v6 y posteriores, te recomendamos que utilices la RAM como caché de archivos para obtener el mejor rendimiento, ya que estas instancias de VM tienen más RAM.
- Cuando uses RAM, presta atención a los errores de falta de memoria (OOM), ya que provocan interrupciones en los pods. Cloud Storage FUSE consume memoria, por lo que configurar una caché de archivos para que consuma el contenedor sidecar puede provocar errores de falta de memoria. Para evitar estas situaciones, ajusta el campo
file-cache:max-size-mb
de la configuración de la caché de archivos a un valor más pequeño. - En el caso de otras familias de TPU, te recomendamos que uses
pd-balanced
opd-ssd
. El tipo de disco predeterminado del disco de arranque en GKE espd-balanced
.
- Cuando uses RAM, presta atención a los errores de falta de memoria (OOM), ya que provocan interrupciones en los pods. Cloud Storage FUSE consume memoria, por lo que configurar una caché de archivos para que consuma el contenedor sidecar puede provocar errores de falta de memoria. Para evitar estas situaciones, ajusta el campo
No uses el disco de arranque para el almacenamiento en caché, ya que puede provocar una reducción del rendimiento y cierres inesperados. En su lugar, considera la posibilidad de usar un PersistentVolume respaldado por almacenamiento en bloques duradero.
Usar el almacenamiento en caché de archivos basado en discos RAM
Puedes usar un disco RAM para almacenar en caché archivos o para realizar descargas paralelas y, de esta forma, reducir la sobrecarga de usar un disco de arranque si usas una VM de TPU con una RAM lo suficientemente grande.
Para usar un disco RAM con el controlador de CSI de Cloud Storage FUSE, añade lo siguiente al manifiesto:
volumes:
- name: gke-gcsfuse-cache
emptyDir:
medium: Memory
Caché de estadísticas
El controlador CSI de FUSE de Cloud Storage mejora el rendimiento almacenando en caché los metadatos de los archivos, como el tamaño y la hora de modificación. El controlador CSI habilita esta caché de estadísticas de forma predeterminada y reduce la latencia almacenando la información localmente en lugar de solicitarla repetidamente a Cloud Storage. Puede configurar su tamaño máximo (el valor predeterminado es 32 MB) y el tiempo que los datos permanecen en la caché (el valor predeterminado es 60 segundos). Si ajustas la caché de metadatos, puedes reducir las llamadas a la API de Cloud Storage para mejorar el rendimiento y la eficiencia de las aplicaciones, ya que se minimizan el tráfico de red y la latencia.
Para obtener más información sobre las prácticas recomendadas para el almacenamiento en caché de estadísticas, consulta la descripción general del almacenamiento en caché de Cloud Storage FUSE.
Usar la prefetización de metadatos para rellenar previamente la caché de metadatos
La función de prefetado de metadatos permite que el controlador CSI de Cloud Storage FUSE cargue de forma proactiva los metadatos relevantes sobre los objetos de tu segmento de Cloud Storage en las cachés de Cloud Storage FUSE. Este enfoque reduce las llamadas a Cloud Storage y es especialmente útil para las aplicaciones que acceden a conjuntos de datos de gran tamaño con muchos archivos, como las cargas de trabajo de entrenamiento de IA o aprendizaje automático.
Esta función requiere la versión 1.32.1-gke.1357001 de GKE o una posterior. Esta función no se admite con el montaje dinámico, en el que se especifica un guion bajo (_) para montar todos los contenedores a los que puede acceder la cuenta de servicio de Kubernetes. Si usas el montaje dinámico, no se realiza la prefetización de metadatos.
Para ver las mejoras de rendimiento de la prefetización de metadatos, debe asignar el valor ilimitado al tiempo de vida (TTL) de los elementos de la caché de metadatos. Normalmente, al definir un TTL se evita que el contenido almacenado en caché quede obsoleto. Si asignas un TTL ilimitado, debes tomar precauciones para no cambiar el contenido del contenedor fuera de banda (es decir, no permitir que otra carga de trabajo u otro actor modifiquen la carga de trabajo). Los cambios fuera de banda no se ven localmente y pueden provocar problemas de coherencia.
Para habilitar la prefetración de metadatos, haz los siguientes cambios en la configuración. Te recomendamos que habilites esta función en los volúmenes que se lean mucho.
- Asigna el atributo de volumen
gcsfuseMetadataPrefetchOnMount: true
. - Actualiza las siguientes opciones de montaje:
metadata-cache:stat-cache-max-size-mb:-1
para anular el límite de capacidad de la caché de estadísticas.metadata-cache:type-cache-max-size-mb:-1
para anular el límite de capacidad de la caché de tipo.file-system:kernel-list-cache-ttl-secs:-1
para evitar que caduquen los elementos de la caché de la lista del kernel.metadata-cache:ttl-secs:-1
para evitar que caduquen los elementos de metadatos almacenados en caché.
- Para evitar interrupciones en la carga de trabajo, considera aumentar el límite de memoria del sidecar
gke-gcsfuse-metadata-prefetch
.- Aumenta los límites configurando la anotación de pod
gke-gcsfuse/metadata-prefetch-memory-limit
en"512Mi"
o en un valor superior. Para obtener más información, consulta Configurar recursos de contenedores sidecar. - También puedes anular el límite de memoria configurando la anotación de pod
gke-gcsfuse/metadata-prefetch-memory-limit
en"0"
(solo se admite en clústeres estándar).
- Aumenta los límites configurando la anotación de pod
Para ver un ejemplo, consulta el código de muestra en Mejorar el rendimiento de lectura de archivos grandes mediante la descarga paralela.
Caché de lista
Para acelerar los listados de directorios de las aplicaciones, puedes habilitar el almacenamiento en caché de listas. Esta función almacena listados de directorios en la memoria para que las solicitudes repetidas se puedan atender más rápido. La caché de lista está inhabilitada de forma predeterminada. Puedes habilitarla configurando el parámetro kernel-list-cache-ttl-secs
en las opciones de montaje. Define cuánto tiempo se almacenan en caché las fichas.
Mejorar el rendimiento de lectura de archivos grandes mediante la descarga paralela
Puedes usar la descarga paralela de Cloud Storage FUSE para acelerar la lectura de archivos grandes de Cloud Storage en descargas multiproceso. La descarga paralela de Cloud Storage FUSE puede ser especialmente útil en casos prácticos de servicio de modelos con lecturas de más de 1 GB.
Para realizar descargas paralelas, es necesario que la caché de archivos esté habilitada. A partir de la versión 1.32.0-gke.1795000 de GKE, Cloud Storage FUSE aplica estrictamente este requisito y genera el siguiente error si intentas usar descargas paralelas sin la caché de archivos, lo que impide que se inicie tu 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
.
Estos son algunos ejemplos:
- Servicio de modelos, en el que necesitas un búfer de prefetrado grande para acelerar la descarga del modelo durante el inicio de la instancia.
- Restauraciones de puntos de control, en las que necesitas una caché de datos de solo lectura para mejorar el acceso único a varios archivos grandes.
Usa la descarga paralela en aplicaciones que realicen lecturas de archivos grandes con un solo subproceso. Las aplicaciones con un paralelismo de lectura alto (que usen más de ocho subprocesos) pueden experimentar un rendimiento inferior con esta función.
Para usar la descarga paralela con el controlador CSI de Cloud Storage FUSE, sigue estos pasos:
Crea un clúster con el almacenamiento en caché de archivos habilitado, tal como se describe en Habilitar y usar el almacenamiento en caché de archivos.
En el manifiesto, configura estos ajustes adicionales con opciones de montaje para habilitar la descarga paralela:
- Asigna el valor
file-cache:enable-parallel-downloads:true
. - Ajusta
file-cache:parallel-downloads-per-file
,file-cache:parallel-downloads-per-file
,file-cache:max-parallel-downloads
yfile-cache:download-chunk-size-mb
según sea necesario.
- Asigna el valor
Si es necesario, puedes ajustar estos atributos de volumen:
file-cache:cache-file-for-range-read
para lecturas aleatorias o parciales.metadata-cache:stat-cache-max-size-mb
ymetadata-cache:type-cache-max-size-mb
para cargas de trabajo de entrenamiento.
Reducir el consumo de cuota de las comprobaciones de control de acceso
De forma predeterminada, el controlador CSI realiza comprobaciones de control de acceso para asegurarse de que la cuenta de servicio de Pod tenga acceso a tus segmentos de Cloud Storage. Esto conlleva una sobrecarga adicional en forma de llamadas a la API de servicio de Kubernetes, al servicio de tokens de seguridad y a IAM. A partir de la versión 1.29.9-gke.1251000 de GKE, puedes usar el atributo de volumen skipCSIBucketAccessCheck
para omitir estas comprobaciones redundantes y reducir el consumo de cuota.
Ejemplo de servicio de inferencias
En el siguiente ejemplo se muestra cómo habilitar la descarga paralela para el servicio de inferencias:
Crea un manifiesto de PersistentVolume y PersistentVolumeClaim con la siguiente especificación:
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
Sustituye los siguientes valores:
NAMESPACE
: el espacio de nombres de Kubernetes en el que quieres desplegar tu pod.BUCKET_NAME
: el nombre del segmento de Cloud Storage que especificó al configurar el acceso a los segmentos de Cloud Storage. Puedes especificar un guion bajo (_
) para montar todos los contenedores a los que pueda acceder la cuenta de servicio de Kubernetes. Para obtener más información, consulta Montaje dinámico en la documentación de Cloud Storage FUSE.
Aplica el manifiesto al clúster:
kubectl apply -f PV_FILE_PATH
Sustituye
PV_FILE_PATH
por la ruta a tu archivo YAML.Crea un manifiesto de Pod con la siguiente especificación para consumir el PersistentVolumeClaim, en función de si utilizas el almacenamiento en caché de archivos respaldado por SSD local o el almacenamiento en caché de archivos respaldado por 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
Aplica el manifiesto al clúster:
kubectl apply -f POD_FILE_PATH
Sustituye
POD_FILE_PATH
por la ruta a tu archivo YAML.
Configurar atributos de volumen
Los atributos de volumen te permiten configurar el comportamiento específico del controlador CSI de Cloud Storage FUSE.
El controlador CSI de Cloud Storage FUSE no te permite especificar directamente el archivo de configuración de Cloud Storage FUSE. Puedes configurar algunos de los campos del archivo de configuración mediante los atributos de volumen de CSI de Cloud Storage FUSE. El controlador CSI se encarga de traducir los valores de los atributos de volumen a los campos del archivo de configuración.
Para ver la lista completa de atributos de volumen admitidos, consulta la referencia de atributos de volumen.
Puede especificar los atributos de volumen de las siguientes formas:
- En el campo
spec.csi.volumeAttributes
de un manifiesto de PersistentVolume, si usas volúmenes persistentes. - En el campo
spec.volumes[n].csi.volumeAttributes
, si usas volúmenes efímeros de CSI.
En el manifiesto, los atributos de volumen se pueden especificar como pares clave-valor. Por ejemplo:
volumeAttributes:
mountOptions: "implicit-dirs"
fileCacheCapacity: "-1"
gcsfuseLoggingSeverity: warning
Métricas de Cloud Storage FUSE
Las siguientes métricas de Cloud Storage FUSE ahora están disponibles a través de la API Monitoring de GKE. Puedes consultar información sobre las métricas de Cloud Storage FUSE, como las etiquetas, el tipo y la unidad, en Métricas del sistema de GKE. Estas métricas están disponibles para cada pod que use Cloud Storage FUSE y puede usarlas para configurar estadísticas por volumen y por segmento.
Las métricas están habilitadas de forma predeterminada a partir de la versión 1.33.0-gke.2248000 de GKE o una posterior. Para inhabilitarlos, asigna el valor "true" al atributo de volumen
disableMetrics
.
Métricas del sistema de archivos
Las métricas del sistema de archivos monitorizan el rendimiento y el estado de tu sistema de archivos, incluido el número de operaciones, los errores y la velocidad de las operaciones. Estas métricas pueden ayudarte a identificar cuellos de botella y optimizar el rendimiento.
gcsfusecsi/fs_ops_count
gcsfusecsi/fs_ops_error_count
gcsfusecsi/fs_ops_latency
Métricas de Cloud Storage
Puedes monitorizar las métricas de Cloud Storage, como el volumen de datos, la velocidad y la actividad de las solicitudes, para saber cómo interactúan tus aplicaciones con los segmentos de Cloud Storage. Estos datos pueden ayudarte a identificar áreas de optimización, como mejorar los patrones de lectura o reducir el número de solicitudes.
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 caché de archivos
Puede monitorizar las métricas de la caché de archivos, como el volumen de datos leídos, la velocidad y la tasa de aciertos de la caché, para optimizar Cloud Storage FUSE y el rendimiento de las aplicaciones. Analiza estas métricas para mejorar tu estrategia de almacenamiento en caché y maximizar los aciertos de caché.
gcsfusecsi/file_cache_read_bytes_count
gcsfusecsi/file_cache_read_latencies
gcsfusecsi/file_cache_read_count
Habilitar los valores predeterminados de rendimiento de Cloud Storage FUSE
A partir de la versión 1.33.2-gke.4655000, GKE habilita automáticamente una serie de valores predeterminados para Cloud Storage FUSE en los nodos respaldados por tipos de máquinas de alto rendimiento.
Durante el montaje del volumen, el controlador CSI de FUSE de Cloud Storage obtiene el tipo de instancia del nodo de destino y lo transfiere a FUSE de Cloud Storage a través de una nueva opción de montaje machine-type
.
Cuando se le pasa un tipo de máquina de alto rendimiento, Cloud Storage FUSE establece automáticamente las siguientes opciones de montaje predeterminadas:
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
Si se especifica alguna de estas opciones de montaje de forma explícita, no se sobrescribirán con los valores predeterminados automáticos.
Puedes inhabilitar esta función incluyendo disable-autoconfig
en las opciones de montaje. Por ejemplo:
mountOptions: "implicit-dirs,disable-autoconfig"
Prácticas recomendadas para ajustar el rendimiento
En esta sección se enumeran algunas técnicas recomendadas de ajuste y optimización del rendimiento para el controlador CSI de Cloud Storage FUSE.
Aprovecha los segmentos de espacio de nombres jerárquico (HNS): elige los segmentos de HNS para conseguir un aumento considerable de 8 veces en las consultas por segundo (CPS) iniciales. Esta opción también facilita los cambios de nombre de directorios rápidos y atómicos, un requisito fundamental para la creación de puntos de control eficientes con Cloud Storage FUSE. Los segmentos con HNS ofrecen una mejor experiencia similar a la de los archivos, ya que admiten 40.000 solicitudes de lectura de objetos y 8000 solicitudes de escritura de objetos por segundo, lo que supone una mejora significativa en comparación con las 8000 solicitudes de lectura de objetos y las 1000 solicitudes de escritura de objetos por segundo que ofrecen los segmentos sin HNS.
Monta directorios específicos cuando sea posible: si tu carga de trabajo implica acceder a un directorio específico de un segmento, usa la marca
--only-dir
durante el montaje. Este enfoque específico acelera las llamadas de lista, ya que limita el ámbito de las llamadas deLookUpInode
, que implican una llamada delist+stat
por cada archivo o directorio de la ruta especificada. Al limitar el montaje al subdirectorio necesario, se minimizan estas llamadas, lo que mejora el rendimiento.Optimizar el almacenamiento en caché de metadatos: configura tus cachés de metadatos para maximizar su capacidad y define un tiempo de vida (TTL) infinito. De esta forma, se almacena en caché de forma eficaz todos los metadatos a los que se accede durante la duración del trabajo, lo que minimiza las solicitudes de acceso a metadatos en Cloud Storage. Esta configuración resulta especialmente útil para los volúmenes de solo lectura, ya que elimina las búsquedas repetidas de metadatos de Cloud Storage. Sin embargo, compruebe que el consumo de memoria asociado a estas grandes cachés de metadatos se ajusta a las capacidades de su sistema.
Maximizar los recursos de sidecar de GKE: Cloud Storage FUSE funciona en un contenedor de sidecar en un entorno de GKE. Para evitar cuellos de botella de recursos, elimina las limitaciones de consumo de CPU y memoria del contenedor sidecar. De esta forma, Cloud Storage FUSE puede escalar el uso de sus recursos en función de las demandas de las cargas de trabajo, lo que evita la limitación y garantiza un rendimiento óptimo.
Rellena la caché de metadatos de forma proactiva: habilita la prefetched de metadatos para el controlador de CSI. De esta forma, se rellenan de forma eficiente los metadatos y las cachés de listas, lo que minimiza las llamadas de metadatos a Cloud Storage y acelera la ejecución inicial. Muchos frameworks de aprendizaje automático lo hacen automáticamente, pero es fundamental asegurarse de que se realice este paso en el código de entrenamiento personalizado. Para obtener más información, consulta Usar la prefetización de metadatos para rellenar previamente la caché de metadatos.
Utiliza la caché de archivos y las descargas paralelas: habilita la función de caché de archivos, sobre todo en cargas de trabajo de entrenamiento de varias épocas, en las que los datos se leen repetidamente. La caché de archivos almacena los datos a los que se accede con frecuencia en el almacenamiento local (SSD en el caso de las máquinas A3), lo que mejora el rendimiento de lectura. Complementa esta función con la de descargas paralelas, sobre todo en las cargas de trabajo de servicio, para acelerar la descarga de archivos grandes dividiéndolos en fragmentos más pequeños y descargándolos simultáneamente.
Optimizar los puntos de control: para crear puntos de control con Cloud Storage FUSE, te recomendamos que uses un segmento HNS. Si usas un contenedor que no es de HNS, asigna un valor alto al parámetro
rename-dir-limit
para adaptarte a los cambios de nombre de directorio que suelen emplear los frameworks de aprendizaje automático durante la creación de puntos de control. Sin embargo, ten en cuenta que los cambios de nombre de los directorios en los cubos que no son de HNS pueden no ser atómicos y pueden tardar más en completarse.Habilitar el almacenamiento en caché de listas: usa el almacenamiento en caché de listas con la marca
--kernel-list-cache-ttl-secs
para mejorar aún más el rendimiento. Esta función almacena en caché los directorios y las listas de archivos, lo que mejora la velocidad de las operaciones dels
. El almacenamiento en caché de listas es especialmente útil para cargas de trabajo que implican listados de directorios completos repetidos, algo habitual en los casos de entrenamiento de IA o de aprendizaje automático. Es recomendable usar el almacenamiento en caché de listas con montajes de solo lectura para mantener la coherencia de los datos.Aumentar la lectura anticipada del kernel: en el caso de las cargas de trabajo que implican principalmente lecturas secuenciales de archivos grandes, como el servicio y la restauración de puntos de control, aumentar el tamaño de lectura anticipada puede mejorar significativamente el rendimiento. Para aumentar la lectura anticipada de Cloud Storage FUSE, especifica la marca
read_ahead_kb
enmountOptions
y asigna el valor 1 MB (por ejemplo,read_ahead_kb=1024
). Esta función requiere la versión 1.32.2-gke.1297001 de GKE o una posterior.Habilita las escrituras de streaming: las escrituras de streaming son una nueva ruta de escritura que sube datos directamente a Cloud Storage a medida que se escriben. Este método es diferente del método de escritura predeterminado, que almacena temporalmente toda la escritura en un directorio local y, a continuación, la sube a Cloud Storage cuando se realiza una operación
close
ofsync
. Las escrituras de streaming reducen tanto la latencia como el uso del espacio en disco, por lo que son especialmente útiles para las escrituras secuenciales de gran tamaño, como los puntos de control. Para habilitar las escrituras de streaming, especifica la marca de línea de comandosenable-streaming-writes
enmountOptions
.
Solucionar problemas
Para obtener más información sobre cómo solucionar problemas con el controlador CSI de Cloud Storage FUSE, consulta la guía de solución de problemas en la documentación del proyecto de GitHub.
Siguientes pasos
- Consulta más ejemplos de uso del controlador CSI en GitHub.
- Consulta más información sobre Cloud Storage FUSE.