Configure GPUs para tarefas do Cloud Run

Esta página descreve a configuração da GPU para as suas tarefas do Cloud Run. As GPUs funcionam bem para cargas de trabalho de IA, como: preparar grandes modelos de linguagem (GMLs) com as suas frameworks preferenciais, realizar inferências em lote ou offline em GMLs e processar outras tarefas que exigem muitos recursos de computação, como o processamento de vídeo e a renderização de gráficos como tarefas em segundo plano. A Google fornece GPUs NVIDIA L4 com 24 GB de memória da GPU (VRAM), que é separada da memória da instância.

A GPU no Cloud Run é totalmente gerida, sem necessidade de controladores ou bibliotecas adicionais. A funcionalidade de GPU oferece disponibilidade a pedido sem necessidade de reservas, semelhante à forma como a CPU a pedido e a memória a pedido funcionam no Cloud Run.

As instâncias do Cloud Run com uma GPU L4 anexada e controladores pré-instalados são iniciadas em aproximadamente 5 segundos, momento em que os processos em execução no seu contentor podem começar a usar a GPU.

Pode configurar uma GPU por instância do Cloud Run. Se usar contentores auxiliares, tenha em atenção que a GPU só pode ser anexada a um contentor.

Regiões suportadas

  • asia-southeast1 (Singapura)
  • asia-south1 (Mumbai) . Esta região está disponível apenas por convite. Contacte a equipa da sua Conta Google se tiver interesse nesta 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 (Virgínia do Norte)

Tipos de GPUs suportados

Pode usar uma GPU L4 por instância do Cloud Run. Uma GPU L4 tem os seguintes controladores pré-instalados:

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

Impacto nos preços

Consulte os preços do Cloud Run para ver detalhes dos preços das GPUs. Tenha em atenção os seguintes requisitos e considerações:

Redundância não zonal da GPU

A funcionalidade de tarefas do Cloud Run oferece suporte de redundância não zonal (em pré-visualização) apenas para instâncias com GPUs. Com a redundância não zonal ativada, o Cloud Run tenta a comutação por falha para tarefas com GPUs com base no melhor esforço. O Cloud Run encaminha as execuções de tarefas para outras zonas apenas se existir capacidade de GPU suficiente nesse momento. Esta opção não garante capacidade reservada para cenários de comutação por falha, mas resulta num custo mais baixo por segundo de GPU.

Consulte o artigo Configure uma tarefa do Cloud Run com GPU para ver detalhes sobre como ativar a redundância não zonal.

Peça um aumento da quota

Se o seu projeto não tiver quota de GPUs, implemente um serviço do Cloud Run para receber automaticamente uma concessão de 3 quotas de GPUs (redundância zonal desativada) para essa região.nvidia-l4 Tenha em atenção que esta concessão automática de quota está sujeita a disponibilidade, consoante a capacidade da CPU e da memória. Quando elimina o serviço não utilizado, a quota atribuída permanece inalterada.

Se precisar de GPUs do Cloud Run adicionais para tarefas, peça um aumento da quota.

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

O valor de paralelismo tem de ser inferior à quota de GPU sem redundância zonal ou à quota de instâncias de GPU de tarefas sem redundância zonal, consoante a quota mais restritiva.

Antes de começar

