Criar um cluster do GKE com o Pathways

Nesta página, mostramos aos administradores de plataforma e engenheiros de machine learning (ML) como criar um cluster do Google Kubernetes Engine (GKE) configurado para cargas de trabalho baseadas no Pathways. É possível provisionar clusters pré-configurados automaticamente usando o Cluster Toolkit ou criar clusters manualmente usando a Google Cloud CLI.

Antes de começar

Conclua os seguintes pré-requisitos antes de continuar:

Configurar seu ambiente local

Faça login na CLI gcloud com suas credenciais do Google Cloud :

gcloud auth login

Se você usa o Cluster Toolkit, também precisa gerar o Application Default Credentials (ADC), que é usado pelo Terraform:

gcloud auth application-default login

Criar um cluster do GKE

No exemplo a seguir, você cria um cluster com pools de nós de TPU v6e 2x4. É possível criar um cluster usando o Cluster Toolkit ou a CLI gcloud.

Cluster Toolkit

  1. Implante um cluster de TPU do GKE seguindo as instruções em Implantar um cluster de TPU v6e do GKE. Para uma visão geral de todas as opções de implantação de TPU, consulte Visão geral das implantações do Cloud TPU.

    Ao configurar o blueprint de implantação, faça o seguinte:

    • Defina enable_pathways_for_tpus como true (ativado por padrão nos blueprints de TPU do Cluster Toolkit). Essa configuração provisiona automaticamente o pool de nós de CPU cpu-np (n4-standard-64) e as configurações do Kueue para o controlador do Pathways. O Cluster Toolkit aplica a configuração padrão do Pathways Kueue somente se você não especificar um arquivo de configuração personalizado do Kueue na variável kueue_configuration_path.
    • Defina num_slices como o número de pools de nós de fração de TPU necessários para sua carga de trabalho.
    • Defina tpu_topology como a topologia de fração de TPU selecionada (por exemplo, 2x4 ou 4x4).
    • Escolha uma opção de consumo. Por padrão, o arquivo de implantação da TPU v6e consome uma reserva de TPU específica. Portanto, especifique o nome da reserva na variável reservation_affinity. Para usar uma opção de consumo diferente, consulte Opções de consumo do GKE.
  2. Verifique se os nós do cluster têm um STATUS de Ready:

    kubectl get nodes
    

    Depois de criar o cluster, envie cargas de trabalho do Pathways usando o comando gcluster job submit com as sinalizações --pathways e --pathways-gcs-location. Para mais informações, consulte Executar cargas de trabalho com o Pathways.

gcloud

