Crie e execute uma tarefa que use GPUs

Este documento explica como criar e executar uma tarefa que usa uma unidade de processamento de gráficos (GPU). Para saber mais acerca das funcionalidades e das restrições das GPUs, consulte o artigo Acerca das GPUs na documentação do Compute Engine.

Quando cria um trabalho em lote, pode usar opcionalmente GPUs para acelerar cargas de trabalho específicas. Os exemplos de utilização comuns para tarefas que usam GPUs incluem o tratamento de dados intensivo e cargas de trabalho de inteligência artificial (IA), como a aprendizagem automática (AA).

Antes de começar

  1. Se nunca usou o Batch, reveja o artigo Comece a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e utilizadores.
  2. Para receber as autorizações de que precisa para criar uma tarefa, peça ao seu administrador para lhe conceder as seguintes funções de IAM:

    Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Crie uma tarefa que use GPUs

Para criar uma tarefa que use GPUs, faça o seguinte:

  1. Planeie os requisitos para uma tarefa que usa GPUs.
  2. Crie uma tarefa com os requisitos e os métodos que identificou. Para ver exemplos de como criar uma tarefa com as opções recomendadas, consulte o artigo Crie uma tarefa de exemplo que use GPUs neste documento.

Planeie os requisitos para uma tarefa que use GPUs

Antes de criar uma tarefa que use GPUs, planeie os requisitos da tarefa, conforme explicado nas secções seguintes:

  1. Selecione o tipo de máquina com GPU e a opção de consumo
  2. Instale os controladores da GPU
  3. Defina recursos de VM compatíveis

Passo 1: selecione o tipo de máquina com GPU e a opção de consumo

Os requisitos de uma tarefa variam consoante o tipo de máquina GPU preferencial e a opção de consumo, e as opções para cada um podem ser interdependentes.

Para selecionar o tipo de máquina de GPU e a opção de consumo para a sua tarefa, conclua os seguintes passos:

  1. Identifique e selecione a sua prioridade:

  2. Faça a seleção restante com base no que é compatível com a sua primeira seleção.

    1. Para identificar as opções compatíveis com a sua primeira seleção, consulte Disponibilidade da opção de consumo por tipo de máquina na documentação do Compute Engine.

    2. Consulte a secção restante para Selecionar a opção de consumo ou Selecionar o tipo de máquina de GPU, respetivamente.

Selecione o tipo de máquina com GPU

Para selecionar o tipo de máquina de GPU para uma tarefa e compreender os respetivos requisitos, conclua os seguintes passos:

  1. Selecione um tipo de máquina com GPU: para rever os tipos de máquinas com 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 respetivos exemplos de utilização recomendados, consulte os tipos de máquinas com GPU e a família de máquinas otimizadas para aceleradores na documentação do Compute Engine.

  2. Compreenda os requisitos do trabalho para o seu tipo de máquina com GPU: Os campos necessários para um trabalho especificar um tipo de máquina com GPU variam consoante as categorias na tabela seguinte:

    Tipos de máquinas com GPU e os respetivos requisitos de tarefas

    GPUs para VMs otimizadas para aceleradores: as VMs com um tipo de máquina da família de máquinas otimizadas para aceleradores têm um tipo e um número específicos destas GPUs anexados automaticamente.

    Para usar GPUs para VMs otimizadas para aceleradores, recomendamos que especifique o tipo de máquina. Cada tipo de máquina otimizada para aceleradores suporta apenas um tipo e um número específicos de GPUs, pelo que é funcionalmente equivalente especificar ou não esses valores, além do tipo de máquina otimizada para aceleradores.

    Especificamente, o Batch também suporta a especificação apenas do tipo e do número de GPUs para VMs otimizadas para aceleradores, mas as opções de vCPU e memória resultantes são frequentemente muito limitadas. Como tal, recomendamos que verifique se as opções de memória e vCPU disponíveis são compatíveis com os requisitos das tarefas do trabalho.

    GPUs para VMs N1: estas GPUs requerem que especifique o tipo e a quantidade a associar a cada VM e têm de ser associadas a VMs com um tipo de máquina da série de máquinas N1.

    Para usar GPUs para VMs N1, recomendamos que especifique, pelo menos, o tipo de GPUs e o número de GPUs. Certifique-se de que a combinação de valores corresponde a uma das opções de GPU válidas para os tipos de máquinas N1. As opções de vCPU e memória para VMs N1 que usam qualquer tipo específico e número de GPUs são bastante flexíveis. A menos que crie a tarefa através da Google Cloud consola, pode permitir que o Batch selecione automaticamente um tipo de máquina que cumpra os requisitos da tarefa.

Selecione a opção de consumo

Esta secção resume como selecionar a opção de consumo para uma tarefa e os requisitos da tarefa para cada opção.

As opções de consumo disponíveis para o processamento em lote e os respetivos requisitos são explicados na tabela seguinte, que os apresenta com base nos respetivos exemplos de utilização: da disponibilidade de recursos aproximadamente mais elevada para a mais baixa.

Em resumo, recomendamos que a maioria dos utilizadores selecione a opção de consumo para uma tarefa da seguinte forma:

  • A menos que uma das outras condições seja verdadeira, use VMs de início flexível (Pré-visualização) (preferencial, se cumprir os seus requisitos) ou a pedido.
  • Se o seu trabalho exigir uma garantia muito elevada da disponibilidade de recursos ou se tiver reservas não usadas que não consegue eliminar, use reservas no modo de calendário (pré-visualização) (preferencial, se cumprir os seus requisitos) ou reservas.
  • (Opcional) Se a sua carga de trabalho tiver uma tolerância a falhas muito elevada, pode conseguir reduzir os custos tentando usar VMs do Spot.
Opções de consumo e os respetivos requisitos de trabalho

Reservas

  • Exemplo de utilização: recomendamos as reservas para tarefas se quiser um nível de garantia muito elevado da disponibilidade de recursos e não puder usar reservas no modo de calendário ou se já tiver reservas existentes que podem não ser usadas.

  • Detalhes: depois de criar uma reserva, incorre nos custos das VMs especificadas ao mesmo preço que a execução das VMs até eliminar a reserva. As VMs que consomem uma reserva não incorrem em custos separados, mas as reservas incorrem em custos independentemente do consumo.

    Saiba mais acerca das reservas na documentação do Compute Engine.

O Batch usa reservas para tarefas que podem consumir VMs reservadas não usadas. Para mais informações sobre os requisitos do trabalho para consumir reservas, consulte a página Garanta a disponibilidade de recursos através de reservas de VMs.

