En este documento, se describe cómo usar el segmentado dinámico interactuando directamente con los recursos personalizados de Slice. Puedes crear porciones, supervisar los estados de las particiones y verificar el estado de las porciones.
Antes de seguir estas instrucciones, asegúrate de comprender los conceptos de la segmentación dinámica.
¿Por qué usar la segmentación dinámica con un programador personalizado?
Usa tu propio programador para administrar los recursos personalizados de Slice si tienes requisitos de programación complejos o si deseas integrar el segmentado dinámico con tu infraestructura de programación existente.
Si prefieres usar un programador en lugar de administrar los recursos personalizados de Slice directamente, GKE proporciona integración con Kueue y la programación con reconocimiento de la topología (TAS). Para obtener más información, consulta Programa segmentos dinámicos con Kueue y TAS.
Descripción general del flujo de trabajo
Para usar la segmentación dinámica con un programador personalizado, realiza las siguientes tareas que se describen en este documento:
- Habilita el controlador de segmentos.
- Crea grupos de nodos con aprovisionamiento incremental.
- Crea recursos personalizados de Slice según los requisitos de tu carga de trabajo. Aplica el recurso personalizado de Slice a tu clúster.
- Supervisa los estados de las particiones y el estado de las segmentaciones.
- Cuando termines, borra la porción.
Para obtener más información sobre los campos y el estado del recurso personalizado Slice, consulta la información de referencia del recurso personalizado Slice.
Requisitos
Para usar la segmentación dinámica en GKE, debes cumplir con los siguientes requisitos:
- Usa un clúster de Standard en el canal rápido en una de las siguientes versiones:
- Para la configuración dinámica de supersegmentación (topologías iguales o mayores que
4x4x4), usa la versión 1.35.2-gke.1842000 o posterior. - Para la configuración dinámica de segmentación secundaria (topologías más pequeñas que
4x4x4), usa la versión 1.36.0-gke.3712000 o posterior.
- Para la configuración dinámica de supersegmentación (topologías iguales o mayores que
- Usa la versión de Ironwood (TPU7x).
- Usa la imagen de Container-Optimized OS para tus nodos.
- Para usar el aprovisionamiento incremental, usa las reservas en el modo All Capacity. El modo All Capacity es una función habilitada por Cluster Director de TPU.
- Para la división dinámica en porciones secundarias, asegúrate de que tus nodos tengan eventos de mantenimiento pendientes. Supervisa tus instancias para detectar eventos de mantenimiento pendientes. Si alguno de tus nodos tiene un evento de mantenimiento pendiente con una hora de finalización entre el 18 de septiembre de 2026 y el 30 de septiembre de 2026, debes activar el evento de mantenimiento del host de forma manual en esos nodos antes de poder usar la división en porciones secundarias.
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.
- Asegúrate de tener un clúster de Standard existente en la versión 1.35.2-gke.1842000 o posterior, en el canal rápido. Para crear un clúster nuevo, consulta Crea un clúster regional.
- Asegúrate de tener suficiente cuota para Ironwood (TPU7x) en tu región.
- Si planeas ejecutar cargas de trabajo de Multislice, instala JobSet v0.10.1 o una versión posterior.
- Solicita capacidad de TPU en el modo All Capacity.
Habilita el controlador de porciones
Para usar el segmentado dinámico, habilita el controlador de segmentado en tu clúster.
Actualiza tu clúster:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --enable-slice-controllerReemplaza lo siguiente:
CLUSTER_NAME: El nombre de tu clúster.LOCATION: la región con tu capacidad de TPU disponible.
Obtén credenciales para poder comunicarte con tu clúster con comandos de
kubectl:gcloud config set container/cluster CLUSTER_NAME gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONEn el resultado del siguiente comando, verifica que el valor
slices.accelerator.gke.ioesté presente:kubectl get crd slices.accelerator.gke.ioEl resultado es similar a lo siguiente:
slices.accelerator.gke.io 2026-01-09T23:58:02Z
Crea grupos de nodos con aprovisionamiento incremental
En esta sección, se describe cómo crear los grupos de nodo TPU con aprovisionamiento incremental. GKE convierte toda tu capacidad de TPU en grupos de nodos de grupos de 16 nodos de TPU VMs o subbloques. GKE aprovisiona estos grupos de nodos incluso cuando no puede encontrar las 16 VMs en buen estado, ya que coloca nodos en las partes en buen estado de la máquina anfitrión y aprovisiona de forma incremental las máquinas en mal estado mientras se reparan.
Puedes segmentar tu grupo de nodos para que pertenezca a cualquiera de los siguientes elementos:
- Es un bloque específico de TPUs que se expone en las reservas del modo All Capacity. El bloqueo del destino permite que GKE cree el grupo de nodos en cualquier subbloque disponible dentro del bloque especificado.
- Un subbloque específico, o un grupo específico de 16 nodos de TPU VM, de TPU para un control más detallado.
Crear una política de cargas de trabajo
Para crear un grupo de nodos de porción de TPU con Ironwood (TPU7x), primero debes crear una
política de carga de trabajo con el campo accelerator-topology-mode establecido en provision_only. Este parámetro de configuración activa el proceso de aprovisionamiento incremental.
Crea una política de cargas de trabajo:
gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
--project=PROJECT_ID \
--region=REGION \
--type=HIGH_THROUGHPUT \
--accelerator-topology=4x4x4 \
--accelerator-topology-mode=provision_only
Reemplaza lo siguiente:
WORKLOAD_POLICY_NAME: Es un nombre para tu política de carga de trabajo.PROJECT_ID: Es el ID del proyecto de Google Cloud .REGION: Es la región de la política de carga de trabajo.
En este comando, haz lo siguiente:
- Siempre configura el campo
accelerator-topologycomo4x4x4para que coincida con la cantidad total de chips dentro de un solo subbloque. - Establece siempre el campo
accelerator-topology-modeenprovision_onlypara asegurarte de que se active el proceso de aprovisionamiento incremental. Cuando se configura el campoprovision_only, el grupo de nodos aprovisiona nodos TPU sin formar vínculos de ICI ni de OCS.
Cómo segmentar tu grupo de nodos para que pertenezca a un bloque o a un subbloque
Puedes segmentar subbloques o bloques específicos dentro de tu reserva en el modo All Capacity.
- Orientación a un bloque: Cada grupo de nodos usa capacidad de un bloque especificado. GKE coloca el grupo de nodos dentro de un subbloque disponible en ese bloque. Debes crear tantos grupos de nodos como subbloques haya en el bloque que deseas usar.
Segmentación por subbloque: Cada grupo de nodos se asigna a un subbloque específico y disponible. Cuando se usa la segmentación por subbloque, GKE crea el grupo de nodos si al menos una VM está en buen estado. El aprovisionamiento incremental ayuda a garantizar que todos los nodos se coloquen dentro del subbloque especificado.
Bloquear
Para recuperar el nombre del bloque en una reserva y el recuento de subbloques disponibles en el bloque, completa los siguientes pasos en el documento Visualiza la topología y el estado de las reservas en el modo All Capacity:
Para identificar el nombre del bloque, enumera todos los bloques de reserva y copia el valor del campo
name:. Este valor es el nombre del bloque oBLOCK_NAMEen este documento.Para determinar cuántos grupos de nodos crear, describe un bloque de reserva y, luego, identifica el valor en el campo
reservationSubBlockCount. Este valor es la cantidad de subbloques disponibles. Por ejemplo, el valorreservationSubBlockCount: 4indica que el bloque tiene cuatro subbloques disponibles y que debes crear cuatro grupos de nodos separados.
Establece la ruta de reserva:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME"Reemplaza lo siguiente:
RESERVATION_NAME: Es el nombre de tu reserva de TPU.BLOCK_NAME: Es el nombre del bloque.
Crea un grupo de nodos para cada subbloque identificado en el paso anterior. Por ejemplo, si el recuento es
4, ejecuta este comando cuatro veces. Usa un nombre único para cada grupo de nodos.gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --node-locations=ZONE \ --machine-type=tpu7x-standard-4t \ --num-nodes=16 \ --placement-policy=WORKLOAD_POLICY_NAME \ --reservation-affinity=specific \ --reservation=${RESERVATION_PATH}Reemplaza lo siguiente:
NODE_POOL_NAME: es el nombre de tu grupo de nodos nuevo.CLUSTER_NAME: Es el nombre del clúster de GKE.WORKLOAD_POLICY_NAME: Es el nombre de la política de carga de trabajo que creaste.ZONE: Es la zona del grupo de nodos, por ejemplo,us-central1-a.
En subbloque
Para recuperar el nombre del bloque y los IDs de los subbloques disponibles, completa los siguientes pasos en el documento Visualiza la topología y el estado de las reservas en el modo All Capacity:
Para identificar el nombre del bloque, enumera todos los bloques de reserva y copia el valor en el campo
name:. Este valor es el nombre del bloque oBLOCK_NAMEen este documento.Para identificar el nombre de los subbloques, enumera todos los subbloques de un bloque y copia el valor del campo
name:para cada entrada enreservationSubBlocks. Este valor es el nombre del subbloque oSUBBLOCK_NAMEen este documento.
Establece la ruta de acceso de la reserva:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUBBLOCK_NAME"Reemplaza lo siguiente:
RESERVATION_NAME: Es el nombre de tu reserva de TPU.BLOCK_NAME: Es el nombre del bloque.SUBBLOCK_NAME: Es el nombre del subbloque.
Crea el grupo de nodos:
gcloud container node-pools create NODE_POOL_NAME \ --project=PROJECT_ID \ --cluster=CLUSTER_NAME \ --node-locations=ZONE \ --machine-type=tpu7x-standard-4t \ --num-nodes=16 \ --placement-policy=WORKLOAD_POLICY_NAME \ --reservation-affinity=specific \ --reservation=${RESERVATION_PATH}Reemplaza lo siguiente:
NODE_POOL_NAME: Un nombre único para tu grupo de nodos nuevo, por ejemplo,sub-block-pool-1.PROJECT_ID: Es el ID del proyecto de Google Cloud .CLUSTER_NAME: el nombre del clúster de GKE.ZONE: Es la zona del grupo de nodos, por ejemplo,us-central2-b.WORKLOAD_POLICY_NAME: Es el nombre de la política de carga de trabajo que creaste.
En esta etapa, se crean los nodos, pero sus vínculos de interconexión entre chips (ICI) aún no están activos. Por lo tanto, no puedes ejecutar cargas de trabajo en estos grupos de nodos directamente.
Para habilitar todos los vínculos de ICI necesarios para formar la porción y permitir que se programen las cargas de trabajo, crea una porción dinámica con uno de los siguientes métodos:
- Crea un recurso personalizado Slice. En lugar de Pods, usas un recurso personalizado Slice para definir la topología especificada, que activa el controlador de porciones.
- Programa cargas de trabajo de GKE con Kueue y TAS. Kueue controla automáticamente la creación y eliminación de recursos personalizados de Slice. Evita modificar manualmente los recursos personalizados de Slice creados por Kueue.
Cómo formar una segmentación dinámica con la supersegmentación o la subsegmentación
Después de crear los grupos de nodos, puedes formar una supersegmentación dinámica más grande o una subsegmentación dinámica más pequeña creando un recurso personalizado de Slice. Un recurso personalizado de Slice define la topología especificada, que el controlador de segmentos activa. Luego, tus cargas de trabajo se programan y ejecutan en esta división dinámica.
Particiones de segmentos dinámicos
Las particiones proporcionan las topologías disponibles para formar un segmento dinámico para tus cargas de trabajo. Una partición muestra todas las topologías disponibles para cada
nodo, incluidas 2x2x1, 2x2x2, 2x2x4, 2x4x4 y 4x4x4. Las topologías más pequeñas que 4x4x4 requieren la versión 1.36.0-gke.3712000 de GKE o una posterior.
Cualquier porción mayor que 4x4x4 no tiene una etiqueta de partición, ya que se crea
asociando varias particiones 4x4x4.
Cada nodo TPU de un grupo de nodos de aprovisionamiento incremental debe tener cada ID de partición y etiqueta de nodo de estado de partición especificados.
Verifica el estado de los nodos y las particiones
Para obtener los nombres de los nodos del grupo de nodos, ejecuta el siguiente comando:
kubectl get nodes -l cloud.google.com/gke-nodepool=${NODE_POOL_NAME}El resultado es similar al siguiente:
NAME STATUS ROLES AGE VERSION gke-np-status-update-7b4c890c-0jhp Ready <none> 2d1h v1.35.1-gke.1396002 gke-np-status-update-7b4c890c-377r Ready <none> 2d1h v1.35.1-gke.1396002 gke-np-status-update-7b4c890c-gb51 Ready <none> 2d1h v1.35.1-gke.1396002Verifica el modelo de aprovisionamiento del nodo:
kubectl describe node NODE_NAME | grep "cloud.google.com/gke-accelerator-topology-mode"El resultado es similar al siguiente:
cloud.google.com/gke-accelerator-topology-mode: PROVISION_ONLYRecupera la información de la etiqueta del nodo para la partición de la topología a la que deseas segmentar:
kubectl describe node NODE_NAME | grep -E "cloud.google.com/gke-tpu-partition-.*-id"Reemplaza
NODE_NAMEpor el nombre de uno de los nodos del grupo de nodos.El resultado es similar al siguiente:
cloud.google.com/gke-tpu-partition-4x4x4-id=fba785f80d18552357dcdef6d3d16c27 cloud.google.com/gke-tpu-partition-2x4x4-id=e18372d627ac412cb24d5ea8ab8912c9 cloud.google.com/gke-tpu-partition-2x2x4-id=7fbd4e29dc1839217fae41a9dd8211b4 cloud.google.com/gke-tpu-partition-2x2x2-id=a9476d1b02bd4f4e75ffffae3bd23c01 cloud.google.com/gke-tpu-partition-2x2x1-id=0bcfe937d1bb3914a8bdcd94e9f73319Verifica que el nodo incluya la anotación
node.gke.io/created-by-mig:kubectl describe node NODE_NAME | grep "node.gke.io/created-by-mig"Reemplaza
NODE_NAMEpor el nombre de uno de los nodos del grupo de nodos.El resultado es similar al siguiente:
node.gke.io/created-by-mig: projects/735972712744/zones/us-central1-ai1a/team/stringEl resultado incluye la anotación
node.gke.io/created-by-mig, que permite que el plano de control de GKE vincule los nodos de Kubernetes a sus recursos subyacentes de Compute Engine.Recupera la información de la etiqueta del nodo para el estado de la partición de topología que deseas verificar:
kubectl describe node NODE_NAME | grep -E "cloud.google.com/gke-tpu-partition-.*-state"El resultado es similar al siguiente:
cloud.google.com/gke-tpu-partition-4x4x4-state=HEALTHY cloud.google.com/gke-tpu-partition-2x4x4-state=HEALTHY cloud.google.com/gke-tpu-partition-2x2x4-state=HEALTHY cloud.google.com/gke-tpu-partition-2x2x2-state=HEALTHY cloud.google.com/gke-tpu-partition-2x2x1-state=HEALTHYLa etiqueta
cloud.google.com/gke-tpu-partition-[shape]-state(en la que[shape]corresponde a la topología del ID de partición) indica si la partición está disponible para formar un segmento dinámico. Esta etiqueta de estado admite los siguientes valores:HEALTHY: La partición está en buen estado y es completamente funcional.DEGRADED: La partición está dañada, pero aún se puede usar para la formación de segmentos dinámicos. Este estado solo se aplica a la topología4x4x4de nivel superior. Las topologías más pequeñas no tienen un estado degradado.UNHEALTHY: La partición no funciona correctamente y no se puede usar para formar una segmentación.UNSET: El estado no está definido debido a que no se pudo inicializar el controlador de segmentos de GKE.INCOMPLETE: No se aprovisionan todos los nodos dentro de la partición.
Crea un recurso personalizado de Slice
El recurso personalizado Slice varía ligeramente según si creas una supersegmentación dinámica o una subsegmentación dinámica.
Define el recurso personalizado de Slice:
apiVersion: accelerator.gke.io/v1beta1 kind: Slice metadata: # Name of the slice resource name: SLICE_NAME spec: # Specify the type of accelerator for this slice type: "tpu7x" # Define the desired topology for the accelerator slice topology: TOPOLOGY partitionIds: - PARTITION_ID # Example: a9476d1b02bd4f4e75ffffae3bd23c01 - PARTITION_ID_2 # ... add more partition IDs as neededReemplaza lo siguiente:
SLICE_NAME: Es un nombre para tu segmentación. El nombre debe cumplir con las condiciones demetadata.namey tener 49 caracteres o menos.TOPOLOGY: Es la topología de la porción dinámica. La topología debe cumplir con las siguientes condiciones:- Para la segmentación secundaria dinámica: Puedes especificar topologías más pequeñas que
4x4x4, como2x2x1,2x2x2,2x2x4o2x4x4. Estas topologías más pequeñas requieren la versión 1.36.0-gke.3712000 de GKE o una posterior. - Para la segmentación avanzada dinámica: Puedes especificar topologías que sean iguales o superiores a
4x4x4. Para configurar la división dinámica, cada dimensión de la topología solicitada debe ser un múltiplo de cuatro, por ejemplo,4A x 4B x 4C. Los tres valores de las dimensiones de la topología,AxBxC, deben estar en orden no decreciente (A ≤ B ≤ C). Por ejemplo,4x4x8es válido, pero4x8x4no lo es. Este orden ayuda a garantizar una formación de porciones coherente y evita comportamientos inesperados. El producto de los tres valores en las dimensiones de la topología,A × B × C, no debe superar los 9,216.
- Para la segmentación secundaria dinámica: Puedes especificar topologías más pequeñas que
PARTITION_ID: Es una lista de cadenas que identifican las particiones que componen el segmento.- Para la segmentación secundaria dinámica: Debes especificar exactamente un ID de partición.
- Para el supercorte dinámico: Debes calcular la cantidad de particiones en función de la cantidad total de chips, donde cada partición consta de 64 chips. La cantidad de elementos de tu lista de
spec.partitionIdsdebe coincidir exactamente con la cantidad calculada de particiones ((A × B × C) / 64). - La lista
partitionIdsdebe cumplir con las siguientes condiciones:- Cada partición debe asignarse a un subbloque de reserva.
- Todos los subbloques asociados deben pertenecer a la misma reserva.
- Todos los subbloques asociados deben residir en la misma reserva.
- Todos los nodos de los grupos de nodos asociados deben estar en estado
ready.
- El valor del campo
typedebe sertpu7x. - De manera opcional, para habilitar el controlador de porciones para que vuelva a intentarlo de forma automática durante la formación
de porciones, puedes agregar la anotación
slice.gke.io/retry-on-failure: "true"al recurso personalizado de porción. Si la porción no se crea debido al motivo de estadoSliceCreationFailed, el controlador volverá a intentarlo hasta que la porción se forme correctamente.
Por ejemplo, para crear un segmento
4x8x8(segmentación avanzada dinámica), debes proporcionar cuatro IDs de partición únicos.apiVersion: accelerator.gke.io/v1beta1 kind: Slice metadata: name: test-super-slice-example annotations: slice.gke.io/retry-on-failure: "true" spec: type: "tpu7x" topology: "4x8x8" # (4*8*8)/64 = 4 partitions partitionIds: - "p0-4x4x4" - "p1-4x4x4" - "p2-4x4x4" - "p3-4x4x4"Por ejemplo, para crear una porción de
2x2x2(subdivisión dinámica), debes proporcionar un ID de partición único.apiVersion: accelerator.gke.io/v1beta1 kind: Slice metadata: name: test-sub-slice-example annotations: slice.gke.io/retry-on-failure: "true" spec: type: "tpu7x" topology: "2x2x2" partitionIds: - "fba785f80d18552357dcdef6d3d16c27" # Only 1 partitionId for sub-sliceAplica el recurso personalizado de Slice:
kubectl apply -f test-slice-example.yamlEn este punto, GKE intenta crear la segmentación. Si se produce uno de los siguientes problemas, la creación de la porción falla y el motivo del estado en el recurso personalizado Slice se actualiza a
SliceCreationFailedoFAILED:- Si los nodos seleccionados en el recurso personalizado no existen, el motivo del estado es
SliceCreationFailed. - Si otro segmento usa algún nodo del recurso personalizado, el motivo del estado es
SliceCreationFailed. - Si los nodos del recurso personalizado no forman parte del mismo subbloque de reserva, el motivo del estado es
FAILED. - Si los nodos no están en la misma reserva, el motivo del estado es
FAILED. - Si la topología no coincide con la cantidad de particiones, el motivo del estado
es
SliceCreationFailed.
Para volver a intentar automáticamente la formación de segmentos cuando el estado es
SliceCreationFailed, configura la anotaciónslice.gke.io/retry-on-failure: "true"como se describe en Crea un recurso personalizado de Slice.Para obtener más información sobre el estado del recurso personalizado Slice, consulta Estado de Slice.
- Si los nodos seleccionados en el recurso personalizado no existen, el motivo del estado es
Supervisa el estado del recurso personalizado Slice
Para verificar el estado del recurso personalizado Slice, ejecuta el siguiente comando:
kubectl describe slice SLICE_NAME
Reemplaza SLICE_NAME por el nombre de la segmentación.
El resultado es similar a lo siguiente:
Name: test-slice
Namespace:
Labels: <none>
Annotations: <none>
API Version: accelerator.gke.io/v1beta1
Kind: Slice
Metadata:
Creation Timestamp: 2026-01-11T23:45:15Z
Finalizers:
accelerator.gke.io/slice-finalizer
Generation: 1
Resource Version: 1768175347356335006
UID: d0b71e5c-be3f-4788-aead-930c7afec4f2
Spec:
Partition Ids:
2c79463990ff67c4e3c2648666bfedfa
ba898ffcac0ad0946e8ff036d771ee53
[more partition IDs]
Topology: 8x16x16
Type: tpu7x
Status:
Conditions:
Last Transition Time: 2026-01-11T23:45:38Z
Message: ""
Reason: FAILED
Status: False
Type: Ready
Events:
El campo reason en el estado del recurso personalizado de Slice indica el estado actual del ciclo de vida. Los estados posibles varían según si usas la segmentación secundaria dinámica o la segmentación principal dinámica.
Condiciones de estado para la división dinámica en subsegmentos
SliceNotCreated: El controlador realiza verificaciones de inicialización y de recursos.- Si no se cumplen los requisitos previos, el estado cambia a
SliceCreationFailed. - Si se aprueba la validación, el estado cambia a
ACTIVATING.
- Si no se cumplen los requisitos previos, el estado cambia a
ACTIVATING: GKE está formando la porción.- Si se realiza de forma correcta, el estado cambia a
ACTIVE. - Si los subbloques están degradados, pero la porción se puede usar, el estado
cambia a
ACTIVE_DEGRADED. - Si la formación falla, el estado cambia a
FAILED.
- Si se realiza de forma correcta, el estado cambia a
DEACTIVATING: Si se borra el recurso personalizado Slice o se produce una falla crítica en un estado activo o con errores, la porción comienza a desmantelarse.INCOMPLETE: Es el paso final antes de que se borre el recurso por completo.
Condiciones de estado para la segmentación avanzada dinámica
SliceNotCreated: La segmentación aún no se creó. El controlador de segmentación se está inicializando y realizando verificaciones previas para la formación de la segmentación.SliceCreationFailed: No se pudo crear porque no se cumplieron los requisitos previos (por ejemplo, faltan los recursos de Compute Engine necesarios) o fallaron las verificaciones previas. Para volver a intentar automáticamente la formación de segmentos en este estado, configura la anotaciónslice.gke.io/retry-on-failure: "true".ACTIVATING: El corte está en proceso de formación (unión).ACTIVE: La porción está completamente formada, en buen estado y lista para ejecutar cargas de trabajo.ACTIVE_DEGRADED: Se forma la porción, pero incluye cubos degradados, compatibles con la resiliencia de ICI. Las cargas de trabajo se pueden ejecutar, pero es posible que el rendimiento se vea afectado. La superdivisión dinámica es resiliente a las fallas de un solo interruptor de circuito óptico (OCS). Si falla una sola unidad de OCS, todos los vínculos ópticos que atraviesan ese interruptor dejarán de estar disponibles, lo que hace que todos los cubos dentro del superpod funcionen en un estado degradado.DEACTIVATING: La segmentación está en proceso de desmantelamiento.FAILED: La segmentación ya no está lista para ejecutar cargas de trabajo. Este estado se produce si la formación inicial falló o si una porción activa experimentó una falla crítica de software o hardware.INCOMPLETE: No hay suficientes cubos disponibles para iniciar la formación de una supersegmentación.
Para obtener más información sobre el estado del recurso personalizado Slice, consulta Estado de Slice.
Ejecuta cargas de trabajo en la segmentación dinámica
Cuando el recurso personalizado Slice está en estado ACTIVE, puedes ejecutar cargas de trabajo en él.
En la siguiente sección, se incluyen ejemplos de cargas de trabajo que usan la segmentación dinámica. Las cargas de trabajo se envían como Jobs o JobSets.
Ejemplo 1: Una sola carga de trabajo usa una sola porción
En el siguiente ejemplo, se muestra una carga de trabajo que usa una sola supersegmentación dinámica de 4x4x4.
Guarda el siguiente manifiesto de muestra como
tpu-job-jax-v7x-64.yaml:En el manifiesto se muestra lo siguiente:
cloud.google.com/gke-tpu-slice-topologyycloud.google.com/gke-tpu-topologydefinen la topología de la porción dinámica.env.value: tpu7x-128es el tipo de acelerador de TPU y la cantidad total de núcleos en la porción. La cantidad de núcleos se calcula multiplicando las dimensiones de la topología por la cantidad de núcleos por chip. Por ejemplo, para una topología4x4x4, el cálculo es4 × 4 × 4 × 2 = 128, donde2es la cantidad de núcleos por chip paratpu7x(Ironwood [TPU7x]). Por lo tanto, elTPU_ACCELERATOR_TYPEestpu7x-128.
Aplica el manifiesto
tpu-job-jax-v7x-64.yaml:kubectl apply -f tpu-job-jax-v7x-64.yaml
Ejemplo 2: Implementa una carga de trabajo en grupos de nodos de Multislice con JobSet
En este ejemplo, se muestra cómo implementar una carga de trabajo en grupos de nodos de Multislice con JobSet.
Instala JobSet:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/JOBSET_VERSION/manifests.yamlReemplaza
JOBSET_VERSIONpor la versión requerida de JobSet. Para la división dinámica en porciones secundarias, usa JobSet v0.12.0 o una versión posterior. Para el supercorte dinámico, usa JobSet v0.11.1 o una versión posterior.Guarda el siguiente manifiesto de muestra como
tpu-multislice-jax.yaml:Aplica el manifiesto
tpu-multislice-jax.yaml:kubectl apply -f tpu-multislice-jax.yamlEn el manifiesto se muestra lo siguiente:
- El campo
replicas: 2enreplicatedJobsindica que JobSet crea dos Jobs separados, cada uno correspondiente a una porción de TPU4x4x4. - La anotación
alpha.jobset.sigs.k8s.io/exclusive-topology: cloud.google.com/gke-tpu-sliceayuda a garantizar que cada trabajo se asigne a una porción de TPU única. - La anotación
cloud.google.com/gke-tpu-slice-topology: 4x4x4define la topología de cada porción dinámica. - En este ejemplo, la variable de entorno
TPU_ACCELERATOR_TYPEno se configura de forma explícita, ya que JobSet controla la asignación de segmentos. El código de JAX detecta automáticamente los dispositivos TPU disponibles dentro de su porción asignada.
- El campo
Borra el segmento
Borra el segmento:
kubectl patch slice $SLICE_NAME --type json \ -p='[{"op": "remove", "path": "/metadata/finalizers"}]'Verifica que se haya borrado el segmento:
kubectl get slices
Actualiza los grupos de nodos
Si actualizas grupos de nodos configurados con aprovisionamiento incremental, debes usar parámetros de aumento específicos para evitar conflictos de capacidad.
Para configurar y ejecutar la actualización del grupo de nodos, haz lo siguiente:
Si usas el supercorte dinámico, borra los cortes activos antes de realizar el mantenimiento manual:
kubectl delete slice SLICE_NAMESi usas la segmentación secundaria dinámica, no es necesario que borres primero los segmentos activos. Sin embargo, las porciones secundarias que permanezcan activas durante una actualización fallarán y pasarán a un estado
FAILED.Actualiza los parámetros de actualización de tu grupo de nodos:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --project=PROJECT_ID \ --location=LOCATION \ --max-surge-upgrade=0 \ --max-unavailable-upgrade=16Asegúrate de que el campo
--max-surge-upgradeesté establecido en un valor de0para evitar que GKE intente asignar TPU adicionales durante la actualización. Te recomendamos que configures el campo--max-unavailable-upgrade=16para actualizar un subbloque completo de 16 nodos de forma simultánea.Actualiza el grupo de nodos:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=NODE_POOL_NAME \ --cluster-version=CLUSTER_VERSION \ --project=PROJECT_ID \ --location=LOCATION
Mantenimiento y fallas de hardware
Si activas el mantenimiento iniciado por el cliente o si se produce una conmutación por error de hardware, solo se verán afectados los nodos de destino, no todo el grupo de nodos.
Para la segmentación dinámica, debes borrar tus porciones dinámicas activas antes de ejecutar el mantenimiento manual. Si usas la división dinámica en porciones secundarias, no es necesario que primero borres las porciones activas. Si se producen fallas de hardware o de mantenimiento mientras una porción secundaria dinámica está activa, el sistema controla la recuperación de la siguiente manera:
- Cambio de forma automatizado: GKE cambia automáticamente la forma de la porción dinámica activa cuando comienza el mantenimiento en un host asociado.
- Falla del recurso personalizado de segmentación: El recurso personalizado de Slice pasa a un estado
FAILED. - Observación del programador: El programador observa el estado de error del recurso personalizado Slice.
- Proceso de reformación: El programador intenta automáticamente volver a crear las configuraciones de segmentación en otros nodos disponibles en buen estado.
Inhabilita el Slice Controller
Para inhabilitar el controlador de porciones, quítalo del clúster.
Verifica que los recursos personalizados de Slice estén vacíos:
kubectl get slice -AActualiza el clúster para inhabilitar el controlador de segmentación:
gcloud container clusters update ${CLUSTER_NAME} \ --location=${REGION} \ --no-enable-slice-controllerBorra el recurso personalizado de Slice :
kubectl delete crd slices.accelerator.gke.ioVerifica que se haya borrado el recurso personalizado de Slice:
kubectl get crd | grep slices.accelerator.gke.ioQuita las etiquetas agregadas por el controlador de segmentos. Se deben quitar estas etiquetas:
cloud.google.com/gke-tpu-slicecloud.google.com/gke-tpu-topology
- Para quitarlo de un nodo específico, actualiza el nombre del nodo
export NODE_NAME="gke-tpu-bdac9600-3bdg" kubectl label node $NODE_NAME cloud.google.com/gke-tpu-slice- cloud.google.com/gke-tpu-slice-topology-- Si quieres quitar estas etiquetas de todos los nodos de tu clúster, haz lo siguiente:
kubectl label nodes --all cloud.google.com/gke-tpu-slice- cloud.google.com/gke-tpu-slice-topology-- Verifica las etiquetas de los nodos y confirma que estén vacías:
export NODE_NAME="gke-tpu-bdac9600-3bdg" kubectl describe node $NODE_NAME | grep "cloud.google.com/gke-tpu-slice"
¿Qué sigue?
- Obtén más información sobre los conceptos de segmentación dinámica.
- Obtén información sobre el recurso personalizado Slice.