Neste documento, descrevemos como usar o segmentação dinâmica interagindo diretamente com Recursos personalizados de segmentação. É possível criar intervalos, monitorar estados de partição e verificar a integridade do intervalo.
Antes de seguir estas instruções, entenda os conceitos de segmentação dinâmica.
Por que usar o corte dinâmico com um programador personalizado?
Use seu próprio programador para gerenciar recursos personalizados Slice se tiver requisitos de programação complexos ou se quiser integrar o particionamento dinâmico à sua infraestrutura de programação atual.
Se você preferir usar um programador em vez de gerenciar recursos personalizados Slice diretamente, o GKE oferece integração com o Kueue e o agendamento com reconhecimento de topologia (TAS, na sigla em inglês). Para mais informações, consulte Programar intervalos dinâmicos com o Kueue e o TAS.
Visão geral do fluxo de trabalho
Para usar o corte dinâmico com um programador personalizado, faça as seguintes tarefas neste documento:
- Ative o controlador de fração.
- Criar pools de nós com provisionamento incremental.
- Crie recursos personalizados de fração com base nos requisitos da sua carga de trabalho. Aplique o recurso personalizado Slice ao cluster.
- Monitore os estados da partição e a integridade da fração.
- Exclua o segmento quando terminar.
Para mais informações sobre os campos e o status do recurso personalizado "Slice", consulte as informações de referência do recurso personalizado "Slice".
Requisitos
Para usar o particionamento dinâmico no GKE, você precisa atender aos seguintes requisitos:
- Use um cluster padrão no canal rápido em uma das seguintes
versões:
- Para configuração dinâmica de supersegmentação (topologias iguais ou maiores que
4x4x4), use a versão 1.35.2-gke.1842000 ou mais recente. - Para configuração dinâmica de subsegmentação (topologias menores que
4x4x4), use a versão 1.36.0-gke.3712000 ou mais recente.
- Para configuração dinâmica de supersegmentação (topologias iguais ou maiores que
- Use a versão Ironwood (TPU7x).
- Use a imagem do Container-Optimized OS para seus nós.
- Para usar o provisionamento incremental, use reservas no modo de capacidade total. O modo "Toda a capacidade" é um recurso ativado pelo TPU Cluster Director.
- Para o subdimensionamento dinâmico, verifique se os nós têm eventos de manutenção pendentes. Monitore suas instâncias para eventos de manutenção pendentes. Se algum dos seus nós tiver um evento de manutenção pendente com um horário de término entre 18 de setembro de 2026 e 30 de setembro de 2026, você precisará acionar manualmente o evento de manutenção do host nesses nós antes de usar a subsegmentação.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ative a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando o comando
gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
- Verifique se você tem um cluster Standard na versão 1.35.2-gke.1842000 ou mais recente no canal rápido. Para criar um novo cluster, consulte Como criar um cluster regional.
- Verifique se você tem cota suficiente para o Ironwood (TPU7x) na sua região.
- Se você planeja executar cargas de trabalho multislice, instale o JobSet v0.10.1 ou mais recente.
- Solicite capacidade de TPU no modo "Toda a capacidade".
Ativar o controlador de fração
Para usar o particionamento dinâmico, ative o controlador de fração no cluster.
Atualize o cluster:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --enable-slice-controllerSubstitua:
CLUSTER_NAME: o nome do cluster.LOCATION: a região com sua capacidade de TPU disponível.
Receba as credenciais para se comunicar com o cluster usando comandos
kubectl:gcloud config set container/cluster CLUSTER_NAME gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONNa saída do comando a seguir, verifique se o valor
slices.accelerator.gke.ioestá presente:kubectl get crd slices.accelerator.gke.ioO resultado será o seguinte:
slices.accelerator.gke.io 2026-01-09T23:58:02Z
Criar pools de nós com provisionamento incremental
Nesta seção, descrevemos como criar pools de nós de TPU com provisionamento incremental. O GKE converte toda a capacidade de TPU em pools de nós de um grupo de 16 nós de VMs de TPU ou subblocos. O GKE provisiona esses pools de nós mesmo quando não consegue encontrar todas as 16 VMs íntegras, colocando nós em partes íntegras da máquina host e provisionando incrementalmente máquinas não íntegras enquanto elas são reparadas.
É possível segmentar seu pool de nós para que ele pertença a qualquer um dos seguintes itens:
- Um bloco específico de TPUs, que é exposto em reservas no modo "Toda a capacidade". O bloqueio de segmentação permite que o GKE crie o pool de nós em qualquer sub-bloco disponível dentro do bloco especificado.
- Um sub-bloco específico ou um grupo específico de 16 nós de VMs de TPU para um controle mais granular.
Criar uma política de carga de trabalho
Para criar um pool de nós de fração de TPU com Ironwood (TPU7x), primeiro crie uma política de carga de trabalho com o campo accelerator-topology-mode definido como provision_only. Essa configuração
aciona o processo de provisionamento incremental.
Crie uma política de carga de trabalho:
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
Substitua:
WORKLOAD_POLICY_NAME: um nome para a política de carga de trabalho.PROJECT_ID: o ID do projeto Google Cloud .REGION: a região da política de carga de trabalho.
Nesse comando, faça o seguinte:
- Sempre defina o campo
accelerator-topologycomo4x4x4para corresponder ao número total de chips em um único subbloco. - Sempre defina o campo
accelerator-topology-modecomoprovision_onlypara garantir que o processo de provisionamento incremental seja acionado. Quando o campoprovision_onlyé definido, o pool de nós provisiona nós de TPU sem formar links do ICI ou do OCS.
Faça com que seu pool de nós pertença a um bloco ou sub-bloco
É possível segmentar sub-blocos ou blocos específicos na sua reserva do modo "Toda a capacidade".
- Segmentar um bloco:cada pool de nós usa a capacidade de um bloco especificado. O GKE coloca o pool de nós em um subbloco disponível nesse bloco. Você precisa criar tantos pools de nós quanto sub-blocos no bloco que quer usar.
Segmentar um subbloco:cada pool de nós é mapeado para um subbloco específico e disponível. Ao usar o direcionamento por sub-bloco, o GKE cria o pool de nós se pelo menos uma VM estiver íntegra. O provisionamento incremental ajuda a garantir que todos os nós sejam colocados no sub-bloco especificado.
Bloquear
Para recuperar o nome do bloco em uma reserva e a contagem de sub-blocos disponíveis no bloco, siga estas etapas no documento Ver a topologia e o status de integridade de todas as reservas do modo de capacidade:
Identifique o nome do bloco listando todos os blocos de reserva e copiando o valor no campo
name:. Esse valor é o nome do bloco ouBLOCK_NAMEneste documento.Determine quantos pools de nós criar descrevendo um bloco de reserva e identificando o valor no campo
reservationSubBlockCount. Esse valor é o número de sub-blocos disponíveis. Por exemplo, o valorreservationSubBlockCount: 4indica que o bloco tem quatro sub-blocos disponíveis, e você precisa criar quatro pools de nós separados.
Defina o caminho da reserva:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME"Substitua:
RESERVATION_NAME: o nome da sua reserva de TPU.BLOCK_NAME: o nome do bloco.
Crie um pool de nós para cada sub-bloco identificado na etapa anterior. Por exemplo, se a contagem for
4, execute este comando quatro vezes. Use um nome exclusivo para cada pool de nós.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}Substitua:
NODE_POOL_NAME: o nome do novo pool de nós.CLUSTER_NAME: o nome do cluster do GKE.WORKLOAD_POLICY_NAME: o nome da política de carga de trabalho que você criou.ZONE: a zona do pool de nós, por exemplo,us-central1-a.
Sub-bloco
Para recuperar o nome do bloco e os IDs dos sub-blocos disponíveis, siga estas etapas no documento Ver a topologia e o status de integridade de todas as reservas do modo de capacidade:
Para identificar o nome do bloco, liste todos os blocos de reserva e copie o valor no campo
name:. Esse valor é o nome do bloco ouBLOCK_NAMEno documento.Para identificar o nome dos sub-blocos, liste todos os sub-blocos de um bloco e copie o valor no campo
name:para cada entrada emreservationSubBlocks. Esse valor é o nome do subbloco ouSUBBLOCK_NAMEneste documento.
Defina o caminho da reserva:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUBBLOCK_NAME"Substitua:
RESERVATION_NAME: o nome da sua reserva de TPU.BLOCK_NAME: o nome do bloco.SUBBLOCK_NAME: o nome do sub-bloco.
Crie o pool de nós:
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}Substitua:
NODE_POOL_NAME: um nome exclusivo para o novo pool de nós, por exemplo,sub-block-pool-1.PROJECT_ID: o ID do projeto Google Cloud .CLUSTER_NAME: o nome do cluster do GKE.ZONE: a zona do pool de nós, por exemplo,us-central2-b.WORKLOAD_POLICY_NAME: o nome da política de carga de trabalho que você criou.
Nessa etapa, os nós são criados, mas os links Inter-Chip Interconnect (ICI) ainda não estão ativos. Portanto, não é possível executar cargas de trabalho diretamente nesses pools de nós.
Para ativar todos os links do ICI necessários para formar a fração e permitir que as cargas de trabalho sejam programadas, crie uma fração dinâmica usando um dos seguintes métodos:
- Crie um recurso personalizado de fração. Em vez de pods, use um recurso personalizado de Slice para definir a topologia especificada, que o controlador de fração ativa.
- Agende cargas de trabalho do GKE com o Kueue e o TAS. O Kueue processa automaticamente a criação e exclusão de recursos personalizados Slice. Evite modificar manualmente os recursos personalizados Slice criados pelo Kueue.
Formar uma segmentação dinâmica com supersegmentação ou subsegmentação
Depois de criar os pools de nós, é possível formar uma super-fatia dinâmica maior ou uma subfatia dinâmica menor criando um recurso personalizado do tipo "Slice". Um recurso personalizado de Slice define a topologia especificada, que o controlador de fração ativa. Em seguida, as cargas de trabalho são programadas e executadas nessa fração dinâmica.
Partições de intervalos dinâmicos
As partições fornecem as topologias disponíveis para formar uma fração dinâmica das suas cargas de trabalho. Uma partição mostra todas as topologias disponíveis para cada
nó, incluindo 2x2x1, 2x2x2, 2x2x4, 2x4x4 e 4x4x4. Topologias menores que 4x4x4 exigem a versão 1.36.0-gke.3712000 ou mais recente do GKE.
As fatias maiores que 4x4x4 não têm um rótulo de partição, porque são criadas associando várias partições 4x4x4.
Cada nó da TPU em um pool de nós de provisionamento incremental precisa ter todos os ID de partição e rótulos de nó de estado de partição especificados.
Verificar o status dos nós e das partições
Para receber os nomes dos nós do pool de nós, execute o comando a seguir:
kubectl get nodes -l cloud.google.com/gke-nodepool=${NODE_POOL_NAME}O resultado será assim:
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.1396002Verifique o modelo de provisionamento do nó:
kubectl describe node NODE_NAME | grep "cloud.google.com/gke-accelerator-topology-mode"O resultado será assim:
cloud.google.com/gke-accelerator-topology-mode: PROVISION_ONLYRecupere as informações do rótulo do nó para a partição de topologia que você quer segmentar:
kubectl describe node NODE_NAME | grep -E "cloud.google.com/gke-tpu-partition-.*-id"Substitua
NODE_NAMEpelo nome de um dos nós no pool de nós.O resultado será assim:
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=0bcfe937d1bb3914a8bdcd94e9f73319Verifique se o nó inclui a anotação
node.gke.io/created-by-mig:kubectl describe node NODE_NAME | grep "node.gke.io/created-by-mig"Substitua
NODE_NAMEpelo nome de um dos nós no pool de nós.O resultado será assim:
node.gke.io/created-by-mig: projects/735972712744/zones/us-central1-ai1a/team/stringA saída inclui a anotação
node.gke.io/created-by-mig, que permite que o plano de controle do GKE vincule nós do Kubernetes aos recursos do Compute Engine subjacentes.Recupere as informações do rótulo do nó para o estado da partição de topologia que você quer verificar:
kubectl describe node NODE_NAME | grep -E "cloud.google.com/gke-tpu-partition-.*-state"O resultado será assim:
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=HEALTHYO rótulo
cloud.google.com/gke-tpu-partition-[shape]-state(em que[shape]corresponde à topologia do ID da partição) indica se a partição está disponível para formar uma fração dinâmica. Esse rótulo de estado aceita os seguintes valores:HEALTHY: a partição está íntegra e totalmente funcional.DEGRADED: a partição está prejudicada, mas ainda pode ser usada para a formação de intervalos dinâmicos. Esse estado se aplica apenas à topologia4x4x4de nível superior. Topologias menores não têm um estado degradado.UNHEALTHY: a partição está com mau funcionamento e não pode ser usada para formar uma fatia.UNSET: o estado não está definido devido à inicialização sem êxito do controlador de fração do GKE.INCOMPLETE: nem todos os nós na partição são provisionados.
Criar um recurso personalizado de fração
O recurso personalizado de fração varia um pouco dependendo se você está criando uma superfração dinâmica ou uma subfração dinâmica.
Defina o recurso personalizado 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 neededSubstitua:
SLICE_NAME: um nome para a fração. O nome precisa atender às condições demetadata.namee ter até 49 caracteres.TOPOLOGY: a topologia da fração dinâmica. A topologia precisa atender às seguintes condições:- Para subsegmentação dinâmica:é possível especificar topologias menores que
4x4x4, como2x2x1,2x2x2,2x2x4ou2x4x4. Essas topologias menores exigem o GKE versão 1.36.0-gke.3712000 ou posterior. - Para supersegmentação dinâmica:é possível especificar topologias iguais ou maiores que
4x4x4. Para configurar o supersegmento dinâmico, cada dimensão da topologia solicitada precisa ser um múltiplo de quatro, por exemplo,4A x 4B x 4C. Os três valores nas dimensões da topologia,AxBxC, precisam estar em ordem não decrescente (A ≤ B ≤ C). Por exemplo,4x4x8é válido, mas4x8x4não é. Essa ordem ajuda a garantir a formação consistente de intervalos e evita comportamentos inesperados. O produto dos três valores nas dimensões de topologia,A × B × C,não pode exceder 9.216.
- Para subsegmentação dinâmica:é possível especificar topologias menores que
PARTITION_ID: uma lista de strings que identificam as partições que compõem a fração.- Para subdivisão dinâmica:especifique exatamente um ID de partição.
- Para supersegmentação dinâmica:calcule o número de partições com base no número total de chips, em que cada partição consiste em 64 chips. O número de itens na sua lista
spec.partitionIdsprecisa corresponder exatamente ao número calculado de partições ((A × B × C) / 64). - A lista
partitionIdsprecisa atender às seguintes condições:- Cada partição precisa ser mapeada para um subbloco de reserva.
- Todos os sub-blocos associados precisam pertencer à mesma reserva.
- Todos os sub-blocos associados precisam estar na mesma reserva.
- Os pools de nós associados precisam ter todos os nós no estado
ready.
- O valor do campo
typeprecisa sertpu7x. - Se quiser permitir que o controlador de fração tente de novo automaticamente durante a formação de fração, adicione a anotação
slice.gke.io/retry-on-failure: "true"ao recurso personalizado de fração. Se a fração não for criada devido ao motivo do statusSliceCreationFailed, o controlador vai tentar de novo até que a fração seja formada.
Por exemplo, para criar uma fração de
4x8x8(supersegmentação dinâmica), você precisa fornecer quatro IDs de partição exclusivos.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 exemplo, para criar uma fração
2x2x2(subdivisão dinâmica), é necessário fornecer um ID de partição exclusivo.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-sliceAplique o recurso personalizado "Slice":
kubectl apply -f test-slice-example.yamlNesse ponto, o GKE tenta criar a fração. Se um dos problemas a seguir ocorrer, a criação de intervalos vai falhar, e o motivo do status no recurso personalizado Slice será atualizado para
SliceCreationFailedouFAILED:- Se os nós selecionados no recurso personalizado não existirem, o motivo do status será
SliceCreationFailed. - Se algum nó no recurso personalizado for usado por outra fração, o motivo do status será
SliceCreationFailed. - Se os nós no recurso personalizado não fizerem parte do mesmo subbloco de reserva, o motivo do status será
FAILED. - Se os nós não estiverem na mesma reserva, o motivo do status será
FAILED. - Se a topologia não corresponder ao número de partições, o motivo do status será
SliceCreationFailed.
Para tentar novamente a formação de intervalos automaticamente quando o status for
SliceCreationFailed, configure a anotaçãoslice.gke.io/retry-on-failure: "true"conforme descrito em Criar um recurso Slice intervalo.Para saber mais sobre o status do recurso personalizado "Slice", consulte Status da fatia.
- Se os nós selecionados no recurso personalizado não existirem, o motivo do status será
Monitorar o status do recurso personalizado Slice
Para verificar o status do recurso personalizado Slice, execute o seguinte comando:
kubectl describe slice SLICE_NAME
Substitua SLICE_NAME pelo nome da fração.
O resultado será o seguinte:
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:
O campo reason no status do recurso personalizado Slice indica o
estado atual do ciclo de vida. Os estados possíveis variam dependendo do uso de subsegmentação ou supersegmentação dinâmica.
Condições de status para segmentação secundária dinâmica
SliceNotCreated: o controlador realiza a inicialização e as verificações de recursos.- Se os pré-requisitos não forem atendidos, o estado vai mudar para
SliceCreationFailed. - Se a validação for aprovada, o estado vai mudar para
ACTIVATING.
- Se os pré-requisitos não forem atendidos, o estado vai mudar para
ACTIVATING: o GKE está formando a fração.- Se for bem-sucedido, o estado vai mudar para
ACTIVE. - Se os sub-blocos estiverem degradados, mas o segmento for utilizável, o estado vai mudar para
ACTIVE_DEGRADED. - Se a formação falhar, o estado vai mudar para
FAILED.
- Se for bem-sucedido, o estado vai mudar para
DEACTIVATING: se o recurso personalizado de Slice for excluído ou ocorrer uma falha crítica em um estado ativo ou com falha, a fração começará a ser desmontada.INCOMPLETE: a etapa final antes da exclusão completa do recurso.
Condições de status para a supersegmentação dinâmica
SliceNotCreated: a fração ainda não foi criada. O controlador de fração está sendo inicializado e realizando verificações de simulação para a formação de frações.SliceCreationFailed: a criação falhou porque os pré-requisitos não foram atendidos (por exemplo, os recursos necessários do Compute Engine estão faltando) ou as verificações de pré-voo falharam. Para tentar novamente a formação de intervalos automaticamente nesse estado, configure a anotaçãoslice.gke.io/retry-on-failure: "true".ACTIVATING: a fração está em processo de formação (junção).ACTIVE: o slice está totalmente formado, íntegro e pronto para executar cargas de trabalho.ACTIVE_DEGRADED: a fração é formada, mas inclui cubos degradados, com suporte da capacidade de recuperação de ICI. As cargas de trabalho podem ser executadas, mas o desempenho pode ser afetado. A supersegmentação dinâmica é resiliente a falhas em um único switch de circuito óptico (OCS). Se uma única unidade do OCS falhar, todos os links ópticos que atravessam esse switch ficarão indisponíveis, o que fará com que todos os cubos no superpod operem em um estado degradado.DEACTIVATING: a fração está em processo de desativação.FAILED: a fração não está mais pronta para executar cargas de trabalho. Esse estado ocorre se a formação inicial falhar ou se uma fração ativa tiver uma falha crítica de software ou hardware.INCOMPLETE: não há cubos disponíveis suficientes para iniciar a formação de supersegmentos.
Para saber mais sobre o status do recurso personalizado "Slice", consulte Status da fração.
Executar cargas de trabalho na divisão dinâmica
Quando o recurso personalizado de fração está no estado ACTIVE, é possível executar cargas de trabalho nele.
A seção a seguir inclui exemplos de cargas de trabalho que usam o segmentação dinâmica. As cargas de trabalho são enviadas como jobs ou JobSets.
Exemplo 1: uma única carga de trabalho usa uma única fração
O exemplo a seguir mostra uma carga de trabalho que usa uma única supersegmentação dinâmica 4x4x4.
Salve o seguinte manifesto de amostra como
tpu-job-jax-v7x-64.yaml:Nesse manifesto:
cloud.google.com/gke-tpu-slice-topologyecloud.google.com/gke-tpu-topologydefinem a topologia da fração dinâmica.env.value: tpu7x-128é o tipo de acelerador de TPU e o número total de núcleos na fração. O número de núcleos é calculado multiplicando as dimensões da topologia pelo número de núcleos por chip. Por exemplo, para uma topologia4x4x4, o cálculo é4 × 4 × 4 × 2 = 128, em que2é o número de núcleos por chip paratpu7x(Ironwood (TPU7x)). Portanto, oTPU_ACCELERATOR_TYPEétpu7x-128.
Aplique o manifesto
tpu-job-jax-v7x-64.yaml:kubectl apply -f tpu-job-jax-v7x-64.yaml
Exemplo 2: implante uma carga de trabalho em pools de nós multislice usando JobSet
Este exemplo demonstra como implantar uma carga de trabalho em pools de nós multislice usando o JobSet.
Instale o JobSet:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/JOBSET_VERSION/manifests.yamlSubstitua
JOBSET_VERSIONpela versão necessária do JobSet. Para subsegmentação dinâmica, use o JobSet v0.12.0 ou mais recente. Para o supersegmento dinâmico, use o JobSet v0.11.1 ou mais recente.Salve o seguinte manifesto de amostra como
tpu-multislice-jax.yaml:Aplique o manifesto
tpu-multislice-jax.yaml:kubectl apply -f tpu-multislice-jax.yamlNesse manifesto:
- O campo
replicas: 2emreplicatedJobsindica que o JobSet cria dois jobs separados, cada um correspondente a uma fração de TPU4x4x4. - A anotação
alpha.jobset.sigs.k8s.io/exclusive-topology: cloud.google.com/gke-tpu-sliceajuda a garantir que cada job seja atribuído a uma fração de TPU exclusiva. - A anotação
cloud.google.com/gke-tpu-slice-topology: 4x4x4define a topologia de cada fração dinâmica. - A variável de ambiente
TPU_ACCELERATOR_TYPEnão está definida explicitamente neste exemplo porque o JobSet processa a atribuição de fração. O código JAX detecta automaticamente os dispositivos TPU disponíveis na fração atribuída.
- O campo
Excluir a fração
Exclua a fração:
kubectl patch slice $SLICE_NAME --type json \ -p='[{"op": "remove", "path": "/metadata/finalizers"}]'Verifique se a fração foi excluída:
kubectl get slices
Fazer upgrade dos pools de nós
Se você fizer upgrade de pools de nós configurados com provisionamento incremental, use parâmetros de sobretensão específicos para evitar conflitos de capacidade.
Para configurar e executar o upgrade do pool de nós:
Se você estiver usando o super-slicing dinâmico, exclua as fatias ativas antes de executar a manutenção manual:
kubectl delete slice SLICE_NAMESe você estiver usando a subdivisão dinâmica, não será necessário excluir as fatias ativas primeiro. No entanto, as subpartes que permanecerem ativas durante um upgrade vão falhar e fazer a transição para um estado
FAILED.Atualize os parâmetros de upgrade do pool de nós:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --project=PROJECT_ID \ --location=LOCATION \ --max-surge-upgrade=0 \ --max-unavailable-upgrade=16Verifique se o campo
--max-surge-upgradeestá definido como0para evitar que o GKE tente alocar TPUs extras durante o upgrade. Recomendamos definir o campo--max-unavailable-upgrade=16para fazer upgrade de um subbloco completo de 16 nós simultaneamente.Faça upgrade do pool de nós:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=NODE_POOL_NAME \ --cluster-version=CLUSTER_VERSION \ --project=PROJECT_ID \ --location=LOCATION
Manutenção e falhas de hardware
Se você acionar uma manutenção iniciada pelo cliente ou se ocorrer um failover de hardware, apenas os nós segmentados serão afetados, e não todo o pool de nós.
Para o supersegmento dinâmico, é necessário excluir os segmentos dinâmicos ativos antes de executar a manutenção manual. Se você estiver usando a subsegmentação dinâmica, não será necessário excluir os segmentos ativos primeiro. Se ocorrerem falhas de hardware ou manutenção enquanto uma subpartição dinâmica estiver ativa, o sistema vai processar a recuperação da seguinte maneira:
- Remodelagem automática: o GKE remodela automaticamente a fatia dinâmica ativa quando a manutenção começa em um host associado.
- Falha no recurso personalizado de fração: o recurso personalizado de fração faz a transição para um estado
FAILED. - Observação do programador: o programador observa o estado de falha do recurso personalizado Slice.
- Processo de reforma: o programador tenta recriar automaticamente as configurações de fração em outros nós íntegros disponíveis.
Desativar o controlador de fração
Para desativar o controlador de fração, remova-o do cluster.
Verifique se os recursos personalizados de Slice estão vazios:
kubectl get slice -AAtualize o cluster para desativar o controlador de fração:
gcloud container clusters update ${CLUSTER_NAME} \ --location=${REGION} \ --no-enable-slice-controllerExclua o recurso personalizado de fração :
kubectl delete crd slices.accelerator.gke.ioVerifique se o recurso personalizado de Slice foi excluído:
kubectl get crd | grep slices.accelerator.gke.ioRemova os rótulos adicionados pelo controlador de segmentação. Remova estes rótulos:
cloud.google.com/gke-tpu-slicecloud.google.com/gke-tpu-topology
- Para remover de um nó específico, atualize o nome dele.
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-- Se você quiser remover esses rótulos de todos os nós do cluster:
kubectl label nodes --all cloud.google.com/gke-tpu-slice- cloud.google.com/gke-tpu-slice-topology-- Verifique os rótulos do nó e confirme se eles estão vazios:
export NODE_NAME="gke-tpu-bdac9600-3bdg" kubectl describe node $NODE_NAME | grep "cloud.google.com/gke-tpu-slice"
A seguir
- Saiba mais sobre os conceitos de segmentação dinâmica.
- Saiba mais sobre o recurso personalizado Slice.