Reservas no modo de calendário (pré-visualização)

  • Exemplo de utilização: recomendamos reservas no modo de calendário para tarefas se quiser usar um tipo de máquina de GPU que suporte reservas no modo de calendário e precisar de um nível de garantia muito elevado de disponibilidade de recursos durante, pelo menos, 1 dia e até 90 dias.

  • Detalhes: antes de criar uma tarefa, tem de pedir ou identificar uma reserva no modo de calendário que possa usar. Se o Compute Engine satisfizer um pedido de reserva futuro no modo de calendário, a reserva no modo de calendário criada automaticamente incorre no mesmo custo que a execução das VMs especificadas durante todo o período de reserva ao preço do Dynamic Workload Scheduler, que oferece descontos até 53% em relação ao preço a pedido. Depois de identificar uma reserva no modo de calendário criada automaticamente que pode usar, criar uma tarefa que consuma uma reserva no modo de calendário é muito semelhante a criar uma tarefa que consuma uma reserva.

    Saiba mais sobre as reservas no modo de calendário na documentação do Compute Engine.

O Batch usa reservas no modo de calendário para tarefas que fazem tudo o seguinte:

VMs de início flexível (pré-visualização)

  • Exemplo de utilização: recomendamos as VMs de início flexível se a sua tarefa puder suportar a disponibilidade de melhor esforço em troca de preços com desconto e até 7 dias para terminar a execução.

    Em comparação com as VMs a pedido e as VMs Spot, as VMs de início flexível podem facilitar o acesso simultâneo a muitos recursos de GPU. Por exemplo, as VMs de início flexível podem ser úteis para o agendamento de tarefas, uma vez que mitigam os atrasos ou os problemas causados pela indisponibilidade de recursos.

  • Detalhes: se um pedido de criação de uma tarefa que usa VMs de início flexível for cumprido, as VMs são cobradas ao preço do Dynamic Workload Scheduler, que oferece descontos até 53% do preço a pedido.

    Saiba mais sobre as VMs de início flexível na documentação do Compute Engine.

O Batch usa VMs de início flexível para tarefas que fazem tudo o seguinte:

A pedido

  • Exemplo de utilização: recomendamos que use a opção a pedido para a maioria dos outros trabalhos por predefinição.1

  • Detalhes: normalmente, o acesso a pedido é a forma predefinida de aceder às VMs do Compute Engine. O acesso a pedido permite-lhe aceder a recursos (se disponíveis) quando solicitado. Os recursos são eliminados até que a tarefa termine ou o limite de tempo de execução seja atingido.

Por predefinição, o Batch usa a opção a pedido para a maioria das outras tarefas. Se quiser garantir que uma tarefa usa a opção a pedido, faça o seguinte:1

1Exceção: para trabalhos que usam a série de máquinas A3, o comportamento predefinido é único e recomendamos que não use a opção a pedido e não deixe o campo provisioningModel indefinido. Em alternativa, use os requisitos de trabalho para VMs de início flexível. A utilização de recursos a pedido não é recomendada para a série de máquinas A3 devido à baixa disponibilidade de recursos. Consequentemente, se uma tarefa usar a série de máquinas A3, bloquear reservas e tiver o campo provisioningModel indefinido ou definido como STANDARD, a opção de consumo predefinida é única. O comportamento é semelhante às VMs de início flexível, que limitam o tempo de execução a 7 dias. No entanto, não é recomendado porque estas tarefas não recebem descontos dos preços do Dynamic Workload Scheduler. Se a sua tarefa com VMs A3 puder tolerar um limite de tempo de execução de 7 dias, recomendamos que use VMs de início flexível em vez de VMs a pedido. Caso contrário, não pode garantir que as tarefas com VMs A3 usam a pedido, a menos que defina provisioningModel como STANDARD e verifique manualmente se a tarefa não pode consumir reservas, sem definir o campo reservation como NO_RESERVATION.

VMs do Spot

  • Exemplo de utilização: recomendamos que tente usar VMs do Spot para reduzir os custos das cargas de trabalho com tolerância a falhas.

  • Detalhes: se um pedido de criação de uma tarefa que usa VMs do Spot for cumprido, as VMs são cobradas ao preço das VMs do Spot, que pode mudar frequentemente e pode oferecer o maior desconto, até 91% do preço a pedido. No entanto, as VMs de capacidade instantânea podem nem sempre estar disponíveis e podem ser anuladas em qualquer altura.

    Saiba mais sobre as VMs Spot na documentação do Compute Engine.

O Batch usa VMs do Spot para tarefas que cumprem todas as seguintes condições:

  • Defina o campo provisioningModel como SPOT.
  • (Opcional) Bloqueie reservas. Não pode usar VMs do Spot com reservas. Especificamente, a tarefa pode, opcionalmente, definir o campo reservation como NO_RESERVATION. Para mais informações, consulte o artigo Crie e execute uma tarefa que não possa consumir VMs reservadas.

Passo 2: instale os controladores da GPU

Para usar GPUs num trabalho, tem de instalar os controladores de GPU. Para instalar controladores de GPU, selecione um dos seguintes métodos:

Passo 3: defina recursos de VM compatíveis

Para saber mais sobre os requisitos e as opções para definir os recursos de VM para uma tarefa, consulte o artigo Recursos de tarefas.

Em resumo, tem de fazer o seguinte quando definir os recursos de VM para uma tarefa que usa GPUs:

  • Certifique-se de que o tipo de máquina de GPU está disponível na localização das VMs da sua tarefa.

    Para saber onde os tipos de máquinas com GPU estão disponíveis, consulte a secção Disponibilidade de aceleradores na documentação do Compute Engine.

  • Se especificar o tipo de máquina do trabalho, certifique-se de que esse tipo de máquina tem vCPUs e memória suficientes para os requisitos das tarefas do trabalho. A especificação do tipo de máquina da tarefa é obrigatória sempre que cria uma tarefa através da Google Cloud consola e é recomendada sempre que cria uma tarefa que usa GPUs para VMs otimizadas para aceleradores.

  • Certifique-se de que define os recursos da VM para uma tarefa através de um método válido:

    • Defina os recursos da VM diretamente através do campo instances[].policy (recomendado, se possível). Este método é apresentado nos exemplos.
    • Defina os recursos de VM através de um modelo com o campo instances[].instanceTemplate. Este método é necessário para instalar manualmente controladores de GPU através de uma imagem personalizada. Para mais informações, consulte o artigo Defina recursos de tarefas com um modelo de instância de VM.

Crie um exemplo de tarefa que use GPUs

As secções seguintes explicam como criar uma tarefa de exemplo para cada opção de consumo. Especificamente, os trabalhos de exemplo usam as opções recomendadas: todos instalam automaticamente os controladores de GPU e todos definem diretamente os recursos de VM.

Opção de consumo Exemplo de instruções de trabalho
Reservas ou reservas no modo de calendário (pré-visualização)

Garanta a disponibilidade de recursos através de reservas de VMs

VMs de início flexível (pré-visualização)

Use GPUs e VMs de início flexível

VMs a pedido ou VMs do Spot

Selecione uma das seguintes opções com base no tipo de máquina de GPU:

Use GPUs e VMs de arranque flexível

Pode criar uma tarefa que use GPUs para VMs A3 através do programador de cargas de trabalho dinâmicas com a CLI gcloud ou a API Batch.

