Executar instâncias com aceleradores de GPU

Esta página descreve como usar aceleradores de hardware da unidade de processamento gráfico (GPU) da NVIDIA em instâncias de máquinas virtuais (VMs) do SO otimizado para contentores.

Vista geral

Ao usar o Compute Engine, pode criar instâncias de VM que executam o SO otimizado para contentores com GPUs anexadas. Só pode usar duas famílias de máquinas quando executa GPUs no Compute Engine: otimizada para aceleradores e N1 de uso geral.

  • Para os tipos de máquinas otimizados para aceleradores, cada tipo de máquina tem um modelo específico de GPUs NVIDIA anexadas.

    • Para tipos de máquinas otimizados para aceleradores A4, são anexadas GPUs NVIDIA B200.
    • Para os tipos de máquinas otimizados para aceleradores A3 Ultra, são anexadas GPUs NVIDIA H200 de 141 GB.
    • Para tipos de máquinas otimizadas para aceleradores A3, são anexadas GPUs NVIDIA H100 de 80 GB.
    • Para tipos de máquinas otimizadas para aceleradores A2, são anexadas GPUs NVIDIA A100. Estão disponíveis nas opções A100 de 40 GB e A100 de 80 GB.
    • Para tipos de máquinas otimizadas para aceleradores G2, são anexadas GPUs NVIDIA L4.
  • Para tipos de máquinas de utilização geral N1, pode anexar as seguintes GPUs:

As GPUs oferecem capacidade de computação para executar tarefas de aprendizagem profunda, como reconhecimento de imagens e processamento de linguagem natural, bem como outras tarefas que exigem muita computação, como transcodificação de vídeo e processamento de imagens.

Google Cloud oferece uma experiência perfeita para executar as suas cargas de trabalho de GPU em contentores em instâncias de VM do SO otimizado para contentores, para que possa beneficiar de outras funcionalidades do SO otimizado para contentores, como segurança e fiabilidade.

Para saber mais sobre os exemplos de utilização de GPUs, consulte o artigo GPUs na nuvem.

Para saber como usar GPUs no Google Kubernetes Engine (GKE), consulte o artigo Executar GPUs no GKE.

Requisitos

A execução de GPUs em instâncias de VM do SO otimizado para contentores tem os seguintes requisitos:

  • Imagens do SO otimizado para contentores x86: apenas as imagens do SO otimizado para contentores baseadas em x86 suportam a execução de GPUs. As imagens do SO otimizado para contentores baseadas em ARM não suportam a funcionalidade.

  • Versão do SO otimizado para contentores: para executar GPUs em instâncias de VMs do SO otimizado para contentores, o marco de lançamento do SO otimizado para contentores tem de ser um marco de LTS e o número do marco tem de ser 85 ou superior.

  • Quota de GPU: tem de ter quota de GPU do Compute Engine na zona escolhida antes de poder criar instâncias de VM do SO otimizado para contentores com GPUs. Para garantir que tem quota de GPU suficiente no seu projeto, consulte Quotas na Google Cloud consola.

    Se precisar de uma quota de GPU adicional, tem de pedir uma quota de GPU na Google Cloud consola. Se tiver uma conta de faturação estabelecida, o seu projeto recebe automaticamente a quota de GPUs depois de enviar o pedido de quota.

  • Controladores de GPU NVIDIA: tem de instalar os controladores de GPU NVIDIA nas instâncias de VM do SO otimizado para contentores. Esta secção explica como instalar os controladores em instâncias de VM do SO otimizado para contentores.

Crie uma VM

As secções seguintes explicam como executar GPUs em VMs do SO otimizado para contentores.

Primeiro, precisa de uma instância de VM do SO otimizado para contentores com GPUs. O método usado para criar uma VM depende do modelo de GPU selecionado.

Também pode adicionar GPUs a instâncias de VM do SO otimizado para contentores existentes.

