Configurar GPUs para jobs do Cloud Run

Esta página descreve a configuração de GPU para seus jobs do Cloud Run. As GPUs funcionam bem para cargas de trabalho de IA, como treinar modelos de linguagem grandes (LLMs) usando seus frameworks preferidos, realizar inferência em lote ou off-line em LLMs e lidar com outras tarefas que exigem computação intensiva como processamento de vídeo e renderização de gráficos como jobs em segundo plano. O Google fornece GPUs NVIDIA L4 com 24 GB de memória de GPU (VRAM), que é separada da memória da instância.

A GPU no Cloud Run é totalmente gerenciada, sem drivers ou bibliotecas extras necessários. O recurso GPU oferece disponibilidade sob demanda sem necessidade de reservas, semelhante à maneira como CPU e memória sob demanda funcionam no Cloud Run.

Instâncias do Cloud Run com uma GPU L4 anexada e drivers pré-instalados são iniciados em aproximadamente cinco segundos. Nesse momento, os processos em execução no seu contêiner podem começar a usar a GPU.

É possível configurar uma GPU por instância do Cloud Run. Se você usar contêineres secundários a GPU só pode ser conectada a um único contêiner.

Regiões compatíveis

  • asia-southeast1 (Singapura)
  • asia-south1 (Mumbai) . Esta região só está disponível por convite. Entre em contato com a equipe da sua Conta do Google se tiver interesse nessa região.
  • europe-west1 (Bélgica) Ícone de folha Baixo CO2
  • europe-west4 (Países Baixos) Ícone de folha Baixo CO2
  • us-central1 (Iowa) Ícone de folha Baixo CO2
  • us-east4 (Norte da Virgínia)

Tipos de GPU compatíveis

É possível usar uma GPU L4 por instância do Cloud Run. Uma GPU L4 tem os seguintes drivers pré-instalados:

  • A versão atual do driver NVIDIA: 535.216.03 (CUDA 12.2)

Impacto no preço

Consulte os detalhes de preços de GPU em Preços do Cloud Run. Observe os seguintes requisitos e considerações:

  • As GPUs para jobs seguem os preços sem redundância zonal (em prévia).
  • É necessário usar pelo menos quatro CPUs e 16 GiB de memória.
  • A GPU é cobrada de acordo com a duração total do ciclo de vida da instância.

Redundância não zonal de GPU

O recurso de jobs do Cloud Run oferece suporte à redundância não zonal (em pré-lançamento) apenas para instâncias habilitadas para GPU. Com a redundância não zonal ativada, o Cloud Run tenta fazer failover para jobs habilitados para GPU da melhor maneira possível. O Cloud Run encaminha as execuções de jobs para outras zonas somente se houver capacidade suficiente de GPU disponível no momento. Essa opção não garante capacidade reservada para cenários de failover, mas resulta em um custo menor por segundo de GPU.

Consulte configurar um job do Cloud Run com GPU para detalhes sobre como ativar a redundância não zonal.

Solicitar aumento de cota

Se o projeto não tiver cota de GPU, implante um serviço do Cloud Run para receber automaticamente uma concessão de cota de GPU de 3 nvidia-l4 (redundância zonal desativada) para essa região. Essa concessão automática de cota está sujeita à disponibilidade, dependendo da capacidade de CPU e memória. Quando você exclui o serviço não utilizado, a cota alocada permanece inalterada.

Se você precisar de mais GPUs do Cloud Run para jobs, solicite um aumento de cota.

O número máximo de instâncias de jobs de GPU (tarefas) que podem ser executadas em paralelo é limitado pelas seguintes cotas:

O valor de paralelismo precisa ser menor que a cota de GPU sem redundância zonal ou a cota de instâncias de GPU de jobs sem redundância zonal, dependendo de qual cota é mais restritiva.

Antes de começar