gcloud

  1. Crie um ficheiro JSON que instale controladores de GPU, especifique um tipo de máquina de GPU que suporte VMs de início flexível, bloqueie reservas e seja executado numa localização que suporte o tipo de máquina de GPU.

    Por exemplo, para criar uma tarefa de script básica que use VMs de início flexível e GPUs para VMs otimizadas para aceleradores, crie um ficheiro 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": {
                        "provisioningModel":"FLEX_START",
                        "machineType": "MACHINE_TYPE",
                        "reservation": "NO_RESERVATION"
                    }
                }
            ],
            "location": {
                "allowedLocations": [
                    "ALLOWED_LOCATIONS"
                ]
            }
        },
        "logsPolicy": {
            "destination": "CLOUD_LOGGING"
        }
    }
    

    Substitua o seguinte:

    • INSTALL_GPU_DRIVERS: quando definido como true, o comando Batch obtém os controladores necessários para o tipo de GPU especificado no campo policy de uma localização de terceiros e instala-os em seu nome. Se definir este campo como false (predefinição), tem de instalar manualmente os controladores da GPU para usar GPUs para esta tarefa.

    • MACHINE_TYPE: um tipo de máquina de GPU que suporta VMs de início flexível. Para mais informações, consulte o artigo Disponibilidade da opção de consumo por tipo de máquina na documentação do Compute Engine.

    • ALLOWED_LOCATIONS: opcionalmente, pode usar o allowedLocations[] campo para especificar uma região ou zonas específicas numa região onde as VMs para a sua tarefa podem ser executadas. Por exemplo, regions/us-central1 permite todas as zonas na região us-central1. Certifique-se de que especifica localizações que oferecem o tipo de máquina com GPU que quer para esta tarefa. Caso contrário, se omitir este campo, certifique-se de que a localização da tarefa oferece o tipo de máquina de GPU.

  2. Para criar e executar a tarefa, use o comando gcloud alpha batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

    Substitua o seguinte:

    • JOB_NAME: o nome da tarefa.

    • LOCATION: a localização do trabalho.

    • JSON_CONFIGURATION_FILE: o caminho para um ficheiro JSON com os detalhes de configuração da tarefa.

API

Faça um pedido POST ao método v1alpha jobs.create que instala controladores de GPU, especifica um tipo de máquina de GPU que suporta VMs de início flexível, bloqueia reservas e é executado numa localização que suporta o tipo de máquina de GPU.

Por exemplo, para criar uma tarefa de script básica que use VMs de início flexível e GPUs para VMs otimizadas para aceleradores, faça o seguinte pedido:

POST https://batch.googleapis.com/v1alpha/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": {
                    "provisioningModel":"FLEX_START",
                    "machineType": "MACHINE_TYPE",
                    "reservation": "NO_RESERVATION"
                }
            }
        ],
        "location": {
            "allowedLocations": [
                "ALLOWED_LOCATIONS"
            ]
        }
    },
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto do seu projeto.

  • LOCATION: a localização do trabalho.

  • JOB_NAME: o nome da tarefa.

  • INSTALL_GPU_DRIVERS: quando definido como true, o lote obtém os controladores necessários para o tipo de GPU que especificar no campo policy de uma localização de terceiros e instala-os em seu nome. Se definir este campo como false (predefinição), tem de instalar manualmente os controladores da GPU para usar GPUs para esta tarefa.

  • MACHINE_TYPE: um tipo de máquina de GPU que suporta VMs de início flexível. Para mais informações, consulte a secção Disponibilidade da opção de consumo por tipo de máquina na documentação do Compute Engine.

  • ALLOWED_LOCATIONS: opcionalmente, pode usar o allowedLocations[] campo para especificar uma região ou zonas específicas numa região onde as VMs para a sua tarefa podem ser executadas. Por exemplo, regions/us-central1 permite todas as zonas na região us-central1. Certifique-se de que especifica localizações que oferecem o tipo de máquina com GPU que quer para esta tarefa. Caso contrário, se omitir este campo, certifique-se de que a localização do trabalho oferece o tipo de máquina de GPU.

Use GPUs para VMs otimizadas pelo acelerador

Pode criar uma tarefa que use GPUs para VMs otimizadas para aceleradores através da Google Cloud consola, da CLI gcloud, da API Batch, do Java, do Node.js ou do Python.

Consola

Para criar uma tarefa que use GPUs através da Google Cloud consola, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Lista de tarefas.

    Aceda à lista de empregos

  2. Clique em Criar. É apresentada a página Criar tarefa em lote. No painel do lado esquerdo, a página Detalhes da tarefa está selecionada.

  3. Configure a página Detalhes da tarefa:

    1. Opcional: no campo Nome da tarefa, personalize o nome da tarefa.

      Por exemplo, introduza example-gpu-job.

    2. Configure a secção Detalhes da tarefa:

      1. Na janela Novo executável, adicione, pelo menos, um script ou um contentor para que esta tarefa seja executada.

        Por exemplo, para criar uma tarefa de script básica, faça o seguinte:

        1. Selecione a caixa de verificação Script. É apresentado um campo.

        2. No campo, introduza o seguinte guião:

          echo Hello world from task ${BATCH_TASK_INDEX}.
          
        3. Clique em Concluído.

      2. No campo Número de tarefas, introduza o número de tarefas para este trabalho.

        Por exemplo, introduza 3.

      3. Opcional: no campo Paralelismo, introduza o número de tarefas a executar em simultâneo.

        Por exemplo, introduza 1 (predefinição).

  4. Configure a página Especificações de recursos:

    1. No painel esquerdo, clique em Especificações de recursos. É apresentada a página Especificações de recursos.

    2. Na secção Modelo de aprovisionamento de VMs, selecione uma das seguintes opções para a opção de consumo para as VMs desta tarefa:

      • Se a sua tarefa puder suportar a preempção e quiser VMs do Spot com desconto, selecione Spot.

      • Caso contrário, para usar VMs a pedido, selecione Padrão (predefinição).

    3. Selecione a localização para este trabalho.

      1. No campo Região, selecione uma região.

      2. No campo Zona, faça uma das seguintes ações:

        • Se quiser restringir a execução desta tarefa apenas a uma zona específica, selecione uma zona.

        • Caso contrário, selecione qualquer (predefinição).

    4. Selecione o tipo de máquina de GPU para as VMs deste trabalho:

      1. Nas opções da família de máquinas, clique em GPUs.

      2. No campo Tipo de GPU, selecione o tipo de GPUs. Em seguida, no campo Número de GPUs, selecione o número de GPUs para cada VM.

        Se selecionou um dos tipos de GPU para VMs otimizadas para aceleradores, o campo Tipo de máquina só permite uma opção para o tipo de máquina com base no tipo e no número de GPUs que selecionou.

      3. Para instalar automaticamente os controladores da GPU, selecione Instalação do controlador da GPU (predefinição).

    5. Configure a quantidade de recursos de VM necessários para cada tarefa:

      1. No campo Núcleos, introduza a quantidade de vCPUs por tarefa.

        Por exemplo, introduza 1 (predefinição).

      2. No campo Memória, introduza a quantidade de RAM em GB por tarefa.

        Por exemplo, introduza 0.5 (predefinição).

    6. Clique em Concluído.

  5. Opcional: configure os outros campos desta tarefa.

  6. Opcional: para rever a configuração da tarefa, no painel esquerdo, clique em Pré-visualizar.

  7. Clique em Criar.

    A página Detalhes do trabalho apresenta o trabalho que criou.