Quando criar VMs, lembre-se de escolher imagens ou famílias de imagens do projeto de imagens cos-cloud.

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

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

Substitua o seguinte:

Instale os controladores de dispositivos da GPU NVIDIA

Depois de criar uma instância com uma ou mais GPUs, o seu sistema requer controladores do dispositivo para que as suas aplicações possam aceder ao dispositivo. Este guia mostra as formas de instalar controladores proprietários da NVIDIA em instâncias de VMs do SO otimizado para contentores.

O SO otimizado para contentores oferece uma utilidade incorporada cos-extensions para simplificar o processo de instalação do controlador da NVIDIA. Ao executar o utilitário, os utilizadores concordam em aceitar o contrato de licença da NVIDIA.

Identifique as versões dos controladores da GPU

Cada versão da imagem do SO otimizado para contentores tem uma lista de versões de controladores de GPU NVIDIA suportadas para cada tipo de GPU, juntamente com um controlador predefinido para cada tipo. Para ver uma lista completa das versões suportadas, consulte as notas de lançamento dos principais marcos do LTS do SO otimizado para contentores.

Também pode verificar todas as versões de controladores de GPU suportadas pela GPU na instância de VM do SO otimizado para contentores executando o seguinte comando:

sudo cos-extensions list

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

Se as suas aplicações usarem CUDA, instale o kit de ferramentas CUDA da NVIDIA nos seus contentores. Cada versão do CUDA requer uma versão mínima do controlador da GPU ou uma versão posterior. Para verificar a versão mínima do controlador da GPU necessária para a sua versão do CUDA, consulte o artigo CUDA Toolkit and Compatible Driver Versions (Conjunto de ferramentas CUDA e versões de controladores compatíveis). Certifique-se de que a versão do SO otimizado para contentores que está a usar tem a versão correta do controlador da GPU para a versão do CUDA que está a usar.

Instale o controlador

Pode instalar GPUs através de comandos de shell, scripts de arranque ou do cloud-init. Todos os três métodos usam o comando sudo cos-extensions install gpu para instalar o controlador de GPU predefinido para a versão LTS do SO otimizado para contentores.

Shell

Depois de se ligar às suas instâncias de VM do SO otimizado para contentores, pode executar o seguinte comando manualmente para instalar controladores:

sudo cos-extensions install gpu

Scripts de arranque

Também pode instalar controladores de GPU através de scripts de arranque. Pode fornecer o script de arranque quando cria instâncias de VM ou aplicar o script a instâncias de VM em execução e, em seguida, reiniciar as VMs. Isto permite-lhe instalar controladores sem se ligar às VMs. Também garante que os controladores da GPU estão configurados em todos os reinícios da VM.

Segue-se um exemplo de um script de arranque para instalar controladores:

#! /bin/bash

sudo cos-extensions install gpu

Cloud-init

O cloud-init é semelhante aos scripts de arranque, mas mais potente. O exemplo seguinte mostra como instalar o controlador da GPU através do cloud-init:

#cloud-config

runcmd:
  - cos-extensions install gpu

A utilização do cloud-init permite-lhe especificar as dependências para que as suas aplicações de GPU só sejam executadas após a instalação do controlador. Consulte a secção Ponto a ponto: executar uma aplicação de GPU no SO otimizado para contentores para ver mais detalhes.

Para mais informações sobre como usar o cloud-init em instâncias de VMs do SO otimizado para contentores, consulte a página Criar e configurar instâncias.

Em alguns casos, o controlador predefinido incluído no SO otimizado para contentores não cumpre os requisitos mínimos do controlador do seu conjunto de ferramentas CUDA ou do seu modelo de GPU. Consulte as versões dos controladores da NVIDIA necessárias para ver os requisitos de versão de tipos específicos de GPUs.

