Como executar instâncias com aceleradores de GPU

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Nesta página, descrevemos como usar os aceleradores de hardware da unidade de processamento gráfico (GPU) da NVIDIA em instâncias de máquina virtual (VM) do Container-Optimized OS.

Visão geral

No Compute Engine, é possível criar instâncias de VM do Container-Optimized OS correspondentes com NVIDIA Tesla K80, P100, P4, V100 e T4 GPUs. As GPUs fornecem computação avançada para impulsionar tarefas de aprendizado profundo, como reconhecimento de imagem e processamento de linguagem natural, bem como outras tarefas que exigem computação intensiva, incluindo a transcodificação de vídeo e processamento de imagens.

O Google proporciona uma experiência integrada para que os usuários executem as cargas de trabalho da GPU em contêineres do Docker em instâncias de VM do Container-Optimized OS. Assim, os usuários podem aproveitar outros recursos do Container-Optimized OS, como segurança e confiabilidade.

Para saber mais sobre os casos de uso de GPUs, consulte GPUs do Cloud.

Para saber como usar GPUs no Google Kubernetes Engine (GKE), consulte Como executar GPUs no GKE.

Requisitos

A execução de GPUs em instâncias de VM do Container-Optimized OS têm os requisitos a seguir:

  • Imagens x86 do SO otimizadas para contêiner:somente imagens do Container-Optimized OS com base em x86 são compatíveis com GPUs em execução. As imagens do Container-Optimized OS com base em braços não são compatíveis com esse recurso.

  • Versão do Container-Optimized OS: para executar GPUs em instâncias de VM do Container-Optimized OS, o marco da versão do Container-Optimized OS precisa ser um marco de LTS e o número do marco precisa ser 85 ou maior.

  • Cota de GPU: você precisa ter a cota de GPU do Compute Engine na zona desejada antes de criar instâncias de VM do Container-Optimized OS com GPUs. Para garantir que você tenha uma cota de GPU suficiente no projeto, consulte Cotas no Console do Google Cloud.

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

  • Drivers da GPU NVIDIA: é necessário instalar os drivers da GPU NVIDIA por conta própria nas instâncias de VM do Container-Optimized OS. Nesta seção, explicamos como instalar os drivers nas instâncias de VM do Container-Optimized OS.

Primeiros passos: como executar GPUs no Container-Optimized OS

As seções a seguir explicam como executar GPUs em instâncias de VM do Container-Optimized OS.

Primeiro, você precisa de uma instância de VM do Container-Optimized OS com GPUs. É possível criar uma instância de VM do Container-Optimized OS com uma GPU ou adicionar GPUs em uma instância de VM do Container-Optimized OS. Ao criar instâncias de VM, lembre-se de escolher imagens ou famílias de imagens a partir do projeto de imagem cos-cloud.

Para verificar todas as GPUs anexadas às instâncias existentes de VM do Container-Optimized OS, execute o seguinte comando:

gcloud compute instances describe INSTANCE_NAME \
    --project=PROJECT_ID \
    --zone ZONE \
    --format="value(guestAccelerators)"

Substitua:

  • INSTANCE_NAME: o nome da nova instância de VM
  • PROJECT_ID: o ID do projeto
  • zone: a zona da instância de VM

Como instalar drivers de dispositivo GPU NVIDIA

Depois que você criar uma instância com uma ou mais GPUs, o sistema precisará de drivers para que os aplicativos acessem o dispositivo. Neste guia, mostramos as maneiras de instalar drivers proprietários da NVIDIA em instâncias de VM do Container-Optimized OS.

O Container-Optimized OS fornece um utilitário integrado cos-extensions para simplificar o processo de instalação do driver da NVIDIA. Ao executar o utilitário, os usuários concordam em aceitar o contrato de licença da NVIDIA.

Como identificar a versão do driver da GPU

Cada versão da imagem do Container-Optimized OS tem uma versão padrão de driver de GPU NVIDIA compatível. Consulte as Notas de lançamento dos principais marcos de LTS do Container-Optimized OS para a versão padrão suportada.

Verifique também todas as versões compatíveis do driver da GPU. Basta executar o seguinte comando na instância de VM do Container-Optimized OS:

sudo cos-extensions list

Como instalar o kit de ferramentas CUDA

Se os aplicativos usam CUDA, instale o kit de ferramentas CUDA da NVIDIA nos contêineres do Docker. Cada versão do CUDA requer uma versão mínima do driver da GPU ou uma versão posterior. Para verificar a versão mínima do driver da GPU necessária para a versão do CUDA, consulte Kit de ferramentas CUDA e versões compatíveis do driver. Verifique se a versão do Container-Optimized OS que você está usando tem a versão correta do driver da GPU para a versão do CUDA que você está usando.

Como instalar drivers por meio de comandos de shell

Depois de se conectar às instâncias de VM do Container-Optimized OS, execute o seguinte comando manualmente para instalar os drivers:

sudo cos-extensions install gpu

Como instalar drivers por meio de scripts de inicialização

Também é possível instalar drivers de GPU por meio de scripts de inicialização. É possível fornecer o script de inicialização ao criar instâncias de VM ou aplicar o script para executar instâncias de VM e reinicializar as VMs. Assim, é possível instalar drivers sem se conectar às VMs. Isso também garante que os drivers da GPU estejam configurados em cada reinicialização da VM.

Veja a seguir um exemplo de script de inicialização para instalar drivers:

#! /bin/bash

sudo cos-extensions install gpu

Como instalar drivers pelo cloud-init

O Cloud-init é semelhante a scripts de inicialização, mas mais poderoso. O exemplo a seguir mostra como instalar o driver da GPU com o cloud-init:

#cloud-config

runcmd:
  - cos-extensions install gpu

O uso do cloud-init permite que você especifique as dependências para que seus aplicativos de GPU sejam executados somente após a instalação do driver. Consulte a seção De ponta a ponta: como executar um aplicativo de GPU no Container-Optimized OS para ver mais detalhes.

Para mais informações sobre como usar o cloud-init em instâncias de VM do Container-Optimized OS, consulte a página Como criar e configurar instâncias.

Verificando a instalação

Execute os seguintes comandos nas instâncias de VM do Container-Optimized OS para verificar manualmente a instalação dos drivers da GPU. A saída do comando mostra as informações dos dispositivos da GPU, como o estado e a versão do driver dos dispositivos.

# Make the driver installation path executable by re-mounting it.
sudo mount --bind /var/lib/nvidia /var/lib/nvidia
sudo mount -o remount,exec /var/lib/nvidia
/var/lib/nvidia/bin/nvidia-smi

Como configurar contêineres do Docker para consumir GPUs

Depois que os drivers de GPU forem instalados, será possível configurar os contêineres do Docker para consumir GPUs. No exemplo a seguir, veja como executar um aplicativo CUDA simples em um contêiner do Docker que consome /dev/nvidia0:

docker run \
  --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
  --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin \
  --device /dev/nvidia0:/dev/nvidia0 \
  --device /dev/nvidia-uvm:/dev/nvidia-uvm \
  --device /dev/nvidiactl:/dev/nvidiactl \
  gcr.io/google_containers/cuda-vector-add:v0.1

Execute os contêineres do Docker com o cloud-init para especificar a dependência entre a instalação do driver e os contêineres do Docker. Consulte a seção De ponta a ponta: como executar um aplicativo de GPU no Container-Optimized OS para mais detalhes.

De ponta a ponta: como executar um aplicativo de GPU no Container-Optimized OS

O exemplo de ponta a ponta mostra como usar o cloud-init para configurar instâncias de VM do Container-Optimized OS que provisionam um contêiner de aplicativo da GPU myapp:latest após a instalação do driver da GPU:

#cloud-config

users:
- name: myuser
  uid: 2000

write_files:
  - path: /etc/systemd/system/install-gpu.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Install GPU drivers
      Wants=gcr-online.target docker.socket
      After=gcr-online.target docker.socket

      [Service]
      User=root
      Type=oneshot
      ExecStart=cos-extensions install gpu
      StandardOutput=journal+console
      StandardError=journal+console
  - path: /etc/systemd/system/myapp.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Run a myapp GPU application container
      Requires=install-gpu.service
      After=install-gpu.service

      [Service]
      User=root
      Type=oneshot
      RemainAfterExit=true
      ExecStart=/usr/bin/docker run --rm -u 2000 --name=myapp --device /dev/nvidia0:/dev/nvidia0 myapp:latest
      StandardOutput=journal+console
      StandardError=journal+console