gcloud

  1. Crie um ficheiro JSON que instale controladores de GPU, especifique um tipo de máquina da família de máquinas otimizadas para aceleradores e seja executado numa localização que tenha o tipo de máquina de GPU.

    Por exemplo, para criar uma tarefa de script básica que use GPUs para VMs otimizadas para aceleradores, crie um ficheiro 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": {
                        "provisioningModel": "PROVISIONING_MODEL",
                        "machineType": "MACHINE_TYPE",
                        "reservation": "NO_RESERVATION"
                    }
                }
            ],
            "location": {
                "allowedLocations": [
                    "ALLOWED_LOCATIONS"
                ]
            }
        },
        "logsPolicy": {
            "destination": "CLOUD_LOGGING"
        }
    }
    

    Substitua o seguinte:

    • INSTALL_GPU_DRIVERS: quando definido como true, o lote obtém os controladores necessários para o tipo de GPU que especificar no campo policy de uma localização de terceiros e instala-os em seu nome. Se definir este campo como false (predefinição), tem de instalar manualmente os controladores da GPU para usar GPUs para esta tarefa.

    • PROVISIONING_MODEL: o modelo de aprovisionamento para a sua opção de consumo: STANDARD para VMs a pedido ou SPOT para VMs do Spot.

    • MACHINE_TYPE: um tipo de máquina da família de máquinas otimizadas para aceleradores.

    • ALLOWED_LOCATIONS: opcionalmente, pode usar o allowedLocations[] campo para especificar uma região ou zonas específicas numa região onde as VMs para a sua tarefa podem ser executadas. Por exemplo, regions/us-central1 permite todas as zonas na região us-central1. Certifique-se de que especifica localizações que oferecem o tipo de máquina com GPU que quer para esta tarefa. Caso contrário, se omitir este campo, certifique-se de que a localização do trabalho oferece o tipo de máquina de GPU.

  2. Para criar e executar a tarefa, use o comando gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

    Substitua o seguinte:

    • JOB_NAME: o nome da tarefa.

    • LOCATION: a localização do trabalho.

    • JSON_CONFIGURATION_FILE: o caminho para um ficheiro JSON com os detalhes de configuração da tarefa.

API

Faça um pedido POST ao método jobs.create que instala controladores de GPU, especifica um tipo de máquina da família de máquinas otimizadas para aceleradores e é executado numa localização que tem o tipo de máquina de GPU.

Por exemplo, para criar uma tarefa de script básica que use GPUs para VMs otimizadas para aceleradores, faça o seguinte pedido:

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": {
                    "provisioningModel": "PROVISIONING_MODEL",
                    "machineType": "MACHINE_TYPE",
                    "reservation": "NO_RESERVATION"
                }
            }
        ],
        "location": {
            "allowedLocations": [
                "ALLOWED_LOCATIONS"
            ]
        }
    },
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto do seu projeto.

  • LOCATION: a localização do trabalho.

  • JOB_NAME: o nome da tarefa.

  • INSTALL_GPU_DRIVERS: quando definido como true, o comando Batch obtém os controladores necessários para o tipo de GPU especificado no campo policy de uma localização de terceiros e instala-os em seu nome. Se definir este campo como false (predefinição), tem de instalar manualmente os controladores da GPU para usar quaisquer GPUs para esta tarefa.

  • PROVISIONING_MODEL: o modelo de aprovisionamento para a sua opção de consumo: STANDARD para VMs a pedido ou SPOT para VMs do Spot.

  • MACHINE_TYPE: um tipo de máquina da família de máquinas otimizadas para aceleradores.

  • ALLOWED_LOCATIONS: opcionalmente, pode usar o allowedLocations[] campo para especificar uma região ou zonas específicas numa região onde as VMs para a sua tarefa podem ser executadas. Por exemplo, regions/us-central1 permite todas as zonas na região us-central1. Certifique-se de que especifica localizações que oferecem o tipo de máquina com GPU que quer para esta tarefa. Caso contrário, se omitir este campo, certifique-se de que a localização da tarefa oferece o tipo de máquina de GPU.

Java


import com.google.cloud.batch.v1.AllocationPolicy;
import com.google.cloud.batch.v1.AllocationPolicy.Accelerator;
import com.google.cloud.batch.v1.AllocationPolicy.InstancePolicy;
import com.google.cloud.batch.v1.AllocationPolicy.InstancePolicyOrTemplate;
import com.google.cloud.batch.v1.BatchServiceClient;
import com.google.cloud.batch.v1.CreateJobRequest;
import com.google.cloud.batch.v1.Job;
import com.google.cloud.batch.v1.LogsPolicy;
import com.google.cloud.batch.v1.Runnable;
import com.google.cloud.batch.v1.Runnable.Script;
import com.google.cloud.batch.v1.TaskGroup;
import com.google.cloud.batch.v1.TaskSpec;
import com.google.protobuf.Duration;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateGpuJob {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to use.
    String projectId = "YOUR_PROJECT_ID";
    // Name of the region you want to use to run the job. Regions that are
    // available for Batch are listed on: https://cloud.google.com/batch/docs/get-started#locations
    String region = "europe-central2";
    // The name of the job that will be created.
    // It needs to be unique for each project and region pair.
    String jobName = "JOB_NAME";
    // Optional. When set to true, Batch fetches the drivers required for the GPU type
    // that you specify in the policy field from a third-party location,
    // and Batch installs them on your behalf. If you set this field to false (default),
    // you need to install GPU drivers manually to use any GPUs for this job.
    boolean installGpuDrivers = false;
    // Accelerator-optimized machine types are available to Batch jobs. See the list
    // of available types on: https://cloud.google.com/compute/docs/accelerator-optimized-machines
    String machineType = "g2-standard-4";

    createGpuJob(projectId, region, jobName, installGpuDrivers, machineType);
  }

  // Create a job that uses GPUs
  public static Job createGpuJob(String projectId, String region, String jobName,
                                  boolean installGpuDrivers, String machineType)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (BatchServiceClient batchServiceClient = BatchServiceClient.create()) {
      // Define what will be done as part of the job.
      Runnable runnable =
          Runnable.newBuilder()
              .setScript(
                  Script.newBuilder()
                      .setText(
                          "echo Hello world! This is task ${BATCH_TASK_INDEX}. "
                                  + "This job has a total of ${BATCH_TASK_COUNT} tasks.")
                      // You can also run a script from a file. Just remember, that needs to be a
                      // script that's already on the VM that will be running the job.
                      // Using setText() and setPath() is mutually exclusive.
                      // .setPath("/tmp/test.sh")
                      .build())
              .build();

      TaskSpec task = TaskSpec.newBuilder()
                  // Jobs can be divided into tasks. In this case, we have only one task.
                  .addRunnables(runnable)
                  .setMaxRetryCount(2)
                  .setMaxRunDuration(Duration.newBuilder().setSeconds(3600).build())
                  .build();

      // Tasks are grouped inside a job using TaskGroups.
      // Currently, it's possible to have only one task group.
      TaskGroup taskGroup = TaskGroup.newBuilder()
          .setTaskCount(3)
          .setParallelism(1)
          .setTaskSpec(task)
          .build();

      // Policies are used to define on what kind of virtual machines the tasks will run.
      // Read more about machine types here: https://cloud.google.com/compute/docs/machine-types
      InstancePolicy instancePolicy =
          InstancePolicy.newBuilder().setMachineType(machineType).build();  

      // Policies are used to define on what kind of virtual machines the tasks will run on.
      AllocationPolicy allocationPolicy =
          AllocationPolicy.newBuilder()
              .addInstances(
                  InstancePolicyOrTemplate.newBuilder()
                      .setInstallGpuDrivers(installGpuDrivers)
                      .setPolicy(instancePolicy)
                      .build())
              .build();

      Job job =
          Job.newBuilder()
              .addTaskGroups(taskGroup)
              .setAllocationPolicy(allocationPolicy)
              .putLabels("env", "testing")
              .putLabels("type", "script")
              // We use Cloud Logging as it's an out of the box available option.
              .setLogsPolicy(
                  LogsPolicy.newBuilder().setDestination(LogsPolicy.Destination.CLOUD_LOGGING))
              .build();

      CreateJobRequest createJobRequest =
          CreateJobRequest.newBuilder()
              // The job's parent is the region in which the job will run.
              .setParent(String.format("projects/%s/locations/%s", projectId, region))
              .setJob(job)
              .setJobId(jobName)
              .build();

      Job result =
          batchServiceClient
              .createJobCallable()
              .futureCall(createJobRequest)
              .get(5, TimeUnit.MINUTES);

      System.out.printf("Successfully created the job: %s", result.getName());

      return result;
    }
  }
}

