Como executar instâncias com aceleradores de GPU

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

Ao usar o Compute Engine, você pode criar instâncias de VM que executam o Container-Optimized OS com GPUs anexadas. Só é possível usar duas famílias de máquinas ao executar GPUs no Compute Engine: otimizada para aceleradores e N1 de uso geral.

  • Para tipos de máquina com otimização de aceleradores, cada tipo de máquina tem um modelo específico de GPUs NVIDIA anexado.

    • Para os tipos de máquina com otimização de acelerador A3, as GPUs NVIDIA H100 de 80 GB estão anexadas.
    • Para os tipos de máquina com otimização de acelerador A2, as GPUs NVIDIA A100 estão anexadas. Elas estão disponíveis nas opções A100 de 40 GB e A100 de 80 GB.
    • Para os tipos de máquina com otimização de acelerador G2, as GPUs NVIDIA L4 estão anexadas.
  • Para tipos de máquinas de uso geral N1, é possível anexar as seguintes GPUs:

As GPUs fornecem potência computacional para realizar tarefas de aprendizado profundo, como reconhecimento de imagem e processamento de linguagem natural, além de outras tarefas de computação intensiva, como transcodificação de vídeo e processamento de imagens.

O Google Cloud oferece uma experiência perfeita para você executar cargas de trabalho de GPU em contêineres em instâncias de VM do Container-Optimized OS. Assim, você aproveita 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 Container-Optimized OS:apenas as imagens do Container-Optimized OS baseadas em x86 são compatíveis com GPUs em execução. As imagens do Container-Optimized OS baseadas em ARM não são compatíveis com o 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 uma cota de GPU do Compute Engine na zona escolhida 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 aumentar a cota, solicite uma 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.

criar uma VM

As seções a seguir explicam como executar GPUs em VMs do Container-Optimized OS.

Primeiro, você precisa de uma instância de VM do Container-Optimized OS com GPUs. O método usado para criar uma VM depende do modelo de GPU selecionado.

Você também pode adicionar GPUs a instâncias de VM atuais do Container-Optimized OS.

Ao criar VMs, lembre-se de escolher imagens ou famílias de imagens 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

Instalar drivers de dispositivo da 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.

Identificar versões 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

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 a GPU K80, o cos-gpu-installer:v2 (a partir da v2.0.26) invocado por cos-extensions vai recorrer automaticamente a uma versão R470 disponível.

Identificar a versão necessária do kit de ferramentas CUDA

Se os aplicativos usarem CUDA, instale o kit de ferramentas CUDA da NVIDIA nos contêineres. 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.

Instalar o driver

É possível instalar GPUs usando comandos de shell, scripts de inicialização ou cloud-init. Os três métodos usam o comando sudo cos-extensions install gpu para instalar o driver padrão da GPU para sua versão LTS do Container-Optimized OS.

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

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

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 de cloud-init permite especificar as dependências para que seus aplicativos de GPU sejam executados apenas 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.

Em alguns casos, o driver padrão não atende aos requisitos mínimos do driver do kit de ferramentas CUDA ou do modelo de GPU. Para instalar uma versão específica do driver da GPU, anexe a sinalização de versão. Substitua DRIVER_VERSION pela versão mínima do driver da GPU necessária para o modelo de GPU e compatível com o Container-Optimized OS. O Container-Optimized OS oferece suporte apenas a um conjunto selecionado de drivers NVIDIA.

sudo cos-extensions install gpu -- -version=DRIVER_VERSION

Verifique 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

Configurar contêineres para consumir GPUs

Depois que os drivers de GPU estiverem instalados, configure os contêineres para consumir GPUs. O exemplo a seguir mostra como executar um aplicativo CUDA 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

É possível executar seus contêineres por meio do cloud-init para especificar a dependência entre a instalação do driver e seus contêineres. Consulte a seção Completo: 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-X da NVIDIA

O CUDA® é a plataforma de computação paralela e o modelo de programação da NVIDIA para GPUs. Para usar aplicativos CUDA, as bibliotecas precisam estar presentes na imagem que você está usando. É possível realizar as seguintes ações para adicionar as bibliotecas CUDA-X da NVIDIA:

  • Use uma imagem com as bibliotecas CUDA-X da NVIDIA pré-instaladas. Por exemplo, é possível usar os contêineres de aprendizado profundo do Google. Esses contêineres pré-instalam os principais frameworks de ciência de dados, as bibliotecas CUDA-X da NVIDIA e as ferramentas. Como alternativa, a imagem CUDA da NVIDIA contém somente as bibliotecas CUDA-X da NVIDIA.

  • Crie e use sua própria imagem. Nesse caso, inclua /usr/local/cuda-XX.X/lib64, que contém as bibliotecas CUDA-X da NVIDIA, e /usr/local/nvidia/lib64, que contém os drivers de dispositivo NVIDIA, na variável de ambiente LD_LIBRARY_PATH. Para /usr/local/cuda-XX.X/lib64, o nome do diretório depende da versão da imagem que você usou. Por exemplo, as bibliotecas CUDA-X da NVIDIA e os utilitários de depuração em contêineres do Docker podem estar em /usr/local/cuda-11.0/lib64 e /usr/local/nvidia/bin, respectivamente.

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 de drivers da GPU não se qualificam 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