runcmd:
  - systemctl daemon-reload
  - systemctl start install-gpu.service
  - systemctl start myapp.service

Sobre as bibliotecas CUDA

Os drivers de dispositivo NVIDIA que você instala nas instâncias de VM do Container-Optimized OS incluem as bibliotecas CUDA.

O exemplo anterior também mostra como ativar bibliotecas CUDA e depurar utilitários em contêineres do Docker em /usr/local/nvidia/lib64 e /usr/local/nvidia/bin, respectivamente.

Os aplicativos CUDA em execução nos contêineres do Docker 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 imagens básicas CUDA do Docker baseadas em Ubuntu nos aplicativos CUDA no Container-Optimized OS, em que LD_LIBRARY_PATH já esteja definido corretamente.

Compatibilidade com GPU K80

Os drivers NVIDIA R470 são a última família de drivers compatível com a GPU K80. Se uma versão mais recente for instalada em uma instância com GPU K80, cos-gpu-installer:v2 (a partir da versão 2.0.26) invocado por cos-extensions substituirá automaticamente uma versão do R470 disponível.

Segurança

Assim como outros módulos do kernel no Container-Optimized OS, os drivers de GPU são assinados criptograficamente e verificados por chaves integradas ao kernel do Container-Optimized OS. Ao contrário de outras distribuições, o Container-Optimized OS não permite que os usuários registrem a chave de proprietário da máquina (MOK, na sigla em inglês) e usem as chaves para assinar módulos de kernel personalizados. Isso serve para garantir a integridade do kernel do Container-Optimized OS e reduzir a superfície de ataque.

Restrições

Restrições de versão do Container-Optimized OS

Somente a versão 85 de LTS do Container-Optimized OS e posteriores suportam o utilitário cos-extensions mencionado na seção Como instalar drivers de dispositivo da GPU NVIDIA. Para versões anteriores do Container-Optimized OS, use a ferramenta de código aberto cos-gpu-installer para instalar drivers de GPU manualmente.

Restrições de instâncias da VM

As instâncias de VM com GPUs têm restrições específicas que fazem com que elas tenham um comportamento diferente dos outros tipos de instâncias. Para mais informações, consulte a página Restrições de GPU do Compute Engine.

Cota e disponibilidade

As GPUs estão disponíveis em regiões e zonas específicas. Ao solicitar cota de GPU, considere as regiões em que você pretende executar as instâncias de VM do Container-Optimized OS.

Para ver uma lista completa de regiões e zonas aplicáveis, consulte GPUs no Compute Engine. Também é possível ver as GPUs disponíveis na zona usando a Google Cloud CLI.

gcloud compute accelerator-types list

Preços

Para ver os preços das GPUs, consulte a página de preços do Compute Engine.

Compatibilidade

Cada versão de lançamento do Container-Optimized OS tem pelo menos uma versão do driver da GPU NVIDIA suportada. A equipe do Container-Optimized OS qualifica os drivers de GPU compatíveis para a versão do Container-Optimized OS antes do lançamento para garantir que eles sejam compatíveis. Novas versões dos drivers de GPU NVIDIA podem ser disponibilizadas periodicamente. Algumas versões do driver da GPU não são qualificadas para o Container-Optimized OS, e o cronograma de qualificação não é garantido.

Quando a equipe do Container-Optimized OS lança uma nova versão em um marco de lançamento, tentamos oferecer suporte à versão mais recente do driver da GPU na ramificação do driver correspondente. Isso é para corrigir os CVEs descobertos nos drivers da GPU o mais rápido possível.

Se um cliente do Container-Optimized OS identificar um problema relacionado aos drivers da GPU NVIDIA, ele precisará trabalhar diretamente com a NVIDIA. Se o problema não for específico do driver, os usuários podem abrir uma solicitação com o Cloud Customer Care.

A seguir