Node.js

// Imports the Batch library
const batchLib = require('@google-cloud/batch');
const batch = batchLib.protos.google.cloud.batch.v1;

// Instantiates a client
const batchClient = new batchLib.v1.BatchServiceClient();

/**
 * TODO(developer): Update these variables before running the sample.
 */
// Project ID or project number of the Google Cloud project you want to use.
const projectId = await batchClient.getProjectId();
// Name of the region you want to use to run the job. Regions that are
// available for Batch are listed on: https://cloud.google.com/batch/docs/get-started#locations
const region = 'europe-central2';
// The name of the job that will be created.
// It needs to be unique for each project and region pair.
const jobName = 'batch-gpu-job';
// The GPU type. You can view a list of the available GPU types
// by using the `gcloud compute accelerator-types list` command.
const gpuType = 'nvidia-l4';
// The number of GPUs of the specified type.
const gpuCount = 1;
// Optional. When set to true, Batch fetches the drivers required for the GPU type
// that you specify in the policy field from a third-party location,
// and Batch installs them on your behalf. If you set this field to false (default),
// you need to install GPU drivers manually to use any GPUs for this job.
const installGpuDrivers = false;
// Accelerator-optimized machine types are available to Batch jobs. See the list
// of available types on: https://cloud.google.com/compute/docs/accelerator-optimized-machines
const machineType = 'g2-standard-4';

// Define what will be done as part of the job.
const runnable = new batch.Runnable({
  script: new batch.Runnable.Script({
    commands: ['-c', 'echo Hello world! This is task ${BATCH_TASK_INDEX}.'],
  }),
});

const task = new batch.TaskSpec({
  runnables: [runnable],
  maxRetryCount: 2,
  maxRunDuration: {seconds: 3600},
});

// Tasks are grouped inside a job using TaskGroups.
const group = new batch.TaskGroup({
  taskCount: 3,
  taskSpec: task,
});

// Policies are used to define on what kind of virtual machines the tasks will run on.
// In this case, we tell the system to use "g2-standard-4" machine type.
// Read more about machine types here: https://cloud.google.com/compute/docs/machine-types
const instancePolicy = new batch.AllocationPolicy.InstancePolicy({
  machineType,
  // Accelerator describes Compute Engine accelerators to be attached to the VM
  accelerators: [
    new batch.AllocationPolicy.Accelerator({
      type: gpuType,
      count: gpuCount,
      installGpuDrivers,
    }),
  ],
});

const allocationPolicy = new batch.AllocationPolicy.InstancePolicyOrTemplate({
  instances: [{installGpuDrivers, policy: instancePolicy}],
});

const job = new batch.Job({
  name: jobName,
  taskGroups: [group],
  labels: {env: 'testing', type: 'script'},
  allocationPolicy,
  // We use Cloud Logging as it's an option available out of the box
  logsPolicy: new batch.LogsPolicy({
    destination: batch.LogsPolicy.Destination.CLOUD_LOGGING,
  }),
});
// The job's parent is the project and region in which the job will run
const parent = `projects/${projectId}/locations/${region}`;

async function callCreateBatchGPUJob() {
  // Construct request
  const request = {
    parent,
    jobId: jobName,
    job,
  };

  // Run request
  const [response] = await batchClient.createJob(request);
  console.log(JSON.stringify(response));
}

await callCreateBatchGPUJob();

Python

from google.cloud import batch_v1


