Neste documento, explicamos como criar e executar um job que usa uma unidade de processamento gráfico (GPU).
Se quiser, é possível criar um job em lote que adiciona uma ou mais GPUs às VMs em execução no job. Os casos de uso comuns de 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 antes, analise os Primeiros passos com o Batch e ative o Batch preenchendo 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 de IAM:
-
Editor de job 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 o acesso.
Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.
-
Editor de job em lote (
Criar um job que usa uma GPU
Se preferir, crie um job que adicione uma ou mais unidades de processamento gráfico (GPUs, na sigla em inglês) a cada uma das VMs que executam o job. Para criar um job que use GPUs, faça o seguinte:
- Consulte a seção Requisitos para que um job use GPUs para determinar os métodos que você pode usar 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 Como criar um job que usa uma GPU.
Requisitos para que um job use GPUs
Para usar GPUs, um job precisa fazer o seguinte:
Instalar os drivers da GPU
Para instalar os drivers de GPU necessários, selecione um dos seguintes métodos:
Instalar drivers automaticamente (recomendado): 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
.Instalar drivers manualmente: este método será necessário se uma das seguintes condições for verdadeira:
- Um job usa scripts e contêineres executáveis 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 instalar manualmente os drivers de GPU necessários, recomenda-se 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 baseado no sistema operacional que você quer usar:
Se o job tiver algum contêiner executável e não usar o Container-Optimized OS, você também precisará 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).
Definir os recursos da VM
Para usar GPUs, um job precisa especificar o tipo e o número de GPUs e um tipo de máquina compatível com as VMs do job. Para definir os recursos das VMs de um job, selecione um dos seguintes métodos:
- Definir recursos diretamente (recomendado): como mostrado nos exemplos, para definir os recursos para as VMs de um job diretamente, use o campo
policy
. - Definir recursos em um modelo: defina os recursos das VMs de um job especificando um modelo de instância do Compute Engine. Se você incluir um modelo de instância na definição do job, será necessário usar esse método.
Montar GPUs em qualquer contêiner
Se um job incluir qualquer contêiner executável em que você queira usar GPUs, também será necessário ativar as GPUs em cada contêiner executável com base na imagem da VM do job:
- Se um job usar a imagem de VM padrão e tiver apenas contêineres executáveis ou uma imagem personalizada do Container-Optimized OS, faça o seguinte:
- No campo
options
, especifique a sinalização--privileged
. - No campo
volumes
, especifique os caminhos/var/lib/nvidia/lib64:/usr/local/nvidia/lib64
e/var/lib/n
vidia/bin:/usr/local/nvidia/bin
.
- No campo
- Caso contrário, se um job usar a imagem de VM padrão e tiver executáveis de contêiner e script ou se ele usar uma imagem de VM personalizada diferente do Container-Optimized OS, faça o seguinte:
- No campo
options
, especifique a sinalização--gpus all
.
- No campo
Como criar um job que usa uma GPU
Nesta seção, fornecemos exemplos sobre como criar um job que usa uma GPU usando os métodos recomendados: o job instala automaticamente os drivers necessários e define os recursos que ele usa diretamente. Os jobs de exemplo com executáveis de contêiner também montam as GPUs nos contêineres. Você pode criar um job que use uma GPU usando a CLI gcloud ou a API Batch.
gcloud
Para adicionar uma GPU a um job, veja um dos seguintes exemplos com base nos tipos de executáveis que você quer usar:
- Adicionar uma GPU a um job de contêiner.
- Adicionar uma GPU a um job de script.
- Adicionar uma GPU a um contêiner e um job de script
Adicionar uma GPU a um job de contêiner
Para criar um job de contêiner com uma GPU que usa a imagem padrão usando a CLI gcloud, use o comando gcloud batch jobs submit
.
Por exemplo, para criar um job de contêiner com uma GPU:
Crie um arquivo JSON no diretório atual chamado
hello-world-container-job-gpu.json
com o seguinte conteúdo:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1", "volumes": [ "/var/lib/nvidia/lib64:/usr/local/nvidia/lib64", "/var/lib/nvidia/bin:/usr/local/nvidia/bin" ], "options": "--privileged" } } ], }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "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 que você especifica no campopolicy
a partir 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 drivers de GPU manualmente para usar qualquer GPU para esse job.MACHINE_TYPE
: o tipo de máquina, que pode ser predefinido ou personalizado, para as VMs do job. O tipo de máquina restringe o tipo de GPU que pode ser usado. Para criar um job com uma GPU, este campo é obrigatório.GPU_TYPE
: o tipo de GPU. É possível ver uma lista dos tipos de GPU disponíveis usando o comandogcloud compute accelerator-types list
. Para criar um job com uma GPU, este campo é obrigatório.GPU_COUNT
: o número de GPUs do tipo especificado no campotype
. Para criar um job com uma GPU, este campo é obrigatório.ALLOWED_LOCATIONS
: opcional. Os locais em que as instâncias de VM do job podem ser executadas (por exemplo,regions/us-central1, zones/us-central1-a
permite a zonaus-central1-a
). Se você especificar um local permitido, selecione a região e, opcionalmente, uma ou mais zonas. Os locais escolhidos precisam ter o tipo de GPU desejado para esse job. Para mais informações, consulte o campo de matrizallowedLocations
.
Execute este comando:
gcloud batch jobs submit example-job-gpu \ --location us-central1 \ --config hello-world-container-job-gpu.json
Adicionar uma GPU a um job de script
Para criar um job de script com uma GPU que use a imagem padrão usando a CLI gcloud, use o comando gcloud batch jobs submit
.
Por exemplo, para criar um job de script com uma GPU:
Crie um arquivo JSON no diretório atual chamado
hello-world-script-job-gpu.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", "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 que você especifica no campopolicy
a partir 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 drivers de GPU manualmente para usar qualquer GPU para esse job.MACHINE_TYPE
: o tipo de máquina, que pode ser predefinido ou personalizado, para as VMs do job. O tipo de máquina restringe o tipo de GPU que pode ser usado. Para criar um job com uma GPU, este campo é obrigatório.GPU_TYPE
: o tipo de GPU. É possível ver uma lista dos tipos de GPU disponíveis usando o comandogcloud compute accelerator-types list
. Para criar um job com uma GPU, este campo é obrigatório.GPU_COUNT
: o número de GPUs do tipo especificado no campotype
. Para criar um job com uma GPU, este campo é obrigatório.ALLOWED_LOCATIONS
: opcional. Os locais em que as instâncias de VM do job podem ser executadas (por exemplo,regions/us-central1, zones/us-central1-a
permite a zonaus-central1-a
). Se você especificar um local permitido, selecione a região e, opcionalmente, uma ou mais zonas. Os locais escolhidos precisam ter o tipo de GPU desejado para esse job. Para mais informações, consulte o campo de matrizallowedLocations
.
Execute este comando:
gcloud batch jobs submit example-job-gpu \ --location us-central1 \ --config hello-world-script-job-gpu.json
Adicionar uma GPU a um contêiner e um job de script
Para criar um job de contêiner e script com uma GPU que usa a imagem padrão usando a CLI gcloud, use o comando gcloud batch jobs submit
.
Por exemplo, para criar um contêiner e um job de script com uma GPU:
Crie um arquivo JSON no diretório atual chamado
hello-world-container-script-job-gpu.json
com o seguinte conteúdo:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1", "options": "--gpus all" } }, { "script": { "text": "echo Hello world from script task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "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 que você especifica no campopolicy
a partir 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 drivers de GPU manualmente para usar qualquer GPU para esse job.MACHINE_TYPE
: o tipo de máquina, que pode ser predefinido ou personalizado, para as VMs do job. O tipo de máquina restringe o tipo de GPU que pode ser usado. Para criar um job com uma GPU, este campo é obrigatório.GPU_TYPE
: o tipo de GPU. É possível ver uma lista dos tipos de GPU disponíveis usando o comandogcloud compute accelerator-types list
. Para criar um job com uma GPU, este campo é obrigatório.GPU_COUNT
: o número de GPUs do tipo especificado no campotype
. Para criar um job com uma GPU, este campo é obrigatório.ALLOWED_LOCATIONS
: opcional. Os locais em que as instâncias de VM do job podem ser executadas (por exemplo,regions/us-central1, zones/us-central1-a
permite a zonaus-central1-a
). Se você especificar um local permitido, selecione a região e, opcionalmente, uma ou mais zonas. Os locais escolhidos precisam ter o tipo de GPU desejado para esse job. Para mais informações, consulte o campo de matrizallowedLocations
.
Execute este comando:
gcloud batch jobs submit example-job-gpu \ --location us-central1 \ --config hello-world-container-script-job-gpu.json
API
Para adicionar uma GPU a um job, veja um dos seguintes exemplos com base nos tipos de executáveis que você quer usar:
- Adicionar uma GPU a um job de contêiner.
- Adicionar uma GPU a um job de script.
- Adicionar uma GPU a um contêiner e um job de script
Adicionar uma GPU a um job de contêiner
Para criar um job de contêiner com uma GPU que use a imagem padrão usando a API Batch, use o método jobs.create
.
Por exemplo, para criar um job de contêiner com uma GPU, faça a seguinte solicitação:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1",
"volumes": [
"/var/lib/nvidia/lib64:/usr/local/nvidia/lib64",
"/var/lib/nvidia/bin:/usr/local/nvidia/bin"
],
"options": "--privileged"
}
}
],
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"machineType": "MACHINE_TYPE",
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
Substitua:
PROJECT_ID
: o ID do projeto.INSTALL_GPU_DRIVERS
: opcional. Quando definido comotrue
, o Batch busca os drivers necessários para o tipo de GPU que você especifica no campopolicy
a partir 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 drivers de GPU manualmente para usar qualquer GPU para esse job.MACHINE_TYPE
: o tipo de máquina, que pode ser predefinido ou personalizado, para as VMs do job. O tipo de máquina restringe o tipo de GPU que pode ser usado. Para criar um job com uma GPU, este campo é obrigatório.GPU_TYPE
: o tipo de GPU. É possível ver uma lista dos tipos de GPU disponíveis usando o comandogcloud compute accelerator-types list
. Para criar um job com uma GPU, este campo é obrigatório.GPU_COUNT
: o número de GPUs do tipo especificado no campotype
. Para criar um job com uma GPU, este campo é obrigatório.ALLOWED_LOCATIONS
: opcional. Os locais em que as instâncias de VM do job podem ser executadas (por exemplo,regions/us-central1, zones/us-central1-a
permite a zonaus-central1-a
). Se você especificar um local permitido, selecione a região e, opcionalmente, uma ou mais zonas. Os locais escolhidos precisam ter o tipo de GPU desejado para esse job. Para mais informações, consulte o campo de matrizallowedLocations
.
Adicionar uma GPU a um job de script
Para criar um job de script com uma GPU que use a imagem padrão usando a API em lote, use o método jobs.create
.
Por exemplo, para criar um job de script com uma GPU, faça a seguinte solicitação:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu
{
"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",
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
Substitua:
PROJECT_ID
: o ID do projeto.INSTALL_GPU_DRIVERS
: opcional. Quando definido comotrue
, o Batch busca os drivers necessários para o tipo de GPU que você especifica no campopolicy
a partir 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 drivers de GPU manualmente para usar qualquer GPU para esse job.MACHINE_TYPE
: o tipo de máquina, que pode ser predefinido ou personalizado, para as VMs do job. O tipo de máquina restringe o tipo de GPU que pode ser usado. Para criar um job com uma GPU, este campo é obrigatório.GPU_TYPE
: o tipo de GPU. É possível ver uma lista dos tipos de GPU disponíveis usando o comandogcloud compute accelerator-types list
. Para criar um job com uma GPU, este campo é obrigatório.GPU_COUNT
: o número de GPUs do tipo especificado no campotype
. Para criar um job com uma GPU, este campo é obrigatório.ALLOWED_LOCATIONS
: opcional. Os locais em que as instâncias de VM do job podem ser executadas (por exemplo,regions/us-central1, zones/us-central1-a
permite a zonaus-central1-a
). Se você especificar um local permitido, selecione a região e, opcionalmente, uma ou mais zonas. Os locais escolhidos precisam ter o tipo de GPU desejado para esse job. Para mais informações, consulte o campo de matrizallowedLocations
.
Adicionar uma GPU a um contêiner e um job de script
Para criar um job de contêiner e script com uma GPU que usa a imagem padrão usando a API Batch, use o método jobs.create
.
Por exemplo, para criar um job de contêiner e script com uma GPU, faça a seguinte solicitação:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1",
"options": "--gpus all"
}
},
{
"script": {
"text": "echo Hello world from script task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"machineType": "MACHINE_TYPE",
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
Substitua:
PROJECT_ID
: o ID do projeto.INSTALL_GPU_DRIVERS
: opcional. Quando definido comotrue
, o Batch busca os drivers necessários para o tipo de GPU que você especifica no campopolicy
a partir 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 drivers de GPU manualmente para usar qualquer GPU para esse job.MACHINE_TYPE
: o tipo de máquina, que pode ser predefinido ou personalizado, para as VMs do job. O tipo de máquina restringe o tipo de GPU que pode ser usado. Para criar um job com uma GPU, este campo é obrigatório.GPU_TYPE
: o tipo de GPU. É possível ver uma lista dos tipos de GPU disponíveis usando o comandogcloud compute accelerator-types list
. Para criar um job com uma GPU, este campo é obrigatório.GPU_COUNT
: o número de GPUs do tipo especificado no campotype
. Para criar um job com uma GPU, este campo é obrigatório.ALLOWED_LOCATIONS
: opcional. Os locais em que as instâncias de VM do job podem ser executadas (por exemplo,regions/us-central1, zones/us-central1-a
permite a zonaus-central1-a
). Se você especificar um local permitido, selecione a região e, opcionalmente, uma ou mais zonas. Os locais escolhidos precisam ter o tipo de GPU desejado para esse job. Para mais informações, consulte o campo de matrizallowedLocations
.
A seguir
- Se você tiver problemas para criar ou executar um job, consulte Solução de problemas.
- Visualizar jobs e tarefas.
- Saiba mais sobre as opções de criação de jobs.