Optimiza el controlador de CSI de Cloud Storage FUSE para mejorar el rendimiento de GKE


En esta guía, se muestra cómo optimizar el rendimiento del controlador de CSI de Cloud Storage FUSE en Google Kubernetes Engine (GKE).

Si bien Cloud Storage FUSE ofrece flexibilidad y escalabilidad, es fundamental realizar una configuración y un ajuste cuidadosos para lograr un rendimiento óptimo. El rendimiento de Cloud Storage FUSE puede diferir del de un sistema de archivos POSIX en términos de latencia, capacidad de procesamiento y coherencia. El objetivo del ajuste es minimizar la sobrecarga de las operaciones de metadatos y maximizar la eficiencia del acceso a los datos. Si ejecutas aplicaciones de IA/AA que consumen datos en buckets de Cloud Storage, ajustar el controlador de CSI puede generar tiempos de entrenamiento y de inferencia más rápidos para tus aplicaciones de IA/AA.

Esta guía está dirigida a desarrolladores e ingenieros de aprendizaje automático (AA) que desean mejorar el rendimiento de sus aplicaciones que acceden a datos almacenados en buckets 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 Cloud Storage FUSE. Asegúrate de consultar también los requisitos de la versión de GKE para las funciones específicas que quieras usar.

Cómo configurar opciones de activación

El controlador CSI de Cloud Storage FUSE admite opciones de activación para configurar cómo se activan los buckets de Cloud Storage en tu sistema de archivos local. Para obtener la lista completa de las opciones de activación compatibles, consulta la documentación del archivo de la CLI de Cloud Storage FUSE.

Puedes especificar las opciones de activación de las siguientes maneras, según el tipo de volumen que uses:

Volumen efímero de CSI

Si usas volúmenes efímeros de CSI, especifica las opciones de activación en el campo spec.volumes[n].csi.volumeAttributes.mountOptions de tu manifiesto de Pod.

Debes especificar las opciones de activación 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 activación en el campo spec.mountOptions de tu manifiesto de PersistentVolume.

Debes especificar las opciones de activación como una lista. Por ejemplo:

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

Consideraciones de montaje

Considera lo siguiente cuando configures las activaciones con el controlador de CSI:

Consideraciones generales

  • Las siguientes marcas no están permitidas: app-name, temp-dir, foreground, log-file, log-format, key-file, token-url y reuse-token-from-url.
  • El FUSE de Cloud Storage no hace que los directorios implícitos sean visibles de forma predeterminada.
  • Si solo deseas activar un directorio en el bucket en lugar de todo el bucket, pasa la ruta de acceso relativa al directorio con la marca only-dir=relative/path/to/the/bucket/root.

Seguridad y permisos

  • Si usas un Security Context para tu Pod o contenedor, o si tu imagen de contenedor usa un usuario o grupo que no sean raíz, debes configurar las marcas de activación uid y gid. También debes usar las marcas de activación file-mode y dir-mode para configurar los permisos del sistema de archivos. Ten en cuenta que no puedes ejecutar los comandos chmod, chown o chgrp en un sistema de archivos de Cloud Storage FUSE, por lo que debes usar las marcas de activación uid, gid, file-mode y dir-mode para obtener acceso para un usuario o grupo no raíz.

Opciones de activación del kernel de Linux

  • Si necesitas configurar las opciones de activación del kernel de Linux, puedes pasar las opciones a través de la marca o. Por ejemplo, si no deseas permitir la ejecución directa de ningún objeto binario en el sistema de archivos activado, establece la marca o=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 y dirsync.

Configura el almacenamiento en caché

En esta sección, se proporciona una descripción general de las opciones de almacenamiento en caché disponibles con el controlador CSI de Cloud Storage FUSE para mejorar el rendimiento.

Almacenamiento en caché de archivos

Puedes usar el controlador CSI de Cloud Storage FUSE con almacenamiento en caché de archivos para mejorar el rendimiento de lectura de las aplicaciones que controlan archivos pequeños de buckets de Cloud Storage. La función de caché de archivos de Cloud Storage FUSE es una caché de lectura basada en el cliente que permite que las lecturas de archivos repetidas se entreguen más rápido desde el almacenamiento en caché que elijas.