def create_gpu_job(project_id: str, region: str, job_name: str) -> batch_v1.Job:
    """
    This method shows how to create a sample Batch Job that will run
    a simple command on Cloud Compute instances on GPU machines.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        region: name of the region you want to use to run the job. Regions that are
            available for Batch are listed on: https://cloud.google.com/batch/docs/get-started#locations
        job_name: the name of the job that will be created.
            It needs to be unique for each project and region pair.

    Returns:
        A job object representing the job created.
    """
    client = batch_v1.BatchServiceClient()

    # Define what will be done as part of the job.
    task = batch_v1.TaskSpec()
    runnable = batch_v1.Runnable()
    runnable.script = batch_v1.Runnable.Script()
    runnable.script.text = "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
    # You can also run a script from a file. Just remember, that needs to be a script that's
    # already on the VM that will be running the job. Using runnable.script.text and runnable.script.path is mutually
    # exclusive.
    # runnable.script.path = '/tmp/test.sh'
    task.runnables = [runnable]

    # We can specify what resources are requested by each task.
    resources = batch_v1.ComputeResource()
    resources.cpu_milli = 2000  # in milliseconds per cpu-second. This means the task requires 2 whole CPUs.
    resources.memory_mib = 16  # in MiB
    task.compute_resource = resources

    task.max_retry_count = 2
    task.max_run_duration = "3600s"

    # Tasks are grouped inside a job using TaskGroups.
    # Currently, it's possible to have only one task group.
    group = batch_v1.TaskGroup()
    group.task_count = 4
    group.task_spec = task

    # Policies are used to define on what kind of virtual machines the tasks will run on.
    # In this case, we tell the system to use "g2-standard-4" machine type.
    # Read more about machine types here: https://cloud.google.com/compute/docs/machine-types
    policy = batch_v1.AllocationPolicy.InstancePolicy()
    policy.machine_type = "g2-standard-4"

    instances = batch_v1.AllocationPolicy.InstancePolicyOrTemplate()
    instances.policy = policy
    instances.install_gpu_drivers = True
    allocation_policy = batch_v1.AllocationPolicy()
    allocation_policy.instances = [instances]

    job = batch_v1.Job()
    job.task_groups = [group]
    job.allocation_policy = allocation_policy
    job.labels = {"env": "testing", "type": "container"}
    # We use Cloud Logging as it's an out of the box available option
    job.logs_policy = batch_v1.LogsPolicy()
    job.logs_policy.destination = batch_v1.LogsPolicy.Destination.CLOUD_LOGGING

    create_request = batch_v1.CreateJobRequest()
    create_request.job = job
    create_request.job_id = job_name
    # The job's parent is the region in which the job will run
    create_request.parent = f"projects/{project_id}/locations/{region}"

    return client.create_job(create_request)

Use GPUs para VMs N1

Pode criar uma tarefa que use GPUs para VMs N1 através da Google Cloud consola, da CLI gcloud, da API Batch, do Java, do Node.js ou do Python.

Consola

Para criar uma tarefa que use GPUs através da Google Cloud consola, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Lista de tarefas.

    Aceda à lista de empregos

  2. Clique em Criar. É apresentada a página Criar tarefa em lote. No painel do lado esquerdo, a página Detalhes da tarefa está selecionada.

  3. Configure a página Detalhes da tarefa:

    1. Opcional: no campo Nome da tarefa, personalize o nome da tarefa.

      Por exemplo, introduza example-gpu-job.

    2. Configure a secção Detalhes da tarefa:

      1. Na janela Novo executável, adicione, pelo menos, um script ou um contentor para que esta tarefa seja executada.

        Por exemplo, para criar uma tarefa de script básica, faça o seguinte:

        1. Selecione a caixa de verificação Script. É apresentado um campo.

        2. No campo, introduza o seguinte guião:

          echo Hello world from task ${BATCH_TASK_INDEX}.
          
        3. Clique em Concluído.

      2. No campo Número de tarefas, introduza o número de tarefas para este trabalho.

        Por exemplo, introduza 3.

      3. Opcional: no campo Paralelismo, introduza o número de tarefas a executar em simultâneo.

        Por exemplo, introduza 1 (predefinição).

  4. Configure a página Especificações de recursos:

    1. No painel esquerdo, clique em Especificações de recursos. É apresentada a página Especificações de recursos.

    2. Na secção Modelo de aprovisionamento de VMs, selecione uma das seguintes opções para a opção de consumo para as VMs desta tarefa:

      • Se a sua tarefa puder suportar a preempção e quiser VMs do Spot com desconto, selecione Spot.

      • Caso contrário, para usar VMs a pedido, selecione Padrão (predefinição).

    3. Selecione a localização para este trabalho.

      1. No campo Região, selecione uma região.

      2. No campo Zona, faça uma das seguintes ações:

        • Se quiser restringir a execução desta tarefa apenas a uma zona específica, selecione uma zona.

        • Caso contrário, selecione qualquer (predefinição).

    4. Selecione o tipo de máquina com GPU para as VMs deste trabalho:

      1. Nas opções da família de máquinas, clique em GPUs.

      2. No campo Tipo de GPU, selecione o tipo de GPUs.

        Se selecionou um dos tipos de GPU para VMs N1, o campo Série é definido como N1.

      3. No campo Número de GPUs, selecione o número de GPUs para cada VM.

      4. No campo Tipo de máquina, selecione o tipo de máquina.

      5. Para instalar automaticamente os controladores da GPU, selecione Instalação do controlador da GPU (predefinição).

    5. Configure a quantidade de recursos de VM necessários para cada tarefa:

      1. No campo Núcleos, introduza a quantidade de vCPUs por tarefa.

        Por exemplo, introduza 1 (predefinição).

      2. No campo Memória, introduza a quantidade de RAM em GB por tarefa.

        Por exemplo, introduza 0.5 (predefinição).

    6. Clique em Concluído.

  5. Opcional: configure os outros campos desta tarefa.

  6. Opcional: para rever a configuração da tarefa, no painel esquerdo, clique em Pré-visualizar.

  7. Clique em Criar.

    A página Detalhes do trabalho apresenta o trabalho que criou.

gcloud

  1. Crie um ficheiro JSON que instale controladores de GPU, defina os subcampos type e count do campo accelerators[] e seja executado numa localização que tenha o tipo de máquina de GPU.

    Por exemplo, para criar uma tarefa de script básica que use GPUs para VMs N1 e permita que o Batch selecione o tipo de máquina N1 exato, crie um ficheiro 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": {
                        "provisioningModel": "PROVISIONING_MODEL",
                        "reservation": "NO_RESERVATION",
                        "accelerators": [
                            {
                                "type": "GPU_TYPE",
                                "count": GPU_COUNT
                            }
                        ]
                    }
                }
            ],
            "location": {
                "allowedLocations": [
                    "ALLOWED_LOCATIONS"
                ]
            }
        },
        "logsPolicy": {
            "destination": "CLOUD_LOGGING"
        }
    }
    

    Substitua o seguinte:

    • INSTALL_GPU_DRIVERS: quando definido como true, o lote obtém os controladores necessários para o tipo de GPU que especificar no campo policy de uma localização de terceiros e instala-os em seu nome. Se definir este campo como false (predefinição), tem de instalar manualmente os controladores da GPU para usar GPUs para esta tarefa.

    • PROVISIONING_MODEL: o modelo de aprovisionamento para a sua opção de consumo: STANDARD para VMs a pedido ou SPOT para VMs do Spot.

    • GPU_TYPE: o tipo de GPU. Pode ver uma lista dos tipos de GPU disponíveis através do comando gcloud 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 com GPU para a série de máquinas N1. Use este campo apenas para GPUs para VMs N1.

    • ALLOWED_LOCATIONS: opcionalmente, pode usar o allowedLocations[] campo para especificar uma região ou zonas específicas numa região onde as VMs para a sua tarefa podem ser executadas. Por exemplo, regions/us-central1 permite todas as zonas na região us-central1. Certifique-se de que especifica localizações que oferecem o tipo de máquina com GPU que quer para esta tarefa. Caso contrário, se omitir este campo, certifique-se de que a localização do trabalho oferece o tipo de máquina de GPU.

  2. Para criar e executar a tarefa, use o comando gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

    Substitua o seguinte:

    • JOB_NAME: o nome da tarefa.

    • LOCATION: a localização do trabalho.

    • JSON_CONFIGURATION_FILE: o caminho para um ficheiro JSON com os detalhes de configuração da tarefa.