A lista seguinte descreve os requisitos e as limitações quando usa 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.

    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.

    Go to project selector

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

  6. Enable the Cloud Run API.

    Enable the API

  7. Consulte o artigo Práticas recomendadas: tarefas do Cloud Run com GPUs para otimizar o desempenho quando usar tarefas do Cloud Run com GPUs.
  8. Funções necessárias

    Para receber as autorizações de que precisa para configurar tarefas do Cloud Run, peça ao seu administrador para lhe conceder as seguintes funções da IAM nas tarefas:

    • Programador do Cloud Run (roles/run.developer) – a tarefa do Cloud Run
    • Utilizador da conta de serviço (roles/iam.serviceAccountUser): a identidade do serviço

    Para ver uma lista de funções e autorizações de IAM associadas ao Cloud Run, consulte os artigos Funções de IAM do Cloud Run e Autorizações de IAM do Cloud Run. Se a sua tarefa do Cloud Run interagir com Google Cloud APIs, como as bibliotecas de cliente da Google Cloud, consulte o guia de configuração da identidade do serviço. Para mais informações sobre a atribuição de funções, consulte as autorizações de implementação e faça a gestão do acesso.

    Configure uma tarefa do Cloud Run com GPU

    Pode usar a Google Cloud consola, a CLI do Google Cloud ou o YAML para configurar a GPU.

    gcloud

    Para ativar a redundância não zonal, tem de especificar --no-gpu-zonal-redundancy. Isto é necessário para usar a GPU com tarefas.

    Para criar uma tarefa 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

    Substituir:

    • JOB_NAME com o nome da tarefa do Cloud Run.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest.

    Para atualizar a configuração da GPU de uma tarefa, 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

    Substituir:

    • JOB_NAME com o nome da tarefa do Cloud Run.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
    • CPU com um mínimo de 4 CPU para o seu trabalho. 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 não estiver especificado, mas estiver presente um GPU_TYPE, a predefinição é 1.
    • GPU_TYPE com o tipo de GPU. Se não estiver especificado, mas estiver presente um GPU_NUMBER, a predefinição é nvidia-l4 (nvidia L4 L minúsculos, não o valor numérico catorze).
    • PARALLELISM com um valor inteiro inferior ao valor mais baixo dos limites de quota aplicáveis que atribuiu ao seu projeto.

    YAML

    Tem de definir a anotação run.googleapis.com/gpu-zonal-redundancy-disabled: como "true". Isto ativa a redundância não zonal, que é necessária para GPUs para tarefas.

    1. Se estiver a criar uma nova tarefa, ignore este passo. Se estiver a atualizar uma tarefa existente, transfira a respetiva configuração YAML:

      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

      Substituir:

      • JOB_NAME com o nome da tarefa do Cloud Run.
      • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest
      • CPU com o número de CPUs. Tem de especificar, pelo menos, 4 CPUs.
      • MEMORY com a quantidade de memória. Tem de especificar, pelo menos, 16Gi (16 GiB).
      • GPU_NUMBER com o valor 1 (um), porque só suportamos a associação de uma GPU por instância do Cloud Run.
      • GPU_TYPE com o valor nvidia-l4 (nvidia-L4, 4 letras L minúsculas, não o valor numérico catorze).
    3. Crie ou atualize a tarefa através do seguinte comando:

      gcloud run jobs replace job.yaml

    Veja as definições da GPU

    Para ver as definições atuais da GPU para a sua tarefa do Cloud Run:

    gcloud

    1. Use o seguinte comando:

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

    Remova a GPU

    Pode remover a GPU através da CLI Google Cloud ou do YAML.

    gcloud

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

      gcloud beta run jobs update JOB_NAME --gpu 0
      

    Substitua JOB_NAME pelo nome da sua tarefa do Cloud Run.

    YAML

    1. Se estiver a criar uma nova tarefa, ignore este passo. Se estiver a atualizar uma tarefa existente, transfira a respetiva configuração YAML:

      gcloud run jobs describe JOB_NAME --format export > job.yaml
    2. Elimine 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 a tarefa através do seguinte comando:

      gcloud run jobs replace job.yaml

    Bibliotecas

    Por predefinição, todas as bibliotecas de controladores NVIDIA L4 estão montadas em /usr/local/nvidia/lib64. O Cloud Run anexa automaticamente este caminho à variável de ambiente LD_LIBRARY_PATH (ou seja, ${LD_LIBRARY_PATH}:/usr/local/nvidia/lib64) do contentor com a GPU. Isto permite que o linker dinâmico encontre as bibliotecas de controladores da NVIDIA. O linker pesquisa e resolve caminhos pela ordem em que os lista na variável de ambiente LD_LIBRARY_PATH. Todos os valores que especificar nesta variável têm precedência sobre o caminho predefinido das bibliotecas do controlador do Cloud Run /usr/local/nvidia/lib64.

    Se quiser usar uma versão do CUDA superior a 12.2, a forma mais fácil é depender de uma imagem base da 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 ao LD_LIBRARY_PATH. Consulte a matriz de compatibilidade da NVIDIA para determinar que versões do CUDA são compatíveis com a versão do controlador da NVIDIA fornecida (535.216.03).

    Acerca das GPUs e do paralelismo

    Se estiver a executar tarefas paralelas numa execução de trabalho, determine e defina o valor de paralelismo para um valor inferior ao valor mais baixo dos limites de quota aplicáveis que atribuiu ao seu projeto. Por predefinição, a quota de instâncias de tarefas de GPU está definida como 5 para tarefas que são executadas em paralelo. Para pedir um aumento da quota, consulte o artigo Como aumentar a quota. As tarefas de GPU são iniciadas o mais rapidamente possível e atingem um máximo que varia consoante a quota de GPU que atribuiu ao projeto e à região selecionada. As implementações do Cloud Run falham se definir o paralelismo para um valor superior ao limite da quota de GPU.

    Para calcular a quota de GPUs que a sua tarefa usa por execução, multiplique o número de GPUs por tarefa da tarefa pelo valor de paralelismo. Por exemplo, se tiver uma quota de GPU de 10 e implementar a sua tarefa do Cloud Run com --gpu=1, --parallelism=10, a sua tarefa consome toda a quota de 10 GPUs. Em alternativa, se fizer a implementação com --gpu=1, --parallelism=20, as implementações falham.

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