Puedes elegir entre una variedad de opciones de almacenamiento para la caché de lectura, incluidos SSD locales, almacenamiento en bloque duradero, como Google Cloud Hyperdisk o Persistent Disk, y RAM disk (memoria), según tus necesidades de precio y rendimiento.

Habilita y usa 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 de CSI de Cloud Storage FUSE.

Para habilitar y controlar el almacenamiento en caché de archivos, establece el atributo de volumen fileCacheCapacity o usa la opción de activación file-cache:max-size-mb.

De forma predeterminada, GKE usa un volumen emptyDir para el almacenamiento en caché de archivos de Cloud Storage FUSE respaldado por el almacenamiento efímero configurado en el nodo. Puede ser el disco de arranque conectado al nodo o un SSD local en el nodo. Si habilitas SSD local en el nodo, GKE usa la SSD local para respaldar el volumen emptyDir.

Puedes configurar un volumen de caché de lectura personalizado para el contenedor de archivo adicional para reemplazar el volumen emptyDir predeterminado para el almacenamiento en caché de archivos en 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 para respaldar la caché de archivos, consulta estas consideraciones:

  • Para las familias de VMs de CPU y GPU que admiten SSD local (por ejemplo, las VMs A3), recomendamos usar SSD local.

    • En el caso de las VMs A3+, GKE configura automáticamente las SSD locales para que las consuman tus Pods.
    • Si tu familia de VM no admite SSD local, GKE usa el disco de arranque para el almacenamiento en caché. El tipo de disco predeterminado para el disco de arranque en GKE es pd-balanced.
    • Si tu familia de VM admite SSD locales, pero no tiene habilitado de forma predeterminada el almacenamiento efímero en SSD locales, puedes habilitar las SSD locales en tu grupo 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 Crea un clúster con SSD local.

      Para verificar 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"
      
  • Para las familias de VMs de TPU, en especial las v6 y posteriores, recomendamos usar RAM como caché de archivos para obtener el mejor rendimiento, ya que estas instancias de VM tienen una RAM más grande.

    • Cuando uses RAM, presta atención a los errores de memoria insuficiente (OOM), ya que provocan interrupciones en los Pods. Cloud Storage FUSE consume memoria, por lo que configurar una caché de archivos para consumir el contenedor de sidecar puede generar errores de OOM. Para evitar este tipo de 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.
    • Para otras familias de TPU, recomendamos usar pd-balanced o pd-ssd. El tipo de disco predeterminado para el disco de arranque en GKE es pd-balanced.
  • Evita usar el disco de arranque para el almacenamiento en caché, ya que puede reducir el rendimiento y provocar finalizaciones inesperadas. En su lugar, considera usar un PersistentVolume respaldado por almacenamiento en bloque duradero.

Usa el almacenamiento en caché de archivos basado en disco RAM

Puedes usar un disco RAM para el almacenamiento en caché de archivos o la descarga paralela para reducir la sobrecarga del uso de un disco de arranque si usas una VM de TPU con suficiente RAM.

Para usar un disco RAM con el controlador de CSI del FUSE de Cloud Storage, agrega lo siguiente a tu manifiesto:

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

Caché de estadísticas