API

Faça um pedido POST ao método jobs.create que instala controladores de GPU, define os subcampos type e count do campo accelerators[] e usa uma localização que tem o tipo de máquina de GPU.

Por exemplo, para criar uma tarefa de script básica que use GPUs para VMs N1 e permita que o Batch selecione o tipo de máquina N1 exato, faça o seguinte pedido:

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": {
                    "provisioningModel": "PROVISIONING_MODEL",
                    "reservation": "NO_RESERVATION",
                    "accelerators": [
                        {
                            "type": "GPU_TYPE",
                            "count": GPU_COUNT
                        }
                    ]
                }
            }
        ],
        "location": {
            "allowedLocations": [
                "ALLOWED_LOCATIONS"
            ]
        }
    },
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto do seu projeto.

  • LOCATION: a localização do trabalho.

  • JOB_NAME: o nome da tarefa.

  • INSTALL_GPU_DRIVERS: quando definido como true, o comando Batch obtém os controladores necessários para o tipo de GPU especificado no campo policy de uma localização de terceiros e instala-os em seu nome. Se definir este campo como false (predefinição), tem de instalar manualmente os controladores da GPU para usar GPUs para esta tarefa.

  • PROVISIONING_MODEL: o modelo de aprovisionamento para a sua opção de consumo: STANDARD para VMs a pedido ou SPOT para VMs do Spot.

  • GPU_TYPE: o tipo de GPU. Pode ver uma lista dos tipos de GPU disponíveis através do comando gcloud 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 com GPU para a série de máquinas N1. Use este campo apenas para GPUs para VMs N1.

  • ALLOWED_LOCATIONS: opcionalmente, pode usar o allowedLocations[] campo para especificar uma região ou zonas específicas numa região onde as VMs para a sua tarefa podem ser executadas. Por exemplo, regions/us-central1 permite todas as zonas na região us-central1. Certifique-se de que especifica localizações que oferecem o tipo de máquina com GPU que quer para esta tarefa. Caso contrário, se omitir este campo, certifique-se de que a localização da tarefa oferece o tipo de máquina de GPU.

Java


import com.google.cloud.batch.v1.AllocationPolicy;
import com.google.cloud.batch.v1.AllocationPolicy.Accelerator;
import com.google.cloud.batch.v1.AllocationPolicy.InstancePolicy;
import com.google.cloud.batch.v1.AllocationPolicy.InstancePolicyOrTemplate;
import com.google.cloud.batch.v1.BatchServiceClient;
import com.google.cloud.batch.v1.CreateJobRequest;
import com.google.cloud.batch.v1.Job;
import com.google.cloud.batch.v1.LogsPolicy;
import com.google.cloud.batch.v1.Runnable;
import com.google.cloud.batch.v1.Runnable.Script;
import com.google.cloud.batch.v1.TaskGroup;
import com.google.cloud.batch.v1.TaskSpec;
import com.google.protobuf.Duration;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateGpuJobN1 {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to use.
    String projectId = "YOUR_PROJECT_ID";
    // Name of the region you want to use to run the job. Regions that are
    // available for Batch are listed on: https://cloud.google.com/batch/docs/get-started#locations
    String region = "europe-central2";
    // The name of the job that will be created.
    // It needs to be unique for each project and region pair.
    String jobName = "JOB_NAME";
    // Optional. When set to true, Batch fetches the drivers required for the GPU type
    // that you specify in the policy field from a third-party location,
    // and Batch installs them on your behalf. If you set this field to false (default),
    // you need to install GPU drivers manually to use any GPUs for this job.
    boolean installGpuDrivers = false;
    // The GPU type. You can view a list of the available GPU types
    // by using the `gcloud compute accelerator-types list` command.
    String gpuType = "nvidia-tesla-t4";
    // The number of GPUs of the specified type.
    int gpuCount = 2;

    createGpuJob(projectId, region, jobName, installGpuDrivers, gpuType, gpuCount);
  }

  // Create a job that uses GPUs
  public static Job createGpuJob(String projectId, String region, String jobName,
                                  boolean installGpuDrivers, String gpuType, int gpuCount)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (BatchServiceClient batchServiceClient = BatchServiceClient.create()) {
      // Define what will be done as part of the job.
      Runnable runnable =
          Runnable.newBuilder()
              .setScript(
                  Script.newBuilder()
                      .setText(
                          "echo Hello world! This is task ${BATCH_TASK_INDEX}. "
                                  + "This job has a total of ${BATCH_TASK_COUNT} tasks.")
                      // You can also run a script from a file. Just remember, that needs to be a
                      // script that's already on the VM that will be running the job.
                      // Using setText() and setPath() is mutually exclusive.
                      // .setPath("/tmp/test.sh")
                      .build())
              .build();

      TaskSpec task = TaskSpec.newBuilder()
                  // Jobs can be divided into tasks. In this case, we have only one task.
                  .addRunnables(runnable)
                  .setMaxRetryCount(2)
                  .setMaxRunDuration(Duration.newBuilder().setSeconds(3600).build())
                  .build();

      // Tasks are grouped inside a job using TaskGroups.
      // Currently, it's possible to have only one task group.
      TaskGroup taskGroup = TaskGroup.newBuilder()
          .setTaskCount(3)
          .setParallelism(1)
          .setTaskSpec(task)
          .build();

      // Accelerator describes Compute Engine accelerators to be attached to the VM.
      Accelerator accelerator = Accelerator.newBuilder()
          .setType(gpuType)
          .setCount(gpuCount)
          .build();

      // Policies are used to define on what kind of virtual machines the tasks will run on.
      AllocationPolicy allocationPolicy =
          AllocationPolicy.newBuilder()
              .addInstances(
                  InstancePolicyOrTemplate.newBuilder()
                      .setInstallGpuDrivers(installGpuDrivers)
                      .setPolicy(InstancePolicy.newBuilder().addAccelerators(accelerator))
                      .build())
              .build();

      Job job =
          Job.newBuilder()
              .addTaskGroups(taskGroup)
              .setAllocationPolicy(allocationPolicy)
              .putLabels("env", "testing")
              .putLabels("type", "script")
              // We use Cloud Logging as it's an out of the box available option.
              .setLogsPolicy(
                  LogsPolicy.newBuilder().setDestination(LogsPolicy.Destination.CLOUD_LOGGING))
              .build();

      CreateJobRequest createJobRequest =
          CreateJobRequest.newBuilder()
              // The job's parent is the region in which the job will run.
              .setParent(String.format("projects/%s/locations/%s", projectId, region))
              .setJob(job)
              .setJobId(jobName)
              .build();

      Job result =
          batchServiceClient
              .createJobCallable()
              .futureCall(createJobRequest)
              .get(5, TimeUnit.MINUTES);

      System.out.printf("Successfully created the job: %s", result.getName());

      return result;
    }
  }
}

