En esta página, se muestra cómo usar los puntos de control de varios niveles para almacenar y administrar puntos de control de forma confiable durante el entrenamiento de modelos de aprendizaje automático en GKE. El almacenamiento y la administración de puntos de control son fundamentales para los trabajos de entrenamiento a gran escala, definidos como aquellos que utilizan más de miles de nodos. Las interrupciones de estos trabajos a gran escala son frecuentes (potencialmente cada hora) y la recuperación de ellos puede ser lenta.
Beneficios
El uso de puntos de control de varios niveles proporciona los siguientes beneficios:
- Administración de datos de puntos de control completamente organizada, incluidas copias de seguridad, replicación y restablecimiento automático para las siguientes cargas de trabajo:
- Rondas de entrenamiento de JAX que usan Orbax para la administración de estados que se ejecutan en TPU
- Cargas de trabajo de PyTorch en GPU
- Recuperación rápida de trabajos de entrenamiento desde un punto de control almacenado en el nodo local. También puedes realizar la recuperación con los puntos de control almacenados en otro nodo del clúster de entrenamiento.
- Restablecimiento rápido de trabajos de entrenamiento desde una copia de seguridad de un punto de control almacenado en Cloud Storage en el peor de los casos, en los que no hay puntos de control en el clúster.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si deseas usar Google Cloud CLI para esta tarea,
instala y, luego,
inicializa
gcloud CLI. Si ya instalaste la gcloud CLI, ejecuta el comando
gcloud components updatepara obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos que se indican en este documento.
- Crea un bucket de Cloud Storage si no tienes uno para tu proyecto. Asegúrate de habilitar el espacio de nombres jerárquico; de lo contrario, las copias de seguridad fallarán.
Requisitos
La creación de puntos de control de varios niveles requiere la versión 1.32.4-gke.1415000 o posterior del clúster de GKE.
Limitaciones
- Los clústeres de Autopilot no son compatibles.
Configura nodos de GKE para usar la creación de puntos de control de varios niveles
En esta sección, se explica cómo configurar los nodos de GKE en clústeres nuevos y existentes.
Configura nodos en un clúster nuevo
Crea un clúster con la creación de puntos de control de varios niveles, el controlador de CSI de Cloud Storage FUSE y la Workload Identity Federation for GKE habilitada. Si usas porciones de TPU para tu carga de trabajo de aprendizaje automático, deberás ajustar el comando de creación del clúster para incluir la configuración de un grupo de nodos de porción de TPU.
gcloud container clusters create CLUSTER_NAME \ --addons=HighScaleCheckpointing,GcsFuseCsiDriver \ --node-locations=NODE_LOCATION \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=CLUSTER_VERSION --location=CLUSTER_LOCATION \ --machine-type=MACHINE_TYPE \ --num-nodes=NUM_NODESReemplaza los siguientes valores:
CLUSTER_NAME: el nombre del clústerNODE_LOCATION: Es la zona de los nodos del clúster. Aquí se encuentra tu capacidad de TPU.PROJECT_ID: Es el ID del proyecto de Google Cloud .CLUSTER_VERSION: Es la versión del clúster. La versión mínima compatible es la 1.32.4-gke.1415000.CLUSTER_LOCATION: Es la región en la que deseas crear el clúster.MACHINE_TYPE: Es el tipo de máquina que se usa para los nodos que ejecutan componentes como el controlador de JobSet y el controlador de puntos de control de varios niveles. Para el entrenamiento a gran escala, recomendamos usar al menose2-standard-4máquinas. No usarás este tipo de máquina para el entrenamiento de modelos. En cambio, crearás grupos de nodos separados para ese propósito, que a menudo utilizarán familias de VM optimizadas para aceleradores.NUM_NODES: Es la cantidad de nodos que se crearán en cada una de las zonas del clúster.
Configura nodos en un clúster existente
Para usar la creación de puntos de control de varios niveles con un clúster existente, habilítala junto con el controlador de CSI de Cloud Storage FUSE y Workload Identity Federation for GKE con los siguientes comandos. La versión del clúster existente debe ser posterior a 1.32.3-gke.1170000.
Habilita la federación de identidades para cargas de trabajo para GKE:
gcloud container clusters update CLUSTER_NAME \ --workload-pool=PROJECT_ID.svc.id.goog \ --location=CLUSTER_LOCATIONReemplaza los siguientes valores:
CLUSTER_NAME: el nombre del clústerPROJECT_ID: Es el ID del proyecto de Google Cloud .CLUSTER_LOCATION: es la región del clúster.
Habilita la creación de puntos de control de varios niveles y el controlador de CSI de Cloud Storage FUSE:
gcloud container clusters update CLUSTER_NAME \ --update-addons=HighScaleCheckpointing=ENABLED,GcsFuseCsiDriver=ENABLED \ --location=CLUSTER_LOCATION
Configura permisos para usar la creación de puntos de control de varios niveles
En esta sección, se explica cómo configurar los permisos para usar los puntos de control de varios niveles.
Otorga acceso a los buckets de Cloud Storage
Los volúmenes efímeros que usa el controlador de CSI de Multi-Tier Checkpointing deben usar buckets de Cloud Storage existentes.
Para almacenar puntos de control en un bucket de Cloud Storage, el sistema de puntos de control de varios niveles necesita acceso al bucket. Otorga el rol de IAM de usuario de objetos de almacenamiento (roles/storage.objectUser) en el bucket a la cuenta de servicio de Kubernetes para la creación de puntos de control de varios niveles.
gcloud storage buckets add-iam-policy-binding gs://GCS_BUCKET \
--member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/gke-managed-checkpointing/sa/gke-checkpointing-multitier-node" \
--role "roles/storage.objectUser"
Reemplaza los siguientes valores:
GCS_BUCKET: Es el nombre del bucket de Cloud Storage desde el que transferirás los datos.PROJECT_ID: Es el ID del proyecto de Google Cloud .PROJECT_NUMBER: Es un identificador único generado de forma automática para tu proyecto. Para encontrar este valor, consulta Crea y administra proyectos.
Otorga acceso a la cuenta de servicio predeterminada de Compute Engine (opcional)
Si tus instancias de Compute Engine necesitan acceso de lectura al bucket de Cloud Storage, otorga el rol de IAM de visualizador de objetos de Storage (roles/storage.objectViewer) a la cuenta de servicio predeterminada de Compute Engine.
gcloud storage buckets add-iam-policy-binding gs://GCS_BUCKET \
--member serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
--role roles/storage.objectViewer
Implementa el controlador de JobSet
El controlador de JobSet es responsable de administrar los trabajos por lotes que ejecutan el entrenamiento de tu modelo en GKE, y su asignación de recursos se ajusta para controlar la carga de trabajo de manera eficiente. Asegúrate de que el selector de trabajos de entrenamiento implemente y use JobSet.
Para aumentar la solicitud de memoria a 1 Gi, el límite de memoria a 2 Gi y la solicitud de CPU a 1 para el contenedor del administrador en tu implementación de JobSet, ejecuta el siguiente comando de parche:
kubectl patch -n jobset-system deploy jobset-controller-manager --type json \
--patch '[{"op": "add", "path": "/spec/template/spec/containers/0/resources", "value": {"limits": {"memory": "2Gi"}, "requests": {"cpu": "1", "memory": "1Gi"}}}]'
Inicializa el controlador de CSI de Multi-Tier Checkpointing
En esta sección, se describe cómo inicializar el controlador de CSI de puntos de control de varios niveles en los nodos en los que se ejecutarán tus cargas de trabajo. El controlador de CSI es responsable de controlar el almacenamiento y la administración de los puntos de control durante el proceso de entrenamiento de modelos.
Crea un CheckpointConfiguration
Un CheckpointConfiguration es un recurso personalizado de Kubernetes que especifica las propiedades para implementar el controlador de CSI de Multi-Tier Checkpointing. Este recurso tiene alcance de clúster.
Crea el siguiente manifiesto
checkpoint.yaml.apiVersion: checkpointing.gke.io/v1 kind: CheckpointConfiguration metadata: name: MTC_CONFIG_NAME-configuration spec: cloudStorageBucketName: GCS_BUCKET nodeSelector: node.kubernetes.io/instance-type: MACHINE_TYPE tolerations: - key: TOLERATION_KEY operator: Exists effect: NoSchedule inMemoryVolumeSize: IN_MEMORY_VOLUME_SIZE gcsFuseMountOptions: - implicit-dirs - metadata-cache:negative-ttl-secs:0 - metadata-cache:ttl-secs:-1 - metadata-cache:stat-cache-max-size-mb:-1 - metadata-cache:type-cache-max-size-mb:-1 - file-system:kernel-list-cache-ttl-secs:0 - read_ahead_kb=1024 - write:enable-streaming-writes:trueReemplaza lo siguiente:
- MTC_CONFIG_NAME: Es el nombre de tu CheckpointConfiguration. Este nombre es global para el clúster y no es específico del trabajo.
- GCS_BUCKET: Es el nombre del bucket de Cloud Storage en el que almacenarás los datos de los puntos de control. Usa el bucket que configuraste en el paso Configura un bucket de Cloud Storage con permisos.
MACHINE_TYPE: Es el tipo de máquina para los aceleradores correspondientes. El valor puede ser uno de los siguientes:
- TPU v5p:
ct5p-hightpu-4t - TPU v5e:
ct5e-hightpu-4t - TPU v6e:
ct6e-standard-4t - Ironwood (TPU7x):
tpu7x-standard-4t - GPU NVIDIA H100 de 80 GB (serie A3):
Para obtener más información sobre la ejecución de cargas de trabajo distribuidas en GPUs con GKE, consulta Ejecuta GPUs de instancias múltiples. Para las TPU, consulta Crea el grupo de nodos de porción de TPU.
- TPU v5p:
TOLERATION_KEY: Este campo permite que el controlador de CSI se programe en nodos con tolerancias coincidentes. Para obtener más información sobre cómo funcionan las taints en diferentes tipos de aceleradores, consulta estas páginas:
IN_MEMORY_VOLUME_SIZE: Es el tamaño de la caché de puntos de control en memoria. Especifica la cantidad y la unidad (por ejemplo, 200 Gi).Este valor debe cumplir con los siguientes requisitos:
- El tamaño del punto de control local para las TPU multiplicado por 2.2
- El tamaño del punto de control local para las GPUs con un solo par multiplicado por 6.6.
Aplica el manifiesto
kubectl apply -f checkpoint.yamlVerifica que el controlador de CSI se esté ejecutando:
kubectl get pod -n gke-managed-checkpointingEl resultado debería ser similar al siguiente ejemplo. Habrá varias entradas, una por cada nodo acelerado.
NAME READY STATUS RESTARTS AGE multitier-driver-e2b033a7-a4e7-496a-87a3-ffd7fcc2e57b-2d4fz 5/5 Running 0 114s
Desinstala el controlador de CSI de Multi-Tier Checkpointing
Si quieres anular la implementación del controlador de CSI de Multi-Tier Checkpointing, borra el recurso CheckpointConfiguration. El controlador de Multi-Tier Checkpointing quita el controlador de CSI de los nodos. Esto quita los discos de RAM y libera memoria para otras cargas de trabajo. Por ejemplo:
kubectl delete -f checkpoint.yaml
Administra la retención de datos y la recolección de elementos no utilizados para las copias de seguridad de Cloud Storage
Eres responsable de implementar políticas de retención para las copias de seguridad de los puntos de control de Cloud Storage. La función de Multi-Tier Checkpointing solo escribe copias de seguridad de los puntos de control en Cloud Storage y nunca las modifica ni las borra.
Muchas herramientas de código abierto pueden controlar la retención y la recolección de elementos no utilizados, incluidas las siguientes:
En el siguiente ejemplo, se usa backup-warden, en el que el directorio backup se
activa en una ubicación de copia de seguridad que usa Cloud Storage FUSE:
# Add --delete option to actually delete the backups, as is it only shows what would be deleted (dry-run)
backup-warden -p backup \
--hourly 24 \
--daily 7 \
--weekly 5 \
--monthly always \
--yearly always \
--prefer-recent
Actualiza el manifiesto de JobSet de la carga de trabajo
Actualiza el manifiesto de JobSet para que tu trabajo incluya el volumen de puntos de control a gran escala. Los detalles dependen de tu carga de trabajo.
Por ejemplo, para extender el JobSet de ejemplo de Implementa TPU Multislices en GKE, sigue estos pasos:
Agrega las siguientes líneas al contenedor
jax-tpu.volumeMounts: - name: checkpoint mountPath: CHECKPOINT_DIRReemplaza CHECKPOINT_DIR por la ruta de acceso al directorio de puntos de control. Esta es la ubicación en la que se genera el
replicator.yamly en la que la creación de puntos de control de varios niveles realiza la operación de guardado del punto de control. Para obtener más información, consulta Cómo integrar el registro de puntos de control de varios niveles en tu aplicación.Agrega las siguientes líneas al campo
spec.template.specde la especificación del trabajo.volumes: - name: checkpoint csi: driver: multitier-checkpoint.csi.storage.gke.io
Integra la creación de puntos de control de varios niveles en tu aplicación
Para compartir información sobre las ubicaciones de los puntos de control y la preparación de la replicación, modifica tu aplicación para que use el siguiente protocolo para comunicarse con Multi-Tier Checkpointing.
Los siguientes frameworks y bibliotecas ya implementan esta integración:
- MaxText (con Orbax): MaxText tiene compatibilidad integrada con el registro de puntos de control de varios niveles (MTC). Para obtener más información, consulta la documentación de MTC de MaxText.
- Cualquier modelo que use Orbax: La integración consta de dos componentes principales: el módulo de inicialización de MTC para la configuración inicial (para ver un ejemplo, consulta MaxText) y el administrador de puntos de control de replicador para guardar y restablecer puntos de control desde un disco RAM local (para ver un ejemplo, consulta MaxText).
- Ejemplo de referencia de PyTorch: Este ejemplo está disponible para cargas de trabajo que usan NeMo con PyTorch.
Startup
En esta sección, se describen los pasos iniciales que debe seguir la aplicación para interactuar con el sistema de puntos de control de varios niveles.
El replicador es un componente principal de los puntos de control de varios niveles, que se ejecuta en cada nodo como parte del controlador de CSI. El replicador administra la replicación de puntos de control en los niveles de almacenamiento, desde el disco RAM local hasta los nodos de intercambio de tráfico y el almacenamiento externo, como Cloud Storage.
El archivo replicator.yaml actúa como un plano de control dinámico entre tu trabajo de entrenamiento de AA (código del framework) y el componente Replicator. Tu aplicación de AA genera este archivo de forma programática en el volumen local (RAMDisk), al que pueden acceder tanto el trabajo de entrenamiento como el servicio de Replicator. Este manifiesto permite que el framework de AA proporcione instrucciones de configuración del tiempo de ejecución y administración del ciclo de vida al replicador, que son distintas de los parámetros de infraestructura estáticos (por ejemplo, la frecuencia de carga de Cloud Storage) definidos durante la configuración del backend.
Para ver un ejemplo concreto de esta interacción, consulta lo siguiente:
- El proyecto MaxText, que utiliza esta arquitectura para JAX en Cloud TPU
- El ejemplo de referencia de PyTorch, que usa esta arquitectura con PyTorch y NVIDIA NeMO en GPUs.
Tu aplicación debe seguir estos pasos durante el inicio:
Espera hasta que el archivo
replicator.yamlno esté presente, lo que indica que el replicador está listo para que lo configure tu aplicación. El archivoreplicator.yamlse genera en la ubicación CHECKPOINT_DIR que configuraste en la sección Actualiza el manifiesto de JobSet de la carga de trabajo.Cuando se crea el trabajo de entrenamiento de modelos por primera vez, el archivo
replicator.yamlno existirá y tu aplicación podrá continuar de inmediato. Sin embargo, si el trabajo se reinició (por ejemplo, debido a una falla o una intervención manual), es posible que el sistema aún esté procesando la instancia de trabajo anterior y que elreplicator.yamlde esa instancia aún esté presente en el volumen local.Tu aplicación o trabajo de AA crea el archivo
replicator.yamlcon la configuración similar a la siguiente.Orbax
job-name: orbax framework: orbax assume-data-parallelism: 3 node-rank: 0 nodes: 32 peer-ranks: [1, 16] or peers-per-node: 2 backup-interval-minutes: 30PyTorch
job-name: nemo framework: pytorch.distributed node-rank: 0 nodes: 32 peer-ranks: [1, 16] or peers-per-node: 2 backup-interval-minutes: 30Esta configuración de ejemplo tiene los siguientes campos:
name: Es el nombre del trabajo de entrenamiento.framework: Es el framework de AA que usa el trabajo de entrenamiento.node-rank: Es el identificador único del nodo actual dentro del trabajo de entrenamiento distribuido. Representa el rango del nodo que crea este archivo. Cada nodo que participe en la ejecución tendrá su propio rango.nodes: Es la cantidad total de nodos que participan en el trabajo de entrenamiento distribuido. Este valor proviene de los metadatos del Pod. El trabajo de entrenamiento de AA también puede ver este valor.peer-ranksopeers-per-node: Dos formas alternativas de especificar la topología de replicación. Solo debe estar presente uno de estos dos parámetros.peer-ranks: Son los rangos explícitos de los nodos de intercambio de tráfico en los que se deben replicar los datos del punto de control del nodo actual. Esto brinda un control detallado sobre qué nodos específicos actúan como socios de replicación.peers-per-node: Es la cantidad de nodos de intercambio de tráfico por nodo que el replicador debe seleccionar automáticamente para la replicación.
backup-interval-minutes: Es la frecuencia, en minutos, con la que se crean copias de seguridad de los puntos de control en Cloud Storage. Te recomendamos que establezcas este valor en 30 minutos o más.
Espera hasta que el sistema borre el nuevo archivo
replicator.yaml. Esto indica que el replicador se reinició y realizó la limpieza. Este paso te permite evitar archivos temporales o obsoletos en el volumen local cuando tu aplicación realiza los pasos de la siguiente sección.
Restablece el sistema desde el último punto de control correcto conocido (LKG)
Después de que se inicializa el replicador, Multi-Tier Checkpointing crea un vínculo simbólico por trabajador de TPU o GPU. Estos vínculos simbólicos se crean en el mismo volumen local activado que el archivo
replicator.yaml, en el que el trabajo guarda los puntos de control.Los vínculos simbólicos tienen el formato
<job-name>-s{step}-n<node-rank>-w<worker-index>.restore.Restablece cada trabajador desde el archivo
.restorecorrespondiente. Para ver un ejemplo, consulta el ejemplo del administrador de puntos de control replicados de Orbax en la siguiente sección.
De forma predeterminada, el punto de control LKG es el punto de control completo más reciente que puede encontrar el punto de control de varios niveles. Se prefieren los puntos de control en el clúster (en el disco RAM local y en los nodos de intercambio de tráfico), y las copias de seguridad de Cloud Storage solo se usan cuando no existe un punto de control completo en el clúster. Para anular esta selección, consulta Cómo restablecer desde una copia de seguridad específica.
Restablece desde una copia de seguridad específica
Puedes restablecer un trabajo desde una copia de seguridad específica de Cloud Storage en lugar del punto de control de LKG, por ejemplo, para revertir el entrenamiento a un estado anterior. Antes de que comience el trabajo, sigue estos pasos:
Busca la copia de seguridad desde la que deseas restablecer los datos. La creación de puntos de control de varios niveles escribe copias de seguridad en el bucket que configuraste en CheckpointConfiguration, en un directorio que lleva el nombre del trabajo. Cada copia de seguridad es un subdirectorio con el nombre de la hora en UTC en la que se creó la copia de seguridad, con el formato
YYYY-MM-DD_HH-MM:gcloud storage ls gs://GCS_PATH/JOB_NAME/Reemplaza lo siguiente:
- GCS_PATH: Es la ruta de acceso de Cloud Storage en la que Multi-Tier Checkpointing escribe copias de seguridad. Este valor es el bucket que especificaste en el campo
cloudStorageBucketNamede CheckpointConfiguration, incluido cualquier directorio dentro del bucket. - JOB_NAME: Es el nombre del trabajo de entrenamiento, como se especifica en el campo
job-namedel archivoreplicator.yaml.
- GCS_PATH: Es la ruta de acceso de Cloud Storage en la que Multi-Tier Checkpointing escribe copias de seguridad. Este valor es el bucket que especificaste en el campo
En el directorio del trabajo del bucket, crea un archivo llamado
restore.version. El archivo solo debe contener el nombre del directorio de copia de seguridad, por ejemplo:echo "BACKUP_NAME" | gcloud storage cp - gs://GCS_PATH/JOB_NAME/restore.versionReemplaza BACKUP_NAME por el nombre del directorio de copia de seguridad, por ejemplo,
2025-06-30_14-30.Inicia el trabajo.
Cuando el archivo restore.version está presente, la creación de puntos de control de varios niveles se comporta de la siguiente manera:
- Todos los nodos se restablecen a partir de la copia de seguridad especificada. Los puntos de control dentro del clúster se ignoran, incluso si son más recientes que la copia de seguridad.
- El archivo
restore.versionse borra automáticamente después de que el trabajo guarda su primer punto de control después del restablecimiento. La anulación se aplica solo una vez: si el trabajo se reinicia más tarde, se restablece desde el punto de control de LKG como de costumbre. - Si la copia de seguridad especificada no existe o está incompleta, el trabajo se inicia sin un punto de control. La función de puntos de control de varios niveles no recurre a los puntos de control dentro del clúster ni a otras copias de seguridad.
Guarda el punto de control
Tu aplicación realiza estos pasos varias veces mientras avanza el trabajo de entrenamiento. Las operaciones de guardado se realizan en la ubicación CHECKPOINT_DIR que configuraste en Actualiza el manifiesto de JobSet de la carga de trabajo.
Orbax
Crea puntos de control de Orbax. El directorio se nombra con el número del paso. El replicador detecta el directorio de punto de control recién creado, realiza la replicación o la copia de seguridad según sea necesario y libera espacio automáticamente.
Para obtener más información sobre cómo usar el administrador de puntos de control del replicador de Orbax, consulta el archivo checkpointing de MaxText.
Para ver un ejemplo de interacción del servicio de replicador, consulta el archivo max_utils de MaxText.
PyTorch
Usa InClusterLocalCheckpointIO como un pytorch_lightning.CheckpointIO personalizado para habilitar la creación de puntos de control distribuidos correctos con almacenamiento local. En el siguiente comando de ejemplo, se habilita la creación de puntos de control de varios niveles con una implementación de referencia basada en el framework de NVIDIA NeMo:
torchrun train.py <other_train_flags> \
--local-ckpt-dir=CHECKPOINT_DIR \
--local-ckpt-interval=20 \
--job-name=JOB_NAME \
--enable-high-scale-ckpt
Reemplaza lo siguiente:
CHECKPOINT_DIR: Es la ruta de acceso al directorio de puntos de control.JOB_NAME: Es el nombre de la carga de trabajo de tu trabajo de entrenamiento.
Actualizaciones de clústeres
Para las actualizaciones de clústeres, puedes borrar y volver a crear tu objeto CheckpointConfiguration
antes o después de la actualización. Esta acción es obligatoria porque el DaemonSet del controlador de puntos de control de nodos, que este objeto implementa de forma dinámica, no se actualizará automáticamente.
Si quieres mantener la misma especificación del DaemonSet, no necesitas hacer nada.
Solucionar problemas
En esta sección, se proporciona orientación para solucionar problemas relacionados con el Multi-Tier Checkpointing. Para solucionar problemas generales de almacenamiento, consulta Soluciona problemas de Cloud Storage en GKE.
No se habilitó la creación de puntos de control de varios niveles
El siguiente error indica que la creación de puntos de control de varios niveles no está habilitada en tu clúster:
error: unable to recognize "checkpoint.yaml": no matches for kind "CheckpointConfiguration" in version "checkpointing.gke.io/v1"
Es posible que se produzca este error después de ejecutar kubectl apply -f checkpoint.yaml en el paso Crea un CheckpointConfiguration.
Para resolver este problema, verifica si habilitaste la creación de puntos de control de varios niveles en tu clúster con el siguiente comando:
gcloud container clusters describe CLUSTER_NAME \
--project PROJECT_ID
--location CLUSTER_LOCATION
Si la creación de puntos de control de varios niveles está habilitada, el resultado debería ser similar al siguiente:
addonsConfig:
gcePersistentDiskCsiDriverConfig:
enabled: true
gcsFuseCsiDriverConfig:
enabled: true
highScaleCheckpointingConfig:
enabled: true
kubernetesDashboard:
disabled: true
networkPolicyConfig:
disabled: true
Si la función de Multi-Tier Checkpointing no está habilitada, actualiza tu clúster para habilitarla.
El controlador de CSI de Multi-Tier Checkpointing no puede activar volúmenes
Es posible que encuentres este problema si el controlador de CSI no puede activar el volumen de Cloud Storage. Es posible que haya varias líneas similares a esta.
kubectl get pod -n gke-managed-checkpointing
NAME READY STATUS RESTARTS AGE
multitier-driver-14694e4d-774f-4104-8bba-f0bd82fd7557-5vxr9 0/5 Init:0/1 0 6m32s
Para resolver este problema, verifica los eventos del Pod del controlador de CSI, como se muestra en el siguiente ejemplo:
kubectl describe pod multitier-driver-14694e4d-774f-4104-8bba-f0bd82fd7557-5vxr9 -n gke-managed-checkpointing
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 17m default-scheduler Successfully assigned gke-managed-checkpointing/multitier-driver-14694e4d-774f-4104-8bba-f0bd82fd7557-5vxr9 to gke-my-cluster-default-pool-353c773f-6d8q
Warning FailedMount 82s (x16 over 17m) kubelet MountVolume.SetUp failed for volume "gcs" : rpc error: code = PermissionDenied desc = failed to get GCS bucket "checkpointing-test-bucket": googleapi: Error 403: Caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., forbidden
Si el problema se produce debido al error PermissionDenied del bucket de Cloud Storage, como
se muestra en el ejemplo, puedes resolverlo configurando los permisos de forma correcta.
¿Qué sigue?
- Obtén más información para implementar TPU Multislice en Google Kubernetes Engine.
- Aprende a optimizar el controlador de CSI de Cloud Storage FUSE para Google Kubernetes Engine para mejorar el rendimiento.
- Explora las opciones de puntos de control de Orbax.