El controlador CSI de Cloud Storage FUSE mejora el rendimiento almacenando en caché los metadatos de los archivos, como el tamaño y la hora de modificación. De forma predeterminada, el controlador de CSI habilita esta caché de estadísticas y reduce la latencia almacenando la información de forma local en lugar de solicitarla repetidamente a Cloud Storage. Puedes configurar su tamaño máximo (el valor predeterminado es de 32 MB) y el tiempo que los datos permanecen en la caché (el valor predeterminado es de 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 la aplicación, 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 recuperación previa de metadatos para completar previamente la caché de metadatos

La función de recuperación previa de metadatos permite que el controlador CSI de Cloud Storage FUSE cargue de forma proactiva los metadatos pertinentes sobre los objetos de tu bucket de Cloud Storage en las memorias caché de Cloud Storage FUSE. Este enfoque reduce las llamadas a Cloud Storage y es especialmente beneficioso para las aplicaciones que acceden a grandes conjuntos de datos con muchos archivos, como las cargas de trabajo de entrenamiento de IA/AA.

Esta función requiere la versión 1.32.1-gke.1357001 de GKE o una posterior. Esta función no es compatible con el montaje dinámico, en el que se especifica un guion bajo (_) para activar todos los buckets a los que puede acceder la ServiceAccount de Kubernetes. Si usas el montaje dinámico, no se realiza la recuperación previa de metadatos.

Para ver las mejoras de rendimiento de la recuperación previa de metadatos, debes establecer el valor de tiempo de actividad (TTL) de los elementos de la caché de metadatos como ilimitado. Por lo general, establecer un TTL evita que el contenido almacenado en caché se vuelva obsoleto. Cuando configuras el TTL como ilimitado, debes tener cuidado de no cambiar el contenido del bucket fuera de banda (es decir, permitir que otra carga de trabajo o actor modifique la carga de trabajo). Los cambios fuera de banda no son visibles de forma local y podrían causar problemas de coherencia.

Para habilitar la recuperación previa de metadatos, realiza los siguientes cambios de configuración. Recomendamos habilitar esta función en los volúmenes que se leen con frecuencia.

Para ver un ejemplo, consulta la muestra de código en Mejora el rendimiento de lectura de archivos grandes con descargas paralelas.

Caché de lista

Para acelerar los listados de directorios de las aplicaciones, puedes habilitar el almacenamiento en caché de listas. Esta función almacena los directorios en la memoria para que las solicitudes repetidas se puedan atender más rápido. La caché de listas está inhabilitada de forma predeterminada. Puedes habilitarla si configuras el parámetro kernel-list-cache-ttl-secs en tus opciones de montaje. Define cuánto tiempo se almacenan en caché las fichas.

Mejora el rendimiento de lectura de archivos grandes con descargas paralelas

Puedes usar la descarga paralela de Cloud Storage FUSE para acelerar la lectura de archivos grandes de Cloud Storage para descargas de múltiples subprocesos. La descarga paralela de Cloud Storage FUSE puede ser especialmente beneficiosa para los casos de uso de la entrega de modelos con lecturas de más de 1 GB de tamaño.

Las descargas paralelas requieren que se habilite la caché de archivos. A partir de la versión 1.32.0-gke.1795000 de GKE, Cloud Storage FUSE aplica estrictamente este requisito y arroja 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.

A continuación, se muestran algunos ejemplos comunes:

  • Entrega de modelos, en la que necesitas un búfer de carga previa 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
Práctica recomendada:

Usa la descarga en paralelo para las aplicaciones que realizan lecturas de archivos grandes con un solo subproceso. Las aplicaciones con un alto paralelismo de lectura (que usan más de ocho subprocesos) pueden experimentar un rendimiento más bajo con esta función.

Para usar la descarga paralela con el controlador de CSI de Cloud Storage FUSE, sigue estos pasos:

  1. Crea un clúster con el almacenamiento en caché de archivos habilitado, como se describe en Habilita y usa el almacenamiento en caché de archivos.

  2. En tu manifiesto, configura estos parámetros adicionales con opciones de montaje para habilitar la descarga paralela:

    1. Establece file-cache:enable-parallel-downloads:true.
    2. Ajusta file-cache:parallel-downloads-per-file, file-cache:parallel-downloads-per-file, file-cache:max-parallel-downloads y file-cache:download-chunk-size-mb según sea necesario.
  3. (Opcional) Si es necesario, considera ajustar estos atributos de volumen:

Reduce el consumo de cuota de las verificaciones de control de acceso

De forma predeterminada, el controlador CSI realiza verificaciones de control de acceso para garantizar que la cuenta de servicio del Pod tenga acceso a tus buckets de Cloud Storage. Esto genera una sobrecarga adicional en forma de llamadas a la API de Kubernetes Service, 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 esas verificaciones redundantes y reducir el consumo de cuota.

Ejemplo de servicio de inferencia

En el siguiente ejemplo, se muestra cómo habilitar la descarga paralela para la entrega de inferencias:

  1. 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
    

    Reemplaza los siguientes valores:

    • NAMESPACE: Es el espacio de nombres de Kubernetes en el que deseas implementar tu Pod.
    • BUCKET_NAME: Es el nombre del bucket de Cloud Storage que especificaste cuando configuraste el acceso a los buckets de Cloud Storage. Puedes especificar un guion bajo (_) para activar todos los buckets a los que puede acceder la ServiceAccount de Kubernetes. Para obtener más información, consulta Activación dinámica en la documentación de Cloud Storage FUSE.
  2. Aplica el manifiesto al clúster:

    kubectl apply -f PV_FILE_PATH
    

    Reemplaza PV_FILE_PATH por la ruta de acceso a tu archivo YAML.

  3. Crea un manifiesto de Pod con la siguiente especificación para consumir el PersistentVolumeClaim, según si usas el almacenamiento en caché de archivos respaldado por SSD local o el almacenamiento en caché de archivos respaldado por RAM disk:

    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
    
  4. Aplica el manifiesto al clúster:

    kubectl apply -f POD_FILE_PATH
    

    Reemplaza POD_FILE_PATH por la ruta de acceso a tu archivo YAML.

Configura los atributos de volumen

Los atributos de volumen te permiten configurar el comportamiento específico del controlador de CSI de Cloud Storage FUSE.

El controlador de 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 con los atributos de volumen del CSI de Cloud Storage FUSE. El controlador de CSI se encarga de traducir los valores de los atributos de volumen a los campos del archivo de configuración.

Para obtener la lista completa de los atributos de volumen admitidos, consulta la referencia de los atributos de volumen.

Puedes especificar los atributos de volumen de las siguientes maneras:

  • En el campo spec.csi.volumeAttributes de un manifiesto de PersistentVolume, si usas PersistentVolumes.
  • 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 de GKE Monitoring. En Métricas del sistema de GKE, puedes encontrar detalles sobre las métricas de Cloud Storage FUSE, como etiquetas, tipo y unidad. Estas métricas están disponibles para cada Pod que usa Cloud Storage FUSE, y puedes usarlas para configurar estadísticas por volumen y bucket.

Las métricas están habilitadas de forma predeterminada a partir de la versión 1.33.0-gke.2248000 de GKE o posterior. Para inhabilitarlos, establece el atributo de volumen disableMetrics en "true".

Métricas del sistema de archivos

Las métricas del sistema de archivos registran el rendimiento y el estado de tu sistema de archivos, incluida la cantidad 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 supervisar las métricas de Cloud Storage, como el volumen de datos, la velocidad y la actividad de solicitudes, para comprender cómo interactúan tus aplicaciones con los buckets de Cloud Storage. Estos datos pueden ayudarte a identificar áreas de optimización, como mejorar los patrones de lectura o reducir la cantidad 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

Puedes supervisar las métricas de la caché de archivos, como el volumen de datos leídos, la velocidad y la tasa de acierto de caché, para optimizar el rendimiento de Cloud Storage FUSE y 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

Habilita la configuración predeterminada de rendimiento de Cloud Storage FUSE

A partir de la versión 1.33.2-gke.1043000, GKE habilita automáticamente varios valores predeterminados para Cloud Storage FUSE que se ejecuta en nodos respaldados por tipos de máquinas de alto rendimiento.

Durante la activación del volumen, el controlador de CSI de Cloud Storage FUSE recupera el tipo de instancia del nodo de destino y lo pasa a Cloud Storage FUSE a través de una nueva opción de activación machine-type.

Cuando se le pasa un tipo de máquina de alto rendimiento, Cloud Storage FUSE establece automáticamente las siguientes opciones de activación 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, los valores predeterminados automáticos no las reemplazarán.

Para inhabilitar la función, incluye disable-autoconfig en las opciones de activación. Por ejemplo:

mountOptions: "implicit-dirs,disable-autoconfig"

Prácticas recomendadas para el ajuste del rendimiento

En esta sección, se enumeran algunas técnicas recomendadas de optimización y ajuste del rendimiento para el controlador de CSI de Cloud Storage FUSE.

  • Aprovecha los buckets con espacio de nombres jerárquico (HNS): Opta por los buckets con HNS para lograr un aumento considerable de 8 veces en las consultas por segundo (QPS) iniciales. Esta elección también facilita los cambios de nombre de directorios atómicos y rápidos, un requisito fundamental para la creación de puntos de control eficientes con Cloud Storage FUSE. Los buckets de HNS garantizan una mejor experiencia similar a la de un archivo, ya que admiten 40,000 solicitudes de lectura de objetos y 8,000 solicitudes de escritura de objetos por segundo, lo que representa una mejora significativa en comparación con las 8,000 solicitudes de lectura de objetos y las 1,000 solicitudes de escritura de objetos por segundo que ofrecen los buckets planos.

  • Activa directorios específicos cuando sea posible: Si tu carga de trabajo implica acceder a un directorio específico dentro de un bucket, usa la marca --only-dir durante la activación. Este enfoque específico acelera las llamadas a la lista, ya que limita el alcance de las llamadas a LookUpInode, que implican una llamada a list+stat para cada archivo o directorio en la ruta especificada. Si limitas el montaje al subdirectorio requerido, minimizas estas llamadas, lo que genera mejoras en el rendimiento.

  • Optimiza el almacenamiento en caché de metadatos: Configura tus cachés de metadatos para maximizar su capacidad y establecer un tiempo de actividad (TTL) infinito. Esta práctica almacena en caché de manera eficaz todos los metadatos a los que se accede durante la duración de tu trabajo, lo que minimiza las solicitudes de acceso a los metadatos de Cloud Storage. Esta configuración resulta especialmente beneficiosa para los volúmenes de solo lectura, ya que elimina las búsquedas repetidas de metadatos de Cloud Storage. Sin embargo, verifica que el consumo de memoria asociado con estas grandes cachés de metadatos se alinee con las capacidades de tu sistema.

  • Maximiza los recursos de los sidecars de GKE: Cloud Storage FUSE opera dentro de un contenedor sidecar en un entorno de GKE. Para evitar cuellos de botella de recursos, quita las limitaciones en el consumo de CPU y memoria del contenedor secundario. Esto permite que Cloud Storage FUSE escale su uso de recursos según las demandas de carga de trabajo, lo que evita la limitación y garantiza un rendimiento óptimo.

  • Completa la caché de metadatos de forma proactiva: Habilita la recuperación previa de metadatos para el controlador de CSI. Esto completa de manera eficiente las cachés de metadatos y de listas, lo que minimiza las llamadas de metadatos a Cloud Storage y acelera la ejecución inicial. Muchos frameworks de AA realizan esta operación automáticamente, pero es fundamental asegurarse de que se realice este paso para el código de entrenamiento personalizado. Para obtener más información, consulta Cómo usar la recuperación previa de metadatos para completar previamente la caché de metadatos.

  • Utiliza la caché de archivos y las descargas paralelas: Habilita la función de caché de archivos, en especial para las cargas de trabajo de entrenamiento de varias épocas, en las que los datos se leen de forma repetida. 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 esto con la función de descargas paralelas, en especial para las cargas de trabajo de entrega, para acelerar la descarga de archivos grandes dividiéndolos en fragmentos más pequeños y descargándolos de forma simultánea.

  • Optimiza los puntos de control: Para crear puntos de control con Cloud Storage FUSE, recomendamos enfáticamente usar un bucket de HNS. Si usas un bucket que no es de HNS, establece el parámetro rename-dir-limit en un valor alto para admitir los cambios de nombre de directorio que suelen emplear los frameworks de AA durante el proceso de creación de puntos de control. Sin embargo, ten en cuenta que los cambios de nombre de los directorios en buckets que no son de HNS podrían no ser atómicos y podrían tardar más en completarse.

  • Habilita el almacenamiento en caché de listas: Habilita 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 de ls. El almacenamiento en caché de la lista es especialmente beneficioso para las cargas de trabajo que implican listas de directorios completas repetidas, lo que es común en situaciones de entrenamiento de IA/AA. Es recomendable usar el almacenamiento en caché de listas con activaciones de solo lectura para mantener la coherencia de los datos.

  • Aumenta la lectura anticipada del kernel: Para las cargas de trabajo que implican principalmente lecturas secuenciales de archivos grandes, como la entrega y la restauración de puntos de control, aumentar el tamaño de la lectura anticipada puede mejorar significativamente el rendimiento. Para aumentar la lectura anticipada de Cloud Storage FUSE, especifica la marca read_ahead_kb en mountOptions y configúrala en 1 MB (p.ej., 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 transmisión: Las escrituras de transmisión son una nueva ruta de escritura que sube datos directamente a Cloud Storage a medida que se escriben. Este enfoque difiere del método de escritura predeterminado, que almacena temporalmente toda la escritura en un directorio local y, luego, la sube a Cloud Storage tras una operación close o fsync. Las escrituras de transmisión reducen la latencia y el uso del espacio en disco, lo que las hace especialmente beneficiosas para las escrituras secuenciales grandes, como los puntos de control. Para habilitar las escrituras de transmisión, especifica la marca de línea de comandos enable-streaming-writes en mountOptions.

¿Qué sigue?