Para criar um cluster do GKE e configurá-lo para executar cargas de trabalho do Pathways, siga estas etapas:

  1. Configure as variáveis de ambiente a seguir:

    CLUSTER=GKE_CLUSTER_NAME
    PROJECT=PROJECT_ID
    ZONE=ZONE
    REGION=REGION
    CLUSTER_VERSION=GKE_CLUSTER_VERSION
    PW_CPU_MACHINE_TYPE="n2-standard-64"
    NETWORK=NETWORK
    SUBNETWORK=SUB_NETWORK
    CLUSTER_NODEPOOL_COUNT=3
    TPU_MACHINE_TYPE="ct6e-standard-4t"
    WORKERS_PER_SLICE=2
    TOPOLOGY="2x4"
    NUM_CPU_NODES=1

    Substitua:

    • GKE_CLUSTER_NAME: o nome do cluster do GKE.
    • PROJECT_ID: o ID do projeto do Google Cloud .
    • ZONE: a zona em que você cria o cluster. Escolha uma zona em que a TPU v6e esteja disponível. Para mais informações, consulte Regiões e zonas do Cloud TPU.
    • REGION: opcional: a região em que você cria recursos se usar um cluster regional.
    • GKE_CLUSTER_VERSION: opcional: a versão do cluster do GKE. Use o 1.32.2-gke.1475000 ou uma versão mais recente e escolha uma versão com suporte padrão. Para mais informações, consulte o cronograma de lançamento do GKE. Se você não especificar uma versão, remova a sinalização --cluster-version do comando gcloud container clusters create a seguir.
    • NETWORK: opcional: o nome de uma rede de nuvem privada virtual (VPC). A rede precisa existir antes de você criar o cluster. Se você não especificar uma rede, remova a flag --network do comando gcloud container clusters create a seguir.
    • SUB_NETWORK: opcional: o nome de uma sub-rede. A sub-rede precisa existir antes de você criar o cluster. Se você não especificar uma sub-rede, remova a sinalização --subnetwork do comando gcloud container clusters create a seguir.

    Este exemplo define valores padrão para as variáveis restantes, que podem ser modificadas para sua carga de trabalho:

    • PW_CPU_MACHINE_TYPE: o tipo de máquina para o pool de nós padrão do cluster e para o pool de nós de CPU que executa o cabeçalho do Pathways (o gerenciador de recursos e o proxy do Pathways).
    • NUM_CPU_NODES: o número de nós no pool de nós de CPU.
    • CLUSTER_NODEPOOL_COUNT: o número de frações de TPU. Cada fração é um pool de nós separado.
    • TPU_MACHINE_TYPE e TOPOLOGY: o tipo de máquina da TPU e a topologia da TPU de cada fração.
    • WORKERS_PER_SLICE: o número de nós em cada fração, que é o número de chips de TPU na topologia dividido pelo número de chips por nó. Por exemplo, uma topologia 2x4 tem 8 chips e um nó ct6e-standard-4t tem 4 chips, então cada fração tem 2 nós.
  2. Crie um cluster do GKE usando o comando gcloud container clusters create:

    gcloud container clusters create ${CLUSTER} \
        --project=${PROJECT} \
        --zone=${ZONE} \
        --cluster-version=${CLUSTER_VERSION} \
        --scopes=storage-full,gke-default,cloud-platform \
        --machine-type=${PW_CPU_MACHINE_TYPE} \
        --network=${NETWORK} \
        --subnetwork=${SUBNETWORK}
    
  3. Crie os pools de nós de fração de TPU usando o comando gcloud container node-pools create:

    for i in $(seq 1 ${CLUSTER_NODEPOOL_COUNT}); do
        gcloud container node-pools create "tpu-np-${i}" \
            --project=${PROJECT} \
            --zone=${ZONE} \
            --cluster=${CLUSTER} \
            --machine-type=${TPU_MACHINE_TYPE} \
            --num-nodes=${WORKERS_PER_SLICE} \
            --placement-type=COMPACT \
            --tpu-topology=${TOPOLOGY} \
            --scopes=storage-full,gke-default,cloud-platform \
            --workload-metadata=GCE_METADATA
    done
    

    Esses comandos não segmentam uma reserva específica. Para consumir uma reserva de TPU, adicione as flags --reservation-affinity=specific e --reservation=RESERVATION_NAME, em que RESERVATION_NAME é o nome da reserva de TPU. Para usar VMs spot, adicione a flag --spot.

  4. Crie um pool de nós de CPU para o cabeçalho do Pathways, que executa o gerenciador de recursos e o proxy do Pathways. Nomeie o pool de nós como cpu-np para que o comando gcluster job submit --pathways possa detectá-lo:

    gcloud container node-pools create cpu-np \
        --project=${PROJECT} \
        --zone=${ZONE} \
        --cluster=${CLUSTER} \
        --machine-type=${PW_CPU_MACHINE_TYPE} \
        --num-nodes=${NUM_CPU_NODES} \
        --scopes=storage-full,gke-default,cloud-platform \
        --workload-metadata=GCE_METADATA
    
  5. Consiga as credenciais do cluster e defina o namespace padrão para kubectl:

    gcloud container clusters get-credentials ${CLUSTER} \
        --zone=${ZONE} \
        --project=${PROJECT} \
        && kubectl config set-context --current --namespace=default
    
  6. Para usar a arquitetura do Pathways no cluster do GKE, instale a API JobSet:

    kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/v0.12.0/manifests.yaml
    
  7. Verifique se os nós têm um STATUS de Ready e se o pod jobset-controller-manager tem um STATUS de Running:

    kubectl get nodes
    kubectl get pods --namespace=jobset-system
    

    O resultado será o seguinte:

    NAME                                      STATUS   ROLES    AGE   VERSION
    gke-cluster-cpu-np-12345678-abcd          Ready    <none>   5m    v1.32.2-gke.1475000
    gke-cluster-tpu-np-1-12345678-efgh        Ready    <none>   5m    v1.32.2-gke.1475000
    ...
    NAME                                         READY   STATUS    RESTARTS   AGE
    jobset-controller-manager-6f7b8c9d4-xyz12    1/1     Running   0          2m
    

Limpar

Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, exclua o cluster quando terminar:

  • Cluster Toolkit: destrua a implantação executando o seguinte comando:

    ./gcluster destroy DEPLOYMENT_FOLDER_NAME

    Substitua DEPLOYMENT_FOLDER_NAME pelo nome da pasta de implantação.

  • CLI gcloud: exclua o cluster do GKE e os pools de nós dele executando o seguinte comando:

    gcloud container clusters delete ${CLUSTER} \
        --project=${PROJECT} \
        --zone=${ZONE}
    

A seguir