Este documento explica como criar e executar um job que usa uma de processamento gráfico (GPU). Para saber mais sobre os recursos restrições para GPUs, consulte Sobre GPUs na na documentação do Compute Engine.
Ao criar um job em lote, você pode usar GPUs para acelerar cargas de trabalho específicas. Casos de uso comuns para jobs que usam GPUs incluem processamento de dados intensivo e cargas de trabalho de inteligência artificial (IA), como machine learning (ML).
Antes de começar
- Se você nunca usou o Batch antes, revise Introdução ao Batch e ativar o Batch. Para isso, conclua pré-requisitos para projetos e usuários.
-
Para receber as permissões necessárias para criar um job, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Editor de jobs em lote (
roles/batch.jobsEditor
) no projeto -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço do job, que é a conta de serviço padrão do Compute Engine
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
-
Editor de jobs em lote (
Criar um job que usa GPUs
Para criar um job que use GPUs, faça o seguinte:
- Planeje os requisitos para um job que usa GPUs.
- Crie um trabalho com os requisitos e métodos que você identificou. Para conferir exemplos de como criar um job usando os métodos recomendados, consulte Criar um job de exemplo que usa GPUs neste documento.
Planejar os requisitos para um job que usa GPUs
Antes de criar um job que use GPUs, planeje os requisitos dele, conforme explicado nas seguintes seções:
Etapa 1: selecionar o tipo de máquina da GPU
Os tipos de máquina de GPU disponíveis (as combinações válidas de tipo de GPU, número de GPUs e tipo de máquina (vCPUs e memória)) e os casos de uso estão listados na página Tipos de máquina de GPU na documentação do Compute Engine.
Os campos necessários para um job especificar um tipo de máquina GPU variam de acordo com a categorias na tabela a seguir:
Tipos de máquina da GPU e requisitos de job | |
---|---|
GPUs para VMs otimizadas para acelerador: VMs com um tipo de máquina da família de máquinas com otimização para acelerador têm um tipo e um número específicos dessas GPUs automaticamente anexadas. |
Para usar GPUs em VMs otimizadas para aceleradores, recomendamos que você especificar o tipo de máquina. Cada tipo de máquina com otimização para acelerador oferece suporte apenas a um tipo e número específicos de GPUs, ou seja, equivalente, quer você especifique ou não esses valores, além dos tipo de máquina otimização para acelerador. Especificamente, o Batch também permite especificar e o número de GPUs para VMs com otimização de acelerador, mas o resultado As opções de vCPU e memória costumam ser muito limitadas. Por isso, recomendamos verificar se as opções de vCPU e memória disponíveis são compatíveis com os requisitos da tarefa. |
GPUs para VMs N1: essas GPUs exigem que você especifique o tipo. e o valor a ser anexado a cada VM e precisam ser anexados às VMs com uma na linha de comando Série de máquinas N1. |
Para usar GPUs em VMs N1, recomendamos especificar pelo menos o tipo e número de GPUs. Verifique se a combinação de valores corresponde a uma das opções de GPU válidas para os tipos de máquina N1. As opções de vCPU e memória para VMs N1 que usam qualquer tipo específico e número de GPUs é bastante flexível, portanto, se preferir, você pode deixar o Batch selecionar uma tipo de máquina que atenda aos requisitos da tarefa. |
Etapa 2: instalar os drivers da GPU
Para instalar os drivers de GPU necessários, selecione um dos seguintes métodos:
Instalar drivers automaticamente (recomendado, se possível): conforme mostrado nas exemplos, para permitir que o Batch busque os drivers de GPU necessários em um local de terceiros e instalá-los em seu nome, defina o
installGpuDrivers
para a vaga detrue
. Esse método é recomendado caso seu trabalho não exija a instalação manual de drivers.Opcionalmente, se você precisar especificar qual versão do driver da GPU será instalada em lote, defina também o campo
driverVersion
.Instalar drivers manualmente: esse método é necessário se uma das seguintes condições for verdadeira:
- Um job usa scripts e executáveis de contêiner e não tem acesso à Internet. Para mais informações sobre o acesso de um job, consulte Visão geral da rede em lote.
- Um job usa uma imagem de VM personalizada. Para saber mais sobre as imagens do SO da VM e quais você pode usar, consulte Visão geral do ambiente do SO da VM.
Para instalar manualmente os drivers de GPU necessários, recomendamos o seguinte método:
Crie uma imagem de VM personalizada que inclua os drivers da GPU.
Para instalar drivers de GPU, execute um script de instalação com base no SO que você quer usar:
Se o job tiver contêineres executáveis e não usar o SO otimizado para contêineres, também será necessário instalar o NVIDIA Container Toolkit.
Crie e envie um job com a imagem de VM personalizada usando um modelo de instância do Compute Engine. Defina o campo
installGpuDrivers
do job comofalse
(padrão).
Etapa 3: definir recursos de VM compatíveis
Para saber mais sobre os requisitos e as opções para definir os recursos da VM para um vaga, consulte Recursos do job.
Em resumo, você precisa realizar todas as ações a seguir ao definir os recursos da VM para um job que usa GPUs:
Verifique se o tipo de máquina da GPU está disponível no local das VMs do job.
Para saber onde os tipos de máquinas GPU estão disponíveis, consulte Disponibilidade de GPU por regiões e zonas na documentação do Compute Engine.
Se você especificar o tipo de máquina do job, verifique se ele tem vCPUs e memória para os requisitos de tarefa do job. A especificação do tipo de máquina do job é obrigatória ao usar GPUs para VMs otimizadas para acelerador e opcional ao usar GPUs para VMs N1.
Defina os recursos da VM para um job usando um método válido:
- Defina os recursos da VM diretamente usando o campo
instances[].policy
(recomendado se possível). Esse método é mostrado nos exemplos. - Defina os recursos da VM com um modelo usando o campo
instances[].instanceTemplate
. Esse método é necessário para instalar manualmente drivers de GPU por meio de um imagem. Para mais informações, consulte Defina recursos de job usando um modelo de instância de VM.
- Defina os recursos da VM diretamente usando o campo
Criar um job de exemplo que usa GPUs
As seções a seguir explicam como criar um exemplo de vaga para diferentes tipos de máquina GPU. Todos os jobs de exemplo instalam drivers de GPU automaticamente e definir diretamente os recursos da VM.
Usar GPUs para VMs otimizadas para aceleradores
É possível criar um job que usa GPUs para VMs com otimização para acelerador usando o CLI gcloud, API Batch, Java ou Python.
gcloud
Crie um arquivo JSON que instale drivers de GPU e defina Campo
machineType
com tipo de máquina da família de máquinas com otimização para aceleradores e usa um local que tenha o tipo especificado de GPUs.Por exemplo, para criar um job de script básico que usa GPUs para com as VMs otimizadas para aceleradores, crie um arquivo JSON com o seguinte conteúdo:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE" } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } } }
Substitua:
INSTALL_GPU_DRIVERS
: quando definido comotrue
, o Batch busca os drivers necessários para Tipo de GPU especificado no campopolicy
de um local de terceiros, e o Batch os instala em seu nome. Se você definir esse campo comofalse
(padrão), será necessário instalar os drivers de GPU manualmente para usar GPUs para esse job.MACHINE_TYPE
: um tipo de máquina do família de máquinas com otimização para acelerador.ALLOWED_LOCATIONS
: o campoallowedLocations[]
define uma região e, opcionalmente, uma ou mais zonas em que as instâncias de VM do seu job podem ser executadas. Por exemplo,regions/us-central1, zones/us-central1-a
permite a zonaus-central1-a
. Especifique os locais que oferecem o tipo de máquina de GPU que você quer para esse job. Caso contrário, se você omitir esse campo, verifique se o local do job oferece o tipo de máquina de GPU.
Para criar e executar o job, use o comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua:
JOB_NAME
: o nome do job.LOCATION
: o local do job.JSON_CONFIGURATION_FILE
: o caminho de um arquivo JSON com os detalhes de configuração do job.
API
Faça uma solicitação POST
ao
Método jobs.create
que instala drivers de GPU, define
Campo machineType
com tipo de máquina da família de máquinas com otimização para aceleradores e usa
um local que tenha o tipo especificado de GPUs.
Por exemplo, para criar um job de script básico que usa GPUs para VMs otimizadas para acelerador, faça a seguinte solicitação:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"machineType": "MACHINE_TYPE"
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
Substitua:
PROJECT_ID
: o ID do projeto do seu projeto.LOCATION
: o local do trabalho.JOB_NAME
: o nome do job.INSTALL_GPU_DRIVERS
: quando definido comotrue
, o lote busca os drivers necessários para o tipo de GPU especificado no campopolicy
de um local de terceiros e os instala em seu nome. Se você definir esse campo comofalse
(padrão), será necessário para instalar drivers de GPU manualmente a fim de usar GPUs nesse job.MACHINE_TYPE
: um tipo de máquina do família de máquinas com otimização para acelerador.ALLOWED_LOCATIONS
: o campoallowedLocations[]
define uma região e, opcionalmente, uma ou mais zonas em que as instâncias de VM do seu job podem ser executadas. Por exemplo,regions/us-central1, zones/us-central1-a
permite a zonaus-central1-a
. Especifique os locais que oferecem o tipo de máquina de GPU que você quer para esse job. Caso contrário, se você omitir esse campo, o local do job mostra o tipo de máquina GPU.
Java
Python
Usar GPUs para VMs N1
É possível criar um job que usa GPUs para VMs N1 usando a CLI gcloud, a API Batch, Java, Node.js ou Python.
gcloud
Crie um arquivo JSON que instale drivers de GPU, defina os subcampos
type
ecount
do campoaccelerators[]
e use um local com o tipo especificado de GPUs.Por exemplo, para criar um job de script básico que usa GPUs para VMs N1 e permite que o Batch selecione exatamente o tipo de máquina N1, um arquivo JSON com o seguinte conteúdo:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ] } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } } }
Substitua:
INSTALL_GPU_DRIVERS
: quando definido comotrue
, o Batch busca os drivers necessários para Tipo de GPU especificado no campopolicy
de um local de terceiros, e o Batch os instala em seu nome. Se você definir esse campo comofalse
(padrão), será necessário para instalar drivers de GPU manualmente a fim de usar GPUs nesse job.GPU_TYPE
: a GPU. não é válido. Você pode ver uma lista dos tipos de GPU disponíveis usando o comandogcloud compute accelerator-types list
. Use este campo apenas para GPUs para VMs N1.GPU_COUNT
: o número de GPUs do tipo especificado. Para mais informações sobre as opções válidas, consulte os tipos de máquinas de GPU para a série de máquinas N1. Use este campo apenas para GPUs de VMs N1.ALLOWED_LOCATIONS
: o campoallowedLocations[]
define uma região e, opcionalmente, uma ou mais zonas em que as instâncias de VM do seu job podem ser executadas. Por exemplo,regions/us-central1, zones/us-central1-a
permite a zonaus-central1-a
. Certifique-se de especificar locais que oferecem o tipo de máquina GPU que você quer para este trabalho. Caso contrário, se você omitir esse campo, o local do job mostra o tipo de máquina GPU.
Para criar e executar o job, use o Comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua:
JOB_NAME
: o nome do job.LOCATION
: o local do trabalho.JSON_CONFIGURATION_FILE
: o caminho de uma Arquivo JSON com os detalhes de configuração do job.
API
Faça uma solicitação POST
ao
Método jobs.create
que instala drivers de GPU, define
Subcampos type
e count
do campo accelerators[]
e usa um local que tem o
e tipos específicos de GPUs.
Por exemplo, para criar um job de script básico que usa GPUs para VMs N1 e permite que o Batch selecione exatamente o tipo de máquina N1, seguinte solicitação:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
Substitua:
PROJECT_ID
: o ID do projeto do seu projeto.LOCATION
: o local do trabalho.JOB_NAME
: o nome do job.INSTALL_GPU_DRIVERS
: quando definido comotrue
, o lote busca os drivers necessários para o tipo de GPU especificado no campopolicy
de um local de terceiros e os instala em seu nome. Se você definir esse campo comofalse
(padrão), será necessário para instalar drivers de GPU manualmente a fim de usar GPUs nesse job.GPU_TYPE
: o tipo de GPU. Você pode ver uma lista dos tipos de GPU disponíveis usando o comandogcloud compute accelerator-types list
. Use este campo apenas para GPUs para VMs N1.GPU_COUNT
: o número de GPUs do tipo especificado. Para mais informações sobre as opções válidas, consulte Tipos de máquinas de GPU para séries de máquinas N1. Use este campo apenas para GPUs de VMs N1.ALLOWED_LOCATIONS
: o campoallowedLocations[]
define uma região e, opcionalmente, uma ou mais zonas em que as instâncias de VM do seu job podem ser executadas. Por exemplo,regions/us-central1, zones/us-central1-a
permite a zonaus-central1-a
. Especifique os locais que oferecem o tipo de máquina de GPU que você quer para esse job. Caso contrário, se você omitir esse campo, o local do job mostra o tipo de máquina GPU.
Java
Node.js
Para criar um job com GPUs usando Node.js, selecione uma das opções a seguir com base no tipo de máquina do seu modelo de GPU:
Criar um job que usa GPUs com VMs otimizadas para acelerador
Para usar GPUs com VMs otimizadas para acelerador, basta especificar o tipo de máquina que você quer para as VMs do job:
Criar um job que usa GPUs com VMs N1
Para usar GPUs com VMs N1, é necessário especificar o número e o tipo de GPUs que você quer para cada uma das VMs do job:
Python
A seguir
- Se você tiver problemas para criar ou executar um job, consulte Solução de problemas.
- Ver tarefas e tarefas.
- Saiba mais sobre as opções de criação de jobs.