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 GPUs NVIDIA Tesla® K80 , P100 , P4 , V100 e T4. As GPUs fornecem computação potente para impulsionar tarefas de aprendizado profundo, como reconhecimento de imagem, processamento de linguagem natural e outras tarefas que exigem computação intensiva, como transcodificação de vídeo e processamento de imagens.

Também é possível usar GPUs com VMs preemptivas se as cargas de trabalho puderem tolerar frequentes interrupções de nó. 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 de nó do Container-Optimized OS, os nós da GPU estão disponíveis no GKE versão 1.9 ou superior. 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 verificar se você tem uma cota de GPU suficiente no projeto, consulte Cotas no Console do Google Cloud Platform.

Se você precisar expandir a cota, solicite uma cota de GPU no Console do GCP. 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 usar a ferramenta de linha de comando gcloud para ver as GPUs disponíveis na sua zona.

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ço

Para informações sobre preços de GPUs, consulte a tabela de preços na página GPU 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 uma cota de GPU suficiente.

A cota de GPU 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

Para solicitar uma cota de GPU, use o Console do GCP.

Console

Execute as seguintes etapas:

  1. Acesse o menu Cotas do Cloud IAM no Console do GCP.

    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 "Métricas" com as métricas das GPUs selecionadas.

  4. Feche o menu suspenso Métricas.

Como enviar a solicitação de cota

Console

Execute as seguintes etapas:

  1. Na lista de cotas de GPU, selecione as cotas das regiões desejadas, como us-central1.
  2. Clique em Editar cotas. Um formulário de solicitação é aberto no lado direito do Console do GCP.
  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 de dimensionamento automático

Para aproveitar o melhor custo-benefício das GPUs no GKE e o dimensionamento 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 existente que já executa um pool não baseado em GPU, o GKE faz um taint automaticamente dos respectivos 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.

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

Para criar um pool de nós de GPU em um cluster existente, use o Console do GCP 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 nodes a serem executados em um período determinado;
  • --max-nodes especifica o número máximo de nós que podem ser executados;
  • --enable-autoscaling permite que o pool de nós seja escalonado automaticamente quando a demanda da carga de trabalho mudar.

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 GCP.

    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

Para criar um cluster zonal que executa GPUs, use o Console do GCP 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, que é 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 GCP.

    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.

Para criar um cluster de GPU regional, use 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 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 por nó;
  • [REGION] é a região do cluster, como us-central1;
  • [ZONE] é uma zona de computação na 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, que é o padrão quando --num-nodes é omitido, e dois GPUs P100 por nó, em duas zonas em 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 GCP.

    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, execute o seguinte comando:

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

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

Ubuntu

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

Para implantar o DaemonSet de instalação, 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. Uma vez instalado, o plug-in do dispositivo GPU NVIDIA mostra a capacidade da GPU por meio das APIs do Kubernetes.

Como configurar pods para consumir GPUs

Use um limite de recurso para configurar os pods para consumir GPUs. Especifique um limite de recurso em uma especificação de Pod 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
    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 seu próprio tipo de acelerador. O GKE anexa um seletor de nós exclusivo aos nós da GPU para ajudar a 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 segmentar determinados tipos de GPU, adicione esse 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
    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

O CUDA® é a plataforma de computação paralela e o modelo de programação da NVIDIA para GPUs. Os drivers de dispositivo da NVIDIA que você instala no cluster incluem as bibliotecas CUDA.

Bibliotecas CUDA e utilitários de depuração são disponibilizados no contêiner em /usr/local/nvidia/lib64 e /usr/local/nvidia/bin, respectivamente.

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

Você precisa usar as imagens de base CUDA do Docker baseadas em Ubuntu para aplicativos CUDA no GKE, em que LD_LIBRARY_PATH já esteja definido apropriadamente. A versão mais recente compatível do CUDA é a 9.0.

Como monitorar os nós da GPU

O GKE publica as métricas do Stackdriver Monitoring a seguir para contêineres usando GPUs. Use estas métricas 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 processando ativamente. 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 saber mais informações sobre o monitoramento dos clusters e os recursos deles, consulte a seção Monitoramento.

Visualizar as métricas de uso

Você pode visualizar as métricas de uso de GPU das cargas de trabalho no painel Cargas de trabalho do Console do GCP.

Console

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

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

    Acesse 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