A lista a seguir descreve os requisitos e as limitações ao usar GPUs no Cloud Run:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Run API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  7. Consulte Práticas recomendadas: jobs do Cloud Run com GPUs para otimizar o desempenho ao usar jobs do Cloud Run com GPU.
  8. Funções exigidas

    Para receber as permissões necessárias para configurar jobs do Cloud Run, peça ao administrador para conceder a você os seguintes papéis do IAM nos jobs:

    • Desenvolvedor do Cloud Run (roles/run.developer): o job do Cloud Run
    • Usuário da conta de serviço (roles/iam.serviceAccountUser) – a identidade de serviço

    Para uma lista de papéis e permissões do IAM associados ao Cloud Run, consulte Papéis do IAM do Cloud Run e Permissões do IAM do Cloud Run. Se o job do Cloud Run interagir com APIs doGoogle Cloud , como as bibliotecas de cliente do Cloud, consulte o guia de configuração de identidade de serviço. Para mais informações sobre como conceder papéis, consulte permissões de implantação e gerenciar acesso.

    Configurar um job do Cloud Run com GPU

    É possível usar o console Google Cloud , a Google Cloud CLI ou o YAML para configurar a GPU.

    gcloud

    Para ativar a redundância não zonal, especifique --no-gpu-zonal-redundancy. Isso é necessário para usar GPUs com jobs.

    Para criar um job com a GPU ativada, use o comando gcloud beta run jobs create:

        gcloud beta run jobs create JOB_NAME \
          --image=IMAGE \
          --gpu=1 \
          --no-gpu-zonal-redundancy

    Substitua:

    • JOB_NAME pelo nome do job do Cloud Run.
    • IMAGE_URL: uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest.

    Para atualizar a configuração de GPU de um job, use o comando gcloud beta run jobs update:

        gcloud beta run jobs update JOB_NAME \
          --image IMAGE_URL \
          --cpu CPU \
          --memory MEMORY \
          --gpu GPU_NUMBER \
          --gpu-type GPU_TYPE \
          --parallelism PARALLELISM \
          --no-gpu-zonal-redundancy

    Substitua:

    • JOB_NAME pelo nome do job do Cloud Run.
    • IMAGE_URL: uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
    • CPU com no mínimo 4 CPU para seu job. O valor recomendado é 8.
    • MEMORY com um mínimo de 16Gi (16 GiB). O valor recomendado é 32Gi.
    • GPU_NUMBER com o valor 1 (um). Se isso não for especificado, mas um GPU_TYPE estiver presente, o padrão será 1.
    • GPU_TYPE com o tipo de GPU. Se isso não for especificado, mas um GPU_NUMBER estiver presente, o padrão será nvidia-l4 (nvidia L4 L minúsculo, não o valor numérico 14).
    • PARALLELISM com um valor inteiro menor que o valor mais baixo dos limites de cota aplicáveis alocados para seu projeto.

    YAML

    Defina a anotação run.googleapis.com/gpu-zonal-redundancy-disabled: como "true". Isso ativa a redundância não zonal, que é necessária para GPUs em jobs.

    1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

      gcloud run jobs describe JOB_NAME --format export > job.yaml
    2. Atualize o atributo nvidia.com/gpu, annotations: run.googleapis.com/launch-stage para a fase de lançamento e nodeSelector:
      run.googleapis.com/accelerator
      :

      apiVersion: run.googleapis.com/v1
      kind: Job
      metadata:
        name: JOB_NAME
        labels:
          cloud.googleapis.com/location: REGION
        annotations:
          run.googleapis.com/launch-stage: BETA
      spec:
        template:
          metadata:
            annotations:
              run.googleapis.com/gpu-zonal-redundancy-disabled: 'true'
          spec:
            template:
              spec:
                containers:
                - image: IMAGE_URL
                  limits:
                    cpu: 'CPU'
                    memory: 'MEMORY'
                    nvidia.com/gpu: 'GPU_NUMBER'
                nodeSelector:
                  run.googleapis.com/accelerator: GPU_TYPE

      Substitua:

      • JOB_NAME pelo nome do job do Cloud Run.
      • IMAGE_URL: uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
      • CPU com o número de CPUs. É necessário especificar pelo menos 4 CPU.
      • MEMORY pela quantidade de memória. É necessário especificar pelo menos 16Gi (16 GiB).
      • GPU_NUMBER com o valor 1 (um) porque é possível anexar apenas uma GPU por instância do Cloud Run.
      • GPU_TYPE com o valor nvidia-l4 (nvidia-L4 L minúsculo, não o valor numérico 14).
    3. Crie ou atualize o serviço usando o seguinte comando:

      gcloud run jobs replace job.yaml

    Conferir as configurações da GPU

    Para ver as configurações atuais da GPU do job do Cloud Run:

    gcloud

    1. Use o comando a seguir:

      gcloud run jobs describe JOB_NAME
    2. Localize a configuração de GPU na configuração retornada.

    Remover GPU

    É possível remover a GPU usando a Google Cloud CLI ou o YAML.

    gcloud

    Para remover a GPU, defina o número de GPUs como 0 usando o comando gcloud beta run jobs update:

      gcloud beta run jobs update JOB_NAME --gpu 0
      

    Substitua JOB_NAME pelo nome do job do Cloud Run.

    YAML

    1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

      gcloud run jobs describe JOB_NAME --format export > job.yaml
    2. Exclua as linhas nvidia.com/gpu:, run.googleapis.com/gpu-zonal-redundancy-disabled: 'true' e nodeSelector: run.googleapis.com/accelerator: nvidia-l4.

    3. Crie ou atualize o serviço usando o seguinte comando:

      gcloud run jobs replace job.yaml

    Bibliotecas

    Por padrão, todas as bibliotecas de drivers da NVIDIA L4 são montadas em /usr/local/nvidia/lib64. O Cloud Run anexa automaticamente esse caminho à variável de ambiente LD_LIBRARY_PATH (ou seja, ${LD_LIBRARY_PATH}:/usr/local/nvidia/lib64) do contêiner com a GPU. Isso permite que o vinculador dinâmico encontre as bibliotecas de driver da NVIDIA. O vinculador pesquisa e resolve caminhos na ordem em que você os lista na variável de ambiente LD_LIBRARY_PATH. Todos os valores especificados nessa variável têm precedência sobre o caminho padrão das bibliotecas de driver do Cloud Run /usr/local/nvidia/lib64.

    Se você quiser usar uma versão do CUDA maior que 12.2, a maneira mais fácil é depender de uma imagem base NVIDIA mais recente com pacotes de compatibilidade futura já instalados. Outra opção é instalar manualmente os pacotes de compatibilidade futura da NVIDIA e adicioná-los a LD_LIBRARY_PATH. Consulte a matriz de compatibilidade da NVIDIA para determinar quais versões do CUDA são compatíveis com a versão do driver fornecido (535.216.03).

    Sobre GPUs e paralelismo

    Se você estiver executando tarefas paralelas em uma execução de job, determine e defina o valor de paralelismo como menor que o valor mais baixo dos limites de cota aplicáveis alocados para seu projeto. Por padrão, a cota de instâncias de job de GPU é definida como 5 para tarefas executadas em paralelo. Para solicitar um aumento de cota, consulte Como aumentar a cota. As tarefas de GPU são iniciadas o mais rápido possível e vão até um máximo que varia de acordo com a cota de GPU alocada para o projeto e a região selecionada. As implantações do Cloud Run falham se você definir o paralelismo como mais do que o limite da cota de GPU.

    Para calcular a cota de GPU que seu job usa por execução, multiplique o número de GPUs por tarefa do job com o valor de paralelismo. Por exemplo, se você tiver uma cota de GPU de 10 e implantar seu job do Cloud Run com --gpu=1, --parallelism=10, seu job vai consumir toda a cota de 10 GPUs. Como alternativa, se você fizer a implantação com --gpu=1, --parallelism=20, as implantações vão falhar.

    Para mais informações, consulte Práticas recomendadas: jobs do Cloud Run com GPUs.