Este documento explica como criar e executar um job que usa uma unidade de processamento gráfico (GPU).
Ao criar um job em lote, é possível adicionar uma ou mais GPUs às VMs que o executam. Casos de uso comuns para jobs que usam GPUs incluem processamento intensivo de dados e cargas de trabalho de machine learning (ML).
Antes de começar
- Se você nunca usou o Batch, leia os Primeiros passos com o Batch e ative-o com os 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, por padrão, é a conta de serviço padrão do Compute Engine
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Talvez você também consiga receber as permissões necessárias por meio de papéis personalizados ou outros papéis predefinidos.
-
Editor de jobs em lote (
Criar um job que usa GPUs
Para criar um job que usa GPUs, faça o seguinte:
- Consulte a seção Requisitos para um job usar GPUs para determinar os métodos que podem ser usados para criar seu job.
- Crie um job com os métodos selecionados. Para exemplos de como criar um job usando os métodos recomendados, consulte a seção Criar um job de exemplo que usa GPUs.
Requisitos para um job usar GPUs
Para usar GPUs, um job precisa realizar estas ações:
- Instale os drivers de GPU necessários automaticamente ou manualmente, dependendo dos requisitos do job.
- Se o job especificar outros recursos para as VMs dele (diretamente ou usando um modelo de instância de VM), o job precisará definir recursos de VM compatíveis.
Depois de determinar como atender a esses requisitos para o job, você também precisa definir as GPUs e o local do job. Cada VM de um job pode usar uma ou mais GPUs do tipo que você especificar. Os locais permitidos para as VMs do job (ou, se indefinido, o local do job) precisam ter o tipo especificado de GPUs. Para mais informações sobre como definir o tipo de GPU, o número da GPU e um local válido para um job, consulte os exemplos.
Instalar os drivers da GPU
Para instalar os drivers de GPU necessários, selecione um dos seguintes métodos:
Instalar drivers automaticamente (se possível): conforme mostrado nos exemplos, para permitir que o Batch busque os drivers de GPU necessários em um local de terceiros e instale-os em seu nome, defina o campo
installGpuDrivers
do job comotrue
. Esse método é recomendado se o job não exigir que você instale drivers manualmente.Instalar drivers manualmente:esse método será necessário se uma das seguintes condições for verdadeira:
- Um job usa execuções de script e 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 imagens do SO da VM podem ser usadas, consulte Visão geral do ambiente do SO da VM.
Para instalar manualmente os drivers de GPU necessários, o seguinte método é recomendado:
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 algum contêiner executável e não usar o Container-Optimized OS, você também precisa instalar o Kit de ferramentas de contêiner NVIDIA.
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).
Definir recursos de VM compatíveis
Se o job definir qualquer um dos recursos de VM (qualquer um dos
subcampos instances[]
)
que não sejam GPUs, você precisará definir esses recursos de VM de maneira compatível.
Para definir os recursos das VMs de um job, incluindo qualquer GPU, só é possível usar os seguintes métodos:
- Definir recursos diretamente (recomendado): conforme mostrado nos
exemplos, para
definir os recursos das VMs de um job diretamente, use o
campo
policy
. - Definir recursos em um modelo: defina os recursos para as VMs de um job especificando um modelo de instância do Compute Engine.
Além disso, todos os recursos definidos precisam ser compatíveis com o tipo e o número de GPUs para o job. Para mais informações sobre os recursos de VM que podem ser usados com GPUs, consulte Plataformas GPU na documentação do Compute Engine.
Criar um job de exemplo que usa GPUs
É possível criar um job que use GPUs com a CLI gcloud ou a API Batch.
gcloud
Crie um arquivo JSON que especifique os detalhes de configuração do job, os subcampos
type
ecount
do campoaccelerators[]
e um local que tenha esses tipos de GPUs.Por exemplo, para criar um job de script básico que use GPUs, instalar automaticamente os drivers de GPU necessários e especificar os locais permitidos para as VMs do job, 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": { "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ] } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } } }
Substitua:
INSTALL_GPU_DRIVERS
: opcional. Quando definido comotrue
, o Batch busca os drivers necessários para o tipo de GPU especificado no campopolicy
de um local de terceiros e o instala em seu nome. Se você definir esse campo comofalse
(padrão), precisará instalar os drivers de GPU manualmente para usar qualquer GPU nesse job.GPU_TYPE
: o tipo GPU. É possível ver uma lista dos tipos de GPU disponíveis usando o comandogcloud compute accelerator-types list
.GPU_COUNT
: o número de GPUs do tipo especificado.ALLOWED_LOCATIONS
: opcional. Os locais 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
. Para especificar um local permitido, selecione a região e, opcionalmente, uma ou mais zonas. Os locais escolhidos precisam ter os tipos de GPU que você quer para o job. Caso contrário, se você omitir esse campo, o local do job precisará ter os tipos de GPU. Para mais informações, consulte o campoallowedLocations[]
.
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 para um arquivo JSON com os detalhes de configuração do job.
API
Faça uma solicitação POST
para o método jobs.create
que especifica os detalhes de configuração do job, os subcampos type
e count
do campo accelerators[]
e um local que tenha esses tipos de GPUs.
Por exemplo, para criar um job de script básico que use GPUs, instalar automaticamente os drivers de GPU necessários e especificar os locais permitidos para as VMs do job, crie um arquivo JSON com o seguinte conteúdo:
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.LOCATION
: o local do job.JOB_NAME
: o nome do job.INSTALL_GPU_DRIVERS
: opcional. Quando definido comotrue
, o Batch busca os drivers necessários para o tipo de GPU especificado no campopolicy
de um local de terceiros e o instala em seu nome. Se você definir esse campo comofalse
(padrão), precisará instalar os drivers de GPU manualmente para usar qualquer GPU nesse job.GPU_TYPE
: o tipo GPU. É possível ver uma lista dos tipos de GPU disponíveis usando o comandogcloud compute accelerator-types list
.GPU_COUNT
: o número de GPUs do tipo especificado.ALLOWED_LOCATIONS
: opcional. Os locais 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
. Para especificar um local permitido, selecione a região e, opcionalmente, uma ou mais zonas. Os locais escolhidos precisam ter os tipos de GPU que você quer para o job. Caso contrário, se você omitir esse campo, o local do job precisará ter os tipos de GPU. Para mais informações, consulte o campoallowedLocations[]
.
A seguir
- Se você tiver problemas para criar ou executar um job, consulte Solução de problemas.
- Confira jobs e tarefas.
- Conheça mais opções de criação de jobs.