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

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.

Requisitos

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

  • 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 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 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 conectadas às instâncias atuais 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 instância.
  • project-id: o ID do projeto
  • zone: a zona para a instância.

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. A tabela a seguir mostra a versão padrão compatível dos principais marcos de LTS do Container-Optimized OS.

Versão do SO Versão padrão do driver
COS 85 LTS 450.51.06

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:

cos-extensions list

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:

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

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 o seguinte comando nas instâncias de VM do Container-Optimized OS para verificar manualmente a instalação do driver da GPU. Ela mostra as informações dos dispositivos da GPU, como o estado dos dispositivos e a versão do driver.

# Make the driver installation path executable by remounting 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.

Security

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 da versão do COS

Somente o marco da versão 85 e posterior do LTS da COS é compatível com o utilitário cos-extensions mencionado na seção Como instalar drivers de dispositivo da GPU NVIDIA. Nos marcos de versão anteriores do COS, use a ferramenta de código aberto cos-gpu-Installer para instalar manualmente os drivers da GPU.

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 em sua zona usando a ferramenta de linha de comando gcloud.

gcloud compute accelerator-types list

Preços

Para informações sobre preços de GPUs, consulte a tabela de preços na página de GPUs do Google Cloud.

Compatibilidade

Cada versão de lançamento do Container-Optimized OS tem pelo menos uma versão do driver da GPU NVIDIA compatível. 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 serão qualificadas para COS, 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 poderão abrir uma solicitação com o suporte do Cloud.

A seguir