Este guia mostra como otimizar o aprovisionamento de GPUs para cargas de trabalho de preparação de média e pequena escala através do modo de aprovisionamento de início flexível. Neste guia, vai usar o início flexível para implementar uma carga de trabalho que consiste em dois trabalhos do Kubernetes. Cada tarefa requer uma GPU. O GKE aprovisiona automaticamente um único nó com duas GPUs A100 para executar ambos os trabalhos.
Se a sua carga de trabalho exigir o processamento distribuído em vários nós, considere usar o início flexível com aprovisionamento em fila. Para mais informações, consulte o artigo Execute uma carga de trabalho de grande escala com início flexível e aprovisionamento em fila.
Este guia destina-se a engenheiros de aprendizagem automática (ML), administradores e operadores de plataformas, bem como a especialistas em dados e IA interessados em usar capacidades de orquestração de contentores do Kubernetes para executar cargas de trabalho em lote. Para mais informações sobre as funções comuns e exemplos de tarefas que referimos no Google Cloud conteúdo, consulte Funções e tarefas comuns de utilizadores do GKE.
Preços de início flexível
Recomendamos o início flexível se a sua carga de trabalho exigir recursos aprovisionados dinamicamente conforme necessário, durante um máximo de sete dias com reservas de curto prazo, sem gestão complexa de quotas e acesso rentável. O início flexível é alimentado pelo programador de carga de trabalho dinâmico e é faturado através dos preços do programador de carga de trabalho dinâmico:
- Com desconto (até 53%) para vCPUs, GPUs e TPUs.
- Paga à medida que usa.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
- Verifique se tem um cluster do Autopilot ou um cluster padrão com a versão 1.33.0-gke.1712000 ou posterior.
- Verifique se conhece as limitações do início flexível.
- Quando usar um cluster padrão, verifique se mantém, pelo menos, um conjunto de nós sem o início flexível ativado para que o cluster funcione corretamente.
- Verifique se tem quota para GPUs preemptíveis nas localizações dos seus nós.
Se não tiver um cluster ou o seu cluster não cumprir os requisitos, pode criar um cluster regional padrão com a CLI gcloud. Adicione as seguintes flags para poder saber mais sobre o início flexível:
--location=us-central1 \
--node-locations=us-central1-a,us-central1-b \
--machine-type=g2-standard-8
Quando cria um node pool de início flexível, use as flags mencionadas anteriormente e --accelerator type=nvidia-l4,count=1
.
Se tiver um cluster Standard que cumpra os requisitos, as secções seguintes explicam como selecionar um tipo de acelerador de GPU e um tipo de máquina para o seu cluster.
Escolha um tipo de acelerador de GPU
Se usar um cluster no modo de piloto automático, ignore esta secção e aceda à secção Execute uma carga de trabalho em lote.
A disponibilidade de GPUs é específica de cada zona. Tem de encontrar um tipo de acelerador de GPU que esteja disponível numa zona em que o cluster Standard se encontra. Se tiver um cluster padrão regional, a zona na qual o tipo de acelerador de GPU está disponível tem de estar na região em que o cluster se encontra. Quando cria o conjunto de nós, especifica o tipo de acelerador e as zonas para os nós. Se especificar um tipo de acelerador que não esteja disponível na localização do cluster, a criação do conjunto de nós falha.
Execute os seguintes comandos para obter a localização do cluster e um tipo de acelerador de GPU suportado.
Obtenha a localização em que o conjunto se encontra:
gcloud container clusters list
O resultado é semelhante ao seguinte:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS STACK_TYPE example-cluster-1 us-west2 1.33.2-gke.1111000 34.102.3.122 e2-medium 1.33.2-gke.1111000 9 RUNNING IPV4
Apresente os tipos de aceleradores de GPU disponíveis, excluindo as estações de trabalho virtuais na localização:
gcloud compute accelerator-types list | grep LOCATION_NAME | grep -v "Workstation"
Substitua
LOCATION_NAME
pela localização do cluster.Por exemplo, para obter uma lista de tipos de aceleradores de GPU na região
us-west2
, execute o seguinte comando:gcloud compute accelerator-types list | grep us-west2 | grep -v "Workstation"
O resultado é semelhante ao seguinte:
nvidia-b200 us-west2-c NVIDIA B200 180GB nvidia-tesla-p4 us-west2-c NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-c NVIDIA T4 nvidia-tesla-p4 us-west2-b NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-b NVIDIA T4
Escolha um tipo de máquina compatível
Se usar um cluster no modo de piloto automático, ignore esta secção e aceda à secção Execute uma carga de trabalho em lote.
Depois de saber que GPUs estão disponíveis na localização do cluster, pode determinar os tipos de máquinas compatíveis. Google Cloud restringe as GPUs a séries de máquinas específicas. Siga estes passos para encontrar um tipo de máquina:
- Consulte a tabela Modelos de GPU disponíveis.
- Localize a linha do tipo de acelerador de GPU que escolheu.
- Consulte a coluna "Série da máquina" dessa linha. Esta coluna indica a série de máquinas que tem de usar.
- Para ver os nomes dos tipos de máquinas que pode especificar, clique no link na série de máquinas.
A única exceção é a série de máquinas N1, que oferece orientações adicionais sobre os tipos de máquinas N1 que pode usar com o tipo de acelerador escolhido.
Antes de usar uma máquina otimizada para aceleradores, certifique-se de que é suportada com o modo de aprovisionamento de início flexível, conforme mostrado em Disponibilidade da opção de consumo por tipo de máquina.
Determine a quantidade de aceleradores
Se usar um cluster no modo de piloto automático, ignore esta secção e aceda à secção Execute uma carga de trabalho em lote.
Para criar um node pool, tem de determinar o número de aceleradores a associar a cada nó no node pool. Os valores válidos dependem do tipo de acelerador e do tipo de máquina. Cada tipo de máquina tem um limite para o número de GPUs que pode suportar. Para determinar que valor usar (além da predefinição de 1
):
- Consulte os tipos de máquinas com GPU.
- Na tabela, pesquise o tipo de acelerador para o tipo de série da máquina.
- Use o valor na coluna "GPU count".
Crie um node pool com início flexível
Se usar um cluster no modo de piloto automático, ignore esta secção e aceda à secção Execute uma carga de trabalho em lote.
Para criar um node pool com o início flexível ativado num cluster padrão existente, pode usar a CLI gcloud ou o Terraform.
gcloud
Crie um node pool com início flexível:
gcloud container node-pools create NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --project PROJECT_ID \ --accelerator type=ACCELERATOR_TYPE,count=COUNT \ --machine-type MACHINE_TYPE \ --max-run-duration MAX_RUN_DURATION \ --flex-start \ --node-locations NODE_ZONES \ --num-nodes 0 \ --enable-autoscaling \ --total-min-nodes 0 \ --total-max-nodes 5 \ --location-policy ANY \ --reservation-affinity none \ --no-enable-autorepair
Substitua o seguinte:
NODE_POOL_NAME
: o nome que escolher para o seu conjunto de nós.CLUSTER_NAME
: o nome do cluster padrão que quer modificar.LOCATION_NAME
: a região de computação para o plano de controlo do cluster.PROJECT_ID
: o ID do seu projeto.ACCELERATOR_TYPE
: o tipo específico de acelerador (por exemplo,nvidia-tesla-t4
para NVIDIA T4) a anexar às instâncias.COUNT
: o número de aceleradores a associar às instâncias. O valor predefinido é1
.MACHINE_TYPE
: o tipo de máquina a usar para os nós.MAX_RUN_DURATION
: opcional. O tempo de execução máximo de um nó em segundos, até ao valor predefinido de sete dias. O número que introduzir tem de terminar ems
. Por exemplo, para especificar um dia, introduza86400s
.NODE_ZONES
: uma lista separada por vírgulas de uma ou mais zonas onde o GKE cria o conjunto de nós.
Neste comando, a flag
--flex-start
indica aogcloud
que crie um grupo de nós com o início flexível ativado.O GKE cria um node pool com nós que contêm duas instâncias do tipo de acelerador especificado. O conjunto de nós tem inicialmente zero nós e o dimensionamento automático está ativado
Valide o estado do início flexível no conjunto de nós:
gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --format="get(config.flexStart)"
Se o início flexível estiver ativado no conjunto de nós, o campo
flexStart
é definido comoTrue
.
Terraform
Pode usar o início flexível com GPUs através de um módulo do Terraform.
- Adicione o seguinte bloco à configuração do Terraform:
resource "google_container_node_pool" " "gpu_dws_pool" {
name = "gpu-dws-pool"
queued_provisioning {
enabled = false
}
}
node_config {
machine_type = "MACHINE_TYPE"
accelerator_type = "ACCELERATOR_TYPE"
accelerator_count = COUNT
node_locations = ["NODE_ZONES"]
flex_start = true
}
Substitua o seguinte:
MACHINE_TYPE
: o tipo de máquina a usar para nós.ACCELERATOR_TYPE
: o tipo específico de acelerador (por exemplo,nvidia-tesla-t4
para NVIDIA T4) a anexar às instâncias.COUNT
: o número de aceleradores a associar às instâncias. O valor predefinido é1
.NODE_ZONES
: a lista separada por vírgulas de uma ou mais zonas onde o GKE cria o conjunto de nós.
O Terraform chama as Google Cloud APIs para criar um cluster com um conjunto de nós que usa o início flexível com GPUs. Inicialmente, o conjunto de nós tem zero nós e o dimensionamento automático está ativado. Para saber mais sobre o Terraform, consulte a especificação de recursos google_container_node_pool
em terraform.io.
Execute uma carga de trabalho em lote
Nesta secção, cria dois trabalhos do Kubernetes que requerem uma GPU cada. Um controlador de tarefas no Kubernetes cria um ou mais pods e garante que executam com êxito uma tarefa específica.Na Google Cloud consola, inicie uma sessão do Cloud Shell clicando em
Ativar Cloud Shell. É aberta uma sessão no painel inferior da consola Google Cloud .
Crie um ficheiro com o nome
dws-flex-start.yaml
:apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: container-1 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure --- apiVersion: batch/v1 kind: Job metadata: name: job-2 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: container-2 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure
Aplique o manifesto
dws-flex-start.yaml
:kubectl apply -f dws-flex-start.yaml
Verifique se os trabalhos estão a ser executados no mesmo nó:
kubectl get pods -l "job-name in (job-1,job-2)" -o wide
O resultado é semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES job-1 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none> job-2 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none>
Limpar
Para evitar incorrer em cobranças na sua Google Cloud conta pelos recursos que usou nesta página, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Elimine o projeto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimine o recurso individual
Elimine os trabalhos:
kubectl delete job -l "job-name in (job-1,job-2)"
Elimine o node pool:
gcloud container node-pools delete NODE_POOL_NAME \ --location LOCATION_NAME
Elimine o cluster:
gcloud container clusters delete CLUSTER_NAME
O que se segue?
- Saiba mais sobre as GPUs no GKE.
- Saiba mais acerca do aprovisionamento automático de nós.
- Saiba mais acerca das práticas recomendadas para executar cargas de trabalho em lote no GKE.