Node.js

// Imports the Batch library
const batchLib = require('@google-cloud/batch');
const batch = batchLib.protos.google.cloud.batch.v1;

// Instantiates a client
const batchClient = new batchLib.v1.BatchServiceClient();

/**
 * TODO(developer): Update these variables before running the sample.
 */
// Project ID or project number of the Google Cloud project you want to use.
const projectId = await batchClient.getProjectId();
// Name of the region you want to use to run the job. Regions that are
// available for Batch are listed on: https://cloud.google.com/batch/docs/get-started#locations
const region = 'europe-central2';
// The name of the job that will be created.
// It needs to be unique for each project and region pair.
const jobName = 'batch-gpu-job-n1';
// The GPU type. You can view a list of the available GPU types
// by using the `gcloud compute accelerator-types list` command.
const gpuType = 'nvidia-tesla-t4';
// The number of GPUs of the specified type.
const gpuCount = 1;
// Optional. When set to true, Batch fetches the drivers required for the GPU type
// that you specify in the policy field from a third-party location,
// and Batch installs them on your behalf. If you set this field to false (default),
// you need to install GPU drivers manually to use any GPUs for this job.
const installGpuDrivers = false;
// Accelerator-optimized machine types are available to Batch jobs. See the list
// of available types on: https://cloud.google.com/compute/docs/accelerator-optimized-machines
const machineType = 'n1-standard-16';

// Define what will be done as part of the job.
const runnable = new batch.Runnable({
  script: new batch.Runnable.Script({
    commands: ['-c', 'echo Hello world! This is task ${BATCH_TASK_INDEX}.'],
  }),
});

const task = new batch.TaskSpec({
  runnables: [runnable],
  maxRetryCount: 2,
  maxRunDuration: {seconds: 3600},
});

// Tasks are grouped inside a job using TaskGroups.
const group = new batch.TaskGroup({
  taskCount: 3,
  taskSpec: task,
});

// Policies are used to define on what kind of virtual machines the tasks will run on.
// In this case, we tell the system to use "g2-standard-4" machine type.
// Read more about machine types here: https://cloud.google.com/compute/docs/machine-types
const instancePolicy = new batch.AllocationPolicy.InstancePolicy({
  machineType,
  // Accelerator describes Compute Engine accelerators to be attached to the VM
  accelerators: [
    new batch.AllocationPolicy.Accelerator({
      type: gpuType,
      count: gpuCount,
      installGpuDrivers,
    }),
  ],
});

const allocationPolicy = new batch.AllocationPolicy.InstancePolicyOrTemplate({
  instances: [{installGpuDrivers, policy: instancePolicy}],
});

const job = new batch.Job({
  name: jobName,
  taskGroups: [group],
  labels: {env: 'testing', type: 'script'},
  allocationPolicy,
  // We use Cloud Logging as it's an option available out of the box
  logsPolicy: new batch.LogsPolicy({
    destination: batch.LogsPolicy.Destination.CLOUD_LOGGING,
  }),
});
// The job's parent is the project and region in which the job will run
const parent = `projects/${projectId}/locations/${region}`;

async function callCreateBatchGPUJobN1() {
  // Construct request
  const request = {
    parent,
    jobId: jobName,
    job,
  };

  // Run request
  const [response] = await batchClient.createJob(request);
  console.log(JSON.stringify(response));
}

await callCreateBatchGPUJobN1();

Python

from google.cloud import batch_v1


def create_gpu_job(
    project_id: str, region: str, zone: str, job_name: str
) -> batch_v1.Job:
    """
    This method shows how to create a sample Batch Job that will run
    a simple command on Cloud Compute instances on GPU machines.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        region: name of the region you want to use to run the job. Regions that are
            available for Batch are listed on: https://cloud.google.com/batch/docs/get-started#locations
        zone: name of the zone you want to use to run the job. Important in regard to GPUs availability.
            GPUs availability can be found here: https://cloud.google.com/compute/docs/gpus/gpu-regions-zones
        job_name: the name of the job that will be created.
            It needs to be unique for each project and region pair.

    Returns:
        A job object representing the job created.
    """
    client = batch_v1.BatchServiceClient()

    # Define what will be done as part of the job.
    task = batch_v1.TaskSpec()
    runnable = batch_v1.Runnable()
    runnable.script = batch_v1.Runnable.Script()
    runnable.script.text = "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
    # You can also run a script from a file. Just remember, that needs to be a script that's
    # already on the VM that will be running the job. Using runnable.script.text and runnable.script.path is mutually
    # exclusive.
    # runnable.script.path = '/tmp/test.sh'
    task.runnables = [runnable]

    # We can specify what resources are requested by each task.
    resources = batch_v1.ComputeResource()
    resources.cpu_milli = 2000  # in milliseconds per cpu-second. This means the task requires 2 whole CPUs.
    resources.memory_mib = 16  # in MiB
    task.compute_resource = resources

    task.max_retry_count = 2
    task.max_run_duration = "3600s"

    # Tasks are grouped inside a job using TaskGroups.
    # Currently, it's possible to have only one task group.
    group = batch_v1.TaskGroup()
    group.task_count = 4
    group.task_spec = task

    # Policies are used to define on what kind of virtual machines the tasks will run on.
    # Read more about machine types here: https://cloud.google.com/compute/docs/machine-types
    policy = batch_v1.AllocationPolicy.InstancePolicy()
    policy.machine_type = "n1-standard-16"

    accelerator = batch_v1.AllocationPolicy.Accelerator()
    # Note: not every accelerator is compatible with instance type
    # Read more here: https://cloud.google.com/compute/docs/gpus#t4-gpus
    accelerator.type_ = "nvidia-tesla-t4"
    accelerator.count = 1

    policy.accelerators = [accelerator]
    instances = batch_v1.AllocationPolicy.InstancePolicyOrTemplate()
    instances.policy = policy
    instances.install_gpu_drivers = True
    allocation_policy = batch_v1.AllocationPolicy()
    allocation_policy.instances = [instances]

    location = batch_v1.AllocationPolicy.LocationPolicy()
    location.allowed_locations = ["zones/us-central1-b"]
    allocation_policy.location = location

    job = batch_v1.Job()
    job.task_groups = [group]
    job.allocation_policy = allocation_policy
    job.labels = {"env": "testing", "type": "container"}
    # We use Cloud Logging as it's an out of the box available option
    job.logs_policy = batch_v1.LogsPolicy()
    job.logs_policy.destination = batch_v1.LogsPolicy.Destination.CLOUD_LOGGING

    create_request = batch_v1.CreateJobRequest()
    create_request.job = job
    create_request.job_id = job_name
    # The job's parent is the region in which the job will run
    create_request.parent = f"projects/{project_id}/locations/{region}"

    return client.create_job(create_request)

O que se segue?