Para instalar uma versão específica do controlador 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 controlador predefinido designado pela versão do SO otimizado para contentores. Esta versão recebe correções de erros e atualizações de segurança.
  • latest: instala o controlador mais recente disponível no lançamento do SO otimizado para contentores. Tenha em atenção que isto pode introduzir alterações de compatibilidade devido a potenciais atualizações da versão principal nos lançamentos do COS.
  • A versão completa: use esta opção para fixar uma versão específica para cargas de trabalho sensíveis a alterações do controlador. Por exemplo, especifique a versão 535.183.01.
  • Ramo do controlador da NVIDIA: instala o controlador estável mais recente num ramo específico da NVIDIA para se manter atualizado com as atualizações de segurança e as correções de erros nesse ramo. Por exemplo, especifique a ramificação R535. Esta opção está disponível a partir do cos-gpu-installer:v2.2.1.

Para ver as versões disponíveis para cada uma dessas opções, execute o comando para Identificar versões do controlador da GPU.

Transmita parâmetros para os módulos de kernel

Pode transmitir parâmetros específicos ao módulo do kernel da NVIDIA após a instalação através da flag --module-arg. Esta flag é útil para ativar ou desativar determinadas funcionalidades do condutor. A flag pode ser usada várias vezes para transmitir vários argumentos.

Por exemplo, numa VM do COS, pode usar o seguinte comando para instalar o controlador da NVIDIA e carregar o módulo do kernel nvidia.ko com o parâmetro NVreg_EnableGpuFirmware=0.

sudo cos-extensions install gpu -- --module-arg nvidia.NVreg_EnableGpuFirmware=0

Pré-carregue o controlador

Pode pré-carregar o controlador da GPU na sua instância do Container-Optimized OS, mesmo quando não está anexado nenhum dispositivo de GPU. Isto é útil para preparar ambientes ou testar configurações antes de anexar hardware de GPU físico.

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

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

Este comando é suportado a partir de cos-gpu-installer:v2.3.0. Aplicam-se as seguintes flags:

  • -no-verify: transfere e prepara os ficheiros de controlador, mas ignora o carregamento do módulo do kernel e a validação da instalação.

  • -target-gpu: especifica o dispositivo GPU para garantir que o controlador correto é pré-carregado, evitando problemas de compatibilidade quando o dispositivo GPU é anexado posteriormente. Substitua GPU_DEVICE por um modelo de GPU específico (por exemplo,NVIDIA_L4) indicado na Vista geral. Se -target-gpu não for especificado, o controlador de GPU predefinido é pré-carregado.

Valide a instalação

Pode executar os seguintes comandos nas instâncias de VM do SO otimizado para contentores para verificar manualmente a instalação dos controladores da GPU. O resultado do comando mostra as informações dos dispositivos GPU, como o estado dos dispositivos e a versão do controlador.

# 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

Configure contentores para consumir GPUs

Depois de instalados os controladores da GPU, pode configurar contentores para consumirem GPUs. O exemplo seguinte mostra como executar uma aplicação CUDA num contentor 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

Pode executar os seus contentores através do cloud-init para especificar a dependência entre a instalação do controlador e os seus contentores. Consulte a secção Completo: executar uma aplicação de GPU no SO otimizado para contentores para obter mais detalhes.

Completo: executar uma aplicação de GPU no SO otimizado para contentores

O exemplo completo seguinte mostra como usar o cloud-init para configurar instâncias de VM do SO otimizado para contentores que aprovisionam um contentor de aplicação de GPU myapp:latest após a instalação do controlador de 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

Acerca das bibliotecas NVIDIA CUDA-X

CUDA® é a plataforma de computação paralela e o modelo de programação da NVIDIA para GPUs. Para usar aplicações CUDA, as bibliotecas têm de estar presentes na imagem que está a usar. Pode fazer qualquer uma das seguintes ações para adicionar as bibliotecas NVIDIA CUDA-X:

  • Use uma imagem com as bibliotecas NVIDIA CUDA-X pré-instaladas. Por exemplo, pode usar os Deep Learning Containers da Google. Estes contentores pré-instalam as principais frameworks de ciência de dados, as bibliotecas e as ferramentas NVIDIA CUDA-X. Em alternativa, a imagem CUDA da NVIDIA contém apenas as bibliotecas NVIDIA CUDA-X.

  • Crie e use a sua própria imagem. Neste caso, inclua /usr/local/cuda-XX.X/lib64, que contém as bibliotecas NVIDIA CUDA-X, e /usr/local/nvidia/lib64, que contém os controladores de dispositivos NVIDIA, na variável de ambiente LD_LIBRARY_PATH. Para o /usr/local/cuda-XX.X/lib64, o nome do diretório depende da versão da imagem que usou. Por exemplo, as bibliotecas NVIDIA CUDA-X e as utilidades de depuração em contentores Docker podem estar em /usr/local/cuda-11.0/lib64 e /usr/local/nvidia/bin, respetivamente.

Segurança

Tal como outros módulos do kernel no SO otimizado para contentores, os controladores da GPU são assinados criptograficamente e validados por chaves incorporadas no kernel do SO otimizado para contentores. Ao contrário de algumas outras distribuições, o SO otimizado para contentores não permite que os utilizadores inscrevam a respetiva chave do proprietário da máquina (MOK) e usem as chaves para assinar módulos do kernel personalizados. Isto destina-se a garantir a integridade do kernel do SO otimizado para contentores e reduzir a superfície de ataque.

Restrições

Restrições da versão do SO otimizado para contentores

Apenas a versão LTS 85 e posteriores do SO otimizado para contentores suportam a utilidade cos-extensions mencionada na secção Instalar controladores de dispositivos de GPU NVIDIA. Para marcos de lançamento anteriores do SO otimizado para contentores, use a ferramenta de código aberto cos-gpu-installer para instalar manualmente os controladores da GPU.

Restrições das instâncias de VM

As instâncias de VMs com GPUs têm restrições específicas que fazem com que se comportem de forma diferente de outros tipos de instâncias. Para mais informações, consulte a página Restrições de GPUs do Compute Engine.

Quota e disponibilidade

As GPUs estão disponíveis em regiões e zonas específicas. Quando solicitar uma quota de GPUs, considere as regiões nas quais pretende executar as suas instâncias de VM do SO otimizado para contentores.

Para ver uma lista completa das regiões e zonas aplicáveis, consulte o artigo GPUs no Compute Engine. Também pode ver as GPUs disponíveis na sua zona através da Google Cloud CLI.

gcloud compute accelerator-types list

Preços

Para informações sobre os preços das GPUs, consulte a página de preços do Compute Engine.

Capacidade de suporte

Cada versão de lançamento do SO otimizado para contentores tem, pelo menos, uma versão do controlador da GPU NVIDIA suportada. A equipa do SO otimizado para contentores qualifica os controladores de GPU suportados em função da versão do SO otimizado para contentores antes do lançamento para garantir que são compatíveis. Podem ser disponibilizadas novas versões dos controladores da GPU NVIDIA periodicamente. Algumas versões de controladores de GPU não são elegíveis para o SO otimizado para contentores, e a cronologia de elegibilidade não é garantida.

Quando a equipa do SO otimizado para contentores lança uma nova versão num marco de lançamento tentamos suportar a versão mais recente do controlador de GPU no ramo do controlador correspondente. Isto destina-se a corrigir CVEs descobertas nos controladores de GPU o mais rapidamente possível.

Se um cliente do Container-Optimized OS identificar um problema relacionado com os controladores da GPU NVIDIA, tem de trabalhar diretamente com a NVIDIA para receber apoio técnico. Se o problema não for específico do controlador, os utilizadores podem abrir um pedido junto ao apoio ao cliente da nuvem.

O que se segue?