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

Com o Compute Engine, é possível 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: otimizadas para acelerador e N1 de uso geral.

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

    • Para os tipos de máquina com otimização de aceleradores A3, há GPUs NVIDIA H100 de 80 GB conectadas.
    • Para tipos de máquina otimizados para aceleradores 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 otimizados para 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 oferecem 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.

OGoogle Cloud oferece uma experiência integrada para executar cargas de trabalho de GPU em contêineres em instâncias de VM do Container-Optimized OS. Assim, você pode 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 Container-Optimized OS:apenas imagens do Container-Optimized OS com base em x86 oferecem suporte a 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 SO Container-Optimized com GPUs. Para garantir que você tenha cota de GPU suficiente no projeto, consulte Cotas no console do Google Cloud.

    Se precisar de mais cota de GPU, solicite-a 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.

Também é possível adicionar GPUs a instâncias de VM 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 lista de versões de driver de GPU NVIDIA compatíveis para cada tipo de GPU, além de um driver padrão para cada tipo. Para conferir uma lista completa de versões com suporte, consulte as Notas da versão dos principais marcos de LTS do Container-Optimized OS.

Você também pode verificar todas as versões do driver da GPU compatíveis com a GPU na sua instância de VM do Container-Optimized OS executando o seguinte comando:

sudo cos-extensions list

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

Se os aplicativos usam 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. Todos os três métodos usam o comando sudo cos-extensions install gpu para instalar o driver de GPU padrão para a 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 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.

Em alguns casos, o driver padrão incluído no SO Container-Optimized não atende aos requisitos mínimos do driver do kit de ferramentas CUDA ou do modelo de GPU. Consulte as versões necessárias do driver NVIDIA para conferir os requisitos de versão de tipos específicos de GPUs.

Para instalar uma versão específica do driver da GPU, execute o seguinte comando:

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

Substitua DRIVER_VERSION por uma das seguintes opções:

  • default: instala o driver padrão designado pela versão do Container-Optimized OS. Esta versão recebe correções de bugs e atualizações de segurança.
  • latest: instala o driver mais recente disponível na versão do SO otimizado para contêineres. Isso pode causar mudanças de compatibilidade devido a possíveis atualizações de versão principal nas versões do COS.
  • A versão completa: use essa opção para fixar uma versão específica para cargas de trabalho sensíveis a mudanças de driver. Por exemplo, especifique a versão 535.183.01.
  • Versão do driver da NVIDIA: instala a versão mais recente do driver em uma versão específica da NVIDIA para ficar por dentro das atualizações de segurança e correções de bugs disponíveis. Por exemplo, especifique a ramificação R535. Essa opção está disponível a partir de cos-gpu-installer:v2.2.1.

Para conferir as versões disponíveis para cada uma dessas opções, execute o comando para identificar as versões do driver da GPU.

Pré-carregar o driver

É possível pré-carregar o driver da GPU na instância do Container-Optimized OS mesmo quando nenhum dispositivo de GPU está conectado. Isso é útil para preparar ambientes ou testar configurações antes de conectar o hardware da GPU física.

Para pré-carregar o driver da GPU, execute o seguinte comando:

sudo cos-extensions install gpu -- -no-verify -target-gpu=GPU_DEVICE

Esse comando é compatível a partir da versão cos-gpu-installer:v2.3.0. As seguintes flags são válidas:

  • -no-verify: faz o download e prepara os arquivos do driver, mas ignora o carregamento do módulo do kernel e a verificação de instalação.

  • -target-gpu: especifica o dispositivo de GPU para garantir que o driver correto seja carregado previamente, evitando problemas de compatibilidade quando o dispositivo de GPU for conectado mais tarde. Substitua GPU_DEVICE por um modelo de GPU específico (por exemplo,NVIDIA_L4) listado na Visão geral. Se -target-gpu não for especificado, o driver de GPU padrão será carregado previamente.

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 forem instalados, será possível configurar 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 os contêineres com o cloud-init para especificar a dependência entre a instalação do driver e os contêineres. 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-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 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