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, é possível criar instâncias de VM em execuçã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 de uso geral N1.
Para tipos de máquinas otimizados para aceleradores, cada tipo de máquina tem uma e o modelo de GPUs NVIDIA anexado.
- Para tipos de máquina com otimização para acelerador A3, GPUs NVIDIA H100 de 80 GB estão anexadas.
- Para tipos de máquina com otimização de acelerador A2, GPUs NVIDIA A100 estão anexadas. Elas estão disponíveis nas opções A100 de 40 GB e A100 de 80 GB.
- Para tipos de máquina com otimização para aceleradores G2, GPUs NVIDIA L4 estão anexadas.
Para tipos de máquinas de uso geral N1, anexe as seguintes GPUs:
As GPUs oferecem potência computacional para impulsionar tarefas de aprendizado profundo, como reconhecimento de imagem e processamento de linguagem natural, bem como outras tarefas de computação intensiva, como como transcodificação de vídeo e processamento de imagens.
O Google Cloud oferece uma experiência integrada para você executar cargas de trabalho de GPU em contêineres de instâncias de VM do Container-Optimized OS. você pode se beneficiar de outros recursos do Container-Optimized OS, 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 do Container-Optimized OS x86: apenas o Container-Optimized OS baseado em x86 dão suporte à execução de GPUs. As imagens do Container-Optimized OS baseadas em ARM não dão suporte ao 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, você precisará 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 no Container-Optimized OS ou de várias VMs.
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.
- Para criar uma VM do Container-Optimized OS com a NVIDIA H100 conectada, faça o seguinte: GPUs A100 ou L4, consulte Crie uma VM otimizada para acelerador.
- Para criar uma VM do Container-Optimized OS com NVIDIA T4, P4, GPUs P100 ou V100, consulte Crie uma VM N1 com GPUs anexadas.
Você também pode adicionar GPUs. a instâncias de VM do Container-Optimized OS.
Ao criar VMs, lembre-se de escolher imagens ou famílias de imagens
no 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 VMPROJECT_ID
: o ID do projetozone
: 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 as versões do driver da GPU
Cada versão de imagem do Container-Optimized OS tem uma lista de Versões de drivers de GPU NVIDIA para cada tipo de GPU, junto com um driver padrão para cada tipo. Para uma lista completa das versões com suporte, consulte as notas da versão do os principais marcos de LTS do Container-Optimized OS.
Verifique também todas as versões de driver com suporte da GPU no seu instância de VM do Container-Optimized OS executando o seguinte comando:
sudo cos-extensions list
Identificar a versão necessária do kit de ferramentas CUDA
Caso seus aplicativos usem CUDA, instalar 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 de GPU padrão da versão do Container-Optimized OS LTS.
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. Isso permite que você instale os drivers sem conectá-los à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
Usar o cloud-init permite especificar as dependências para que sua GPU serão executados somente depois que o driver tiver sido instalado. 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 Container-Optimized OS não atende aos requisitos mínimos de driver do kit de ferramentas CUDA ou do modelo de GPU. Consulte o driver obrigatório da NVIDIA para 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 opções a seguir.
opções:
default
: instala o driver padrão designado pelo Container-Optimized OS. Essa versão recebe correções de bugs e e atualizações de segurança.latest
: instala o driver mais recente disponível na versão do SO otimizado para contêineres. Saiba que isso pode introduzir mudanças de compatibilidade devido a possíveis atualizações de versão principal no COS lançamentos.- A versão completa: use essa opção para fixar uma versão específica em 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 a partir decos-gpu-installer:v2.2.1
.
Para ver as versões disponíveis para cada uma dessas opções, execute o comando para Identifique as versões do driver da GPU.
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
e consumir GPUs. O exemplo a seguir mostra como executar um CUDA
aplicativo 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 pelo cloud-init para especificar a dependência entre a instalação do driver e os contêineres. consulte 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 ambienteLD_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 marcos de versão anteriores do Container-Optimized OS, use o
cos-gpu-installer
uma ferramenta de código aberto
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 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 se qualificam para 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
- Saiba mais sobre como executar contêineres em uma instância de VM do Container-Optimized OS.
- Saiba mais sobre GPUs no Compute Engine.
- Saiba mais sobre como solicitar cota de GPU.