Criar e executar um job que usa GPUs

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

Criar um job que usa GPUs

Para criar um job que usa GPUs, faça o seguinte:

  1. Consulte a seção Requisitos para um job usar GPUs para determinar os métodos que podem ser usados para criar seu job.
  2. 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:

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:

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:

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

  1. Crie um arquivo JSON que especifique 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:

    {
        "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 como true, o Batch busca os drivers necessários para o tipo de GPU especificado no campo policy de um local de terceiros e o instala em seu nome. Se você definir esse campo como false (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 comando gcloud 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 zona us-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 campo allowedLocations[].

  2. 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 como true, o Batch busca os drivers necessários para o tipo de GPU especificado no campo policy de um local de terceiros e o instala em seu nome. Se você definir esse campo como false (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 comando gcloud 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 zona us-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 campo allowedLocations[].

A seguir