GPUs

Nesta página, mostramos como usar os aceleradores de hardware da unidade de processamento gráfico (GPU) da NVIDIA® nos nós de cluster do Kubernetes Engine.

Visão geral

Com o GKE, é possível criar pools de nós equipados com as GPUs NVIDIA Tesla® K80, P100, P4, V100 e T4 (links em inglês). As GPUs fornecem computação avançada para impulsionar tarefas de aprendizado profundo, como reconhecimento de imagem, processamento de linguagem natural e outras tarefas que exigem computação intensiva, incluindo a transcodificação de vídeo e processamento de imagens.

Também é possível usar GPUs com VMs preemptivas se as cargas de trabalho conseguem tolerar interrupções frequentes de nós. O uso de VMs preemptivas reduz o preço da execução de GPUs. Para saber mais, consulte GPUs em instâncias preemptivas.

Requisitos

As GPUs no GKE têm os seguintes requisitos:

Versão do Kubernetes
Para os pools de nós que usam a imagem do Container-Optimized OS, os nós da GPU estão disponíveis na versão 1.9 ou superior do GKE. Para os pools de nós que usam a imagem do nó do Ubuntu, os nós da GPU estão disponíveis na versão 1.11.3 ou superior do GKE.
Cota de GPU

Você precisa ter uma cota de GPU do Compute Engine na zona desejada antes de criar os nós da GPU. Para garantir que você tenha uma cota de GPU suficiente no seu projeto, consulte a página de cotas no Console do Google Cloud.

Se precisar de mais cota de GPU, solicite-a no Console do Cloud. Se o projeto tiver uma conta de faturamento definida, ele receberá a cota automaticamente depois que você enviar a solicitação.

Drivers de GPU NVIDIA

É preciso instalar manualmente os drivers da GPU NVIDIA nos nós. Veja nesta página como instalar os drivers.

Limitações

Antes de usar as GPUs no GKE, tenha em mente as seguintes limitações:

  • Não é possível adicionar GPUs a pools de nós existentes.
  • Os nós da GPU não podem ser migrados em tempo real durante os eventos de manutenção.

Disponibilidade

As GPUs estão disponíveis em regiões e zonas específicas. Ao solicitar a cota de GPU, pense nas regiões em que pretende executar os clusters.

Para uma lista completa das regiões e zonas aplicáveis, consulte as GPUs no Compute Engine.

Você também pode ver as GPUs disponíveis em sua zona usando a ferramenta de linha de comando gcloud.

gcloud

Para ver uma lista de todos os tipos de aceleradores de GPU aceitos em cada zona, execute o seguinte comando:

gcloud compute accelerator-types list

Preços

Para informações sobre preços de GPUs, consulte a tabela de preços na página de GPUs do GCP.

Cota de GPU

A cota de GPU é o número total de GPUs que podem ser executadas no projeto do GCP. Para criar clusters com GPUs, é preciso que o projeto tenha cota suficiente.

A cota precisa ser pelo menos equivalente ao número total de GPUs que você pretende executar no cluster. Se você ativar o dimensionamento automático de cluster, será necessário solicitar uma cota de GPU equivalente pelo menos ao número máximo de nós do cluster multiplicado pelo número de GPUs por nó.

Por exemplo, se você criar um cluster com três nós que executem duas GPUs por nó, o projeto precisará de pelo menos seis cotas de GPUs.

Como solicitar cotas de GPU

Solicite a cota de GPU usando o Console do Cloud.

Console

Siga as etapas abaixo:

  1. Acesse o menu "Cotas" do Cloud Identity and Access Management (Cloud IAM) no Console do Cloud.

    Acessar o menu "Cotas"

  2. No menu suspenso Métricas, clique em Nenhuma e digite "gpus" no campo de pesquisa.

  3. Nos resultados da pesquisa, selecione as GPUs desejadas:

    Uma captura de tela do menu suspenso

  4. Feche o menu suspenso Métricas.

Como enviar a solicitação de cota

Console

Siga as etapas abaixo:

  1. Na lista de cotas de GPU, selecione as cotas para as regiões desejadas, como us-central1.
  2. Clique em Editar cotas. Um formulário de solicitação é exibido no lado direito do Console do Cloud.
  3. Preencha o campo Novo limite de cota para cada solicitação de cota.
  4. Preencha o campo Descrição da solicitação com detalhes sobre a solicitação.
  5. Clique em Concluído.
  6. Clique em Enviar solicitação.

Como executar GPUs

Nas seções a seguir, explicamos como executar GPUs em clusters do GKE.

Como criar um pool de nós de GPU com escalonamento automático

Para aproveitar o melhor custo-benefício das GPUs no GKE e o escalonamento automático de cluster, recomendamos a criação de pools de nós de GPU separados nos clusters.

Quando você adiciona um pool de nós de GPU a um cluster atual que já executa um pool não baseado em GPU, o GKE faz um taint automaticamente dos nós com o seguinte código:

  • Chave: nvidia.com/gpu
  • Efeito: NoSchedule

Além disso, o GKE aplica automaticamente as tolerâncias correspondentes aos pods que solicitam GPUs ao executar o controlador de admissão ExtendedResourceToleration (em inglês).

Isso faz com que apenas os pods que solicitam GPUs sejam programados para os nós da GPU. Esse processo permite um escalonamento automático mais eficiente, porque os nós podem ser reduzidos rapidamente se não houver pods suficientes que requerem GPUs.

Crie um pool de nós de GPU em um cluster atual usando o Console do Cloud ou a ferramenta de linha de comando gcloud.

gcloud

Para criar um pool de nós com GPUs, execute o seguinte comando:

gcloud container node-pools create [POOL_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] --zone [COMPUTE_ZONE] \
--cluster [CLUSTER_NAME] [--num-nodes 3 --min-nodes 0 --max-nodes 5 \
--enable-autoscaling]

em que:

  • [POOL_NAME] é o nome escolhido para o pool de nós;
  • [GPU_TYPE] é o tipo de GPU: nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 ou nvidia-tesla-t4;
  • [AMOUNT] é o número de GPUs a serem anexadas aos nós no pool de nós;
  • [COMPUTE_ZONE] é a zona de computação em que o pool de nós será criado, como us-central1-c. É preciso que o cluster já esteja em execução na zona especificada;
  • [CLUSTER_NAME] é o nome do cluster em que o pool de nós será criado;
  • --num-nodes especifica o número inicial de nós a serem criados;
  • --min-nodes especifica o número mínimo de nós a serem executados em um determinado momento;
  • --max-nodes especifica o número máximo de nós que podem ser executados;
  • --enable-autoscaling permite que o pool de nós faça escalonamento automático quando a demanda de carga de trabalho for alterada.

Por exemplo, o comando a seguir cria um pool de nós de escalonamento automático, p100, com duas GPUs P100, no cluster p100-cluster:

gcloud container node-pools create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c --cluster p100-cluster \
--num-nodes 3 --min-nodes 0 --max-nodes 5 --enable-autoscaling

Console

  1. Acesse o menu do Google Kubernetes Engine no Console do Cloud.

    Acessar o menu do Google Kubernetes Engine

  2. Selecione o cluster pretendido.

  3. Clique em Editar.

  4. Em Pools de nós, clique em Adicionar pool de nós.

  5. Você também pode selecionar Ativado no menu suspenso Escalonamento automático.

  6. Configure seu pool de nós como quiser. Em seguida, em Tipo de máquina, clique em Personalizar.

  7. No menu suspenso Número de GPUs, selecione o número de GPUs a serem executadas por nó.

  8. No menu suspenso Tipo de GPU, selecione o tipo de GPU desejado.

  9. Marque Entendo as limitações no aviso que será exibido.

  10. Clique em Salvar.

Como criar um novo cluster zonal com GPUs

Crie um cluster zonal que execute GPUs usando o Console do Cloud ou a ferramenta de linha de comando gcloud.

gcloud

Para criar um cluster zonal com GPUs em execução no pool de nós padrão, execute o seguinte comando:

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--zone [COMPUTE_ZONE]

em que:

  • [CLUSTER_NAME] é o nome que você escolheu para o cluster;
  • [GPU_TYPE] é o tipo de GPU: nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 ou nvidia-tesla-t4;
  • [AMOUNT] é o número de GPUs a serem executadas no pool de nós padrão;
  • [COMPUTE_ZONE] é a zona de computação do cluster, como us-central1-c.

Por exemplo, o comando a seguir cria um cluster, p100, com três nós (o padrão quando --num-nodes é omitido) e duas GPUs P100 por nó:

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c

Console

  1. Acesse o menu do Google Kubernetes Engine no Console do Cloud.

    Acessar o menu do Google Kubernetes Engine

  2. Clique em Criar cluster.

  3. Escolha o modelo de cluster de computação acelerada por GPU.

  4. Configure o cluster como quiser. Em seguida, personalize o pool de nós da GPU ou adicione outros.

  5. Marque Entendo as limitações no aviso que será exibido.

  6. Clique em Criar.

Como criar um novo cluster regional com GPUs

Por padrão, os clusters regionais criam nós em três zonas de uma região. No entanto, nenhuma região do GCP tem GPUs nas três zonas. Ao criar clusters regionais com GPUs, é preciso especificar manualmente as zonas em que as GPUs estão disponíveis. Para saber quais zonas têm GPUs, consulte Disponibilidade.

Crie um cluster de GPU regional usando a ferramenta de linha de comando gcloud.

gcloud

Para criar um cluster regional com GPUs, execute o seguinte comando:

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--region [REGION] --node-locations [ZONE],[ZONE]

em que:

  • [CLUSTER_NAME] é o nome escolhido para o cluster;
  • [GPU_TYPE] é o tipo de GPU: nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 ou nvidia-tesla-t4;
  • [AMOUNT] é o número de GPUs a serem executadas por nó;
  • [REGION] é a região do cluster, como us-central1;
  • [ZONE] é uma zona de computação dentro da região, como us-central1-c. As zonas precisam ter os tipos de GPU que você especificar.

Por exemplo, o comando a seguir cria um cluster, p100, com três nós (o padrão quando --num-nodes for omitido) e duas GPUs P100 por nó, em duas zonas dentro de us-central1:

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--region us-central1 \ --node-locations us-central1-a,us-central1-c

Console

  1. Acesse o menu do Google Kubernetes Engine no Console do Cloud.

    Acessar o menu do Google Kubernetes Engine

  2. Clique em Criar cluster.

  3. Escolha o modelo de cluster de Computação acelerada por GPU.

  4. Em tipo de local, escolha Regional. Em Região, selecione a região desejada.

  5. Configure o cluster como quiser. Em seguida, personalize o pool de nós da GPU ou adicione outros.

  6. Marque Entendo as limitações no aviso que será exibido.

  7. Clique em Criar.

Como instalar drivers de dispositivo da GPU NVIDIA

Depois de adicionar nós da GPU ao seu cluster, você precisa instalar os drivers de dispositivo da NVIDIA nesses nós. O Google fornece um DaemonSet que instala os drivers automaticamente.

Consulte a seção abaixo para conseguir instruções de instalação para os nós do Container-Optimized OS (COS) e do Ubuntu.

COS

Para implantar o DaemonSet de instalação (em inglês), execute o seguinte comando:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml

A instalação leva alguns minutos para ser concluída. Depois que é instalado, o plug-in do dispositivo GPU NVIDIA mostra a capacidade da GPU por meio das APIs do Kubernetes.

Na tabela a seguir, você vê a versão do GKE em que cada versão do driver NVIDIA é compatível:

Versão do GKE Driver NVIDIA
1.14.2-gke.3 e superior 418.67
1.14.2-gke.2 e inferior 410.79
1.13.6-gke.6 e superior 418.67
1.13.6-gke.5 e inferior 410.79
1.12.x 410.79
1.11.5 e superior 410.79
1.10.5-gke.4 e superior 396.46
1.10.2-gke.3 e superior 390.46

Ubuntu

O suporte à GPU requer v1.11.3 ou superior para os nós do Ubuntu.

Para implantar o DaemonSet de instalação (em inglês), execute o seguinte comando:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml

A instalação leva alguns segundos para ser concluída. Depois que é instalado, o plug-in do dispositivo GPU NVIDIA mostra a capacidade da GPU por meio das APIs do Kubernetes.

Na tabela a seguir, você vê a versão do GKE em que cada versão do driver NVIDIA é compatível:

Versão do GKE Driver NVIDIA
1.14.x 410.104
1.13.x 410.104
1.12.6-gke.6 e superior 410.104
1.12.6-gke.5 e inferior 384.111
1.11.8-gke.4 e superior 410.104
1.11.8-gke.3 e inferior 384.111

Como configurar pods para consumir GPUs

Use um limite de recurso (em inglês) para configurar os pods para consumir GPUs. Especifique um limite de recurso em uma especificação de pod (em inglês) usando o par de chave-valor a seguir:

  • Chave: nvidia/gpu
  • Valor: número de GPUs a serem consumidas

Veja abaixo um exemplo de especificação de pod em que são consumidas GPUs:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    command: ["/bin/bash"]
    resources:
      limits:
       nvidia.com/gpu: 2

Como consumir vários tipos de GPU

Se você quiser usar vários tipos de aceleradores de GPU por cluster, precisará criar vários pools de nós, cada um com o próprio tipo de acelerador. O GKE anexa um seletor de nós (em inglês) exclusivo aos nós da GPU para alocar as cargas de trabalho nos nós com tipos de GPU específicos:

  • Chave: cloud.google.com/gke-accelerator
  • Valor: nvidia-tesla-k80, nvidia-tesla-p100, nvidia-tesla-p4, nvidia-tesla-v100 ou nvidia-tesla-t4

Para se concentrar em determinados tipos de GPU, adicione um seletor de nó à especificação do pod da carga de trabalho. Exemplo:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    command: ["/bin/bash"]
    resources:
      limits:
       nvidia.com/gpu: 2
  nodeSelector:
    cloud.google.com/gke-accelerator: nvidia-tesla-k80 # or nvidia-tesla-p100 or nvidia-tesla-p4 or nvidia-tesla-v100 or nvidia-tesla-t4

Sobre as bibliotecas CUDA

A plataforma de computação paralela CUDA® é o modelo de programação da NVIDIA para GPUs. Os drivers de dispositivo da NVIDIA que você instala no cluster incluem as bibliotecas CUDA (links em inglês).

Os utilitários de depuração e as bibliotecas CUDA são disponibilizados dentro do contêiner em /usr/local/nvidia/bin e /usr/local/nvidia/lib64, respectivamente.

Os aplicativos CUDA em execução nos pods que consomem GPUs NVIDIA precisam descobrir dinamicamente as bibliotecas CUDA. Isso requer a inclusão de /usr/local/nvidia/lib64 na variável de ambiente LD_LIBRARY_PATH.

Use as imagens básicas CUDA do Docker baseadas em Ubuntu (em inglês) nos aplicativos CUDA no GKE. LD_LIBRARY_PATH já está definido corretamente. A versão compatível do CUDA mais recente é 10.0 no COS (1.11.5 ou superior) e no Ubuntu (1.11.8-gke.4/1.12.6-gke.6 e superiores).

Como monitorar os nós da GPU

O GKE publica as métricas do Stackdriver Monitoring a seguir para contêineres usando GPUs. Use-as para monitorar o desempenho das cargas de trabalho de GPU:

  • Ciclo de trabalho (container/accelerator/duty_cycle): porcentagem de tempo durante o período de amostra anterior (10 segundos) em que o acelerador estava realizando o processamento. Entre 1 e 100.
  • Uso da memória (container/accelerator/memory_used): quantidade de memória do acelerador alocada em bytes.
  • Capacidade de memória (container/accelerator/memory_total): memória total do acelerador em bytes.

Essas métricas são disponibilizadas no Stackdriver.

Para mais informações sobre o monitoramento dos seus clusters e os recursos deles, consulte a seção Monitoramento.

Ver as métricas de uso

Veja as métricas de uso de GPU das cargas de trabalho no painel Cargas de trabalho do Console do Cloud.

Console

Para ver o uso de GPU das cargas de trabalho, execute as seguintes etapas:

  1. Acesse o menu Cargas de trabalho no Console do Cloud.

    Acessar o menu do Google Kubernetes Engine

  2. Selecione a carga de trabalho desejada.

O painel Cargas de trabalho exibe gráficos de uso e capacidade de memória da GPU e de ciclo de trabalho da GPU.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine