Suporte de GPU para serviços

Esta página descreve a configuração da GPU para os seus serviços do Cloud Run. As GPUs funcionam bem para cargas de trabalho de inferência de IA, como grandes modelos de linguagem (GMLs) ou outros exemplos de utilização não relacionados com a IA que exigem muitos recursos de computação, como a transcodificação de vídeo e a renderização 3D. 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 de um serviço do Cloud Run que tenha sido configurado para usar a GPU podem ser reduzidas a zero para poupar custos quando não estiverem a ser usadas.

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:

  • Não existem taxas por pedido. Tem de usar a faturação baseada em instâncias para usar a funcionalidade de GPU. As instâncias mínimas são cobradas à taxa total, mesmo quando estão inativas.
  • Existe uma diferença no custo entre a redundância zonal da GPU e a redundância não zonal. Consulte os preços do Cloud Run para ver detalhes dos preços das GPUs.
  • Tem de usar um mínimo de 4 CPUs e 16 GiB de memória.
  • A GPU é faturada durante toda a duração do ciclo de vida da instância.
  • Quando implementa serviços ou funções a partir do código fonte com a configuração de GPU usando gcloud beta, o Cloud Run usa o tipo de máquina e2-highcpu-8, em vez do tipo de máquina e2-standard-2 predefinido (pré-visualização). O tipo de máquina maior oferece um suporte de CPU mais elevado e uma largura de banda da rede mais elevada, o que resulta em tempos de compilação mais rápidos.

Opções de redundância zonal da GPU

Por predefinição, o Cloud Run implementa o seu serviço em várias zonas numa região. Esta arquitetura oferece resiliência inerente: se uma zona tiver uma interrupção, o Cloud Run encaminha automaticamente o tráfego da zona afetada para zonas em bom estado de funcionamento na mesma região.

Quando trabalhar com recursos de GPU, tenha em atenção que estes têm restrições de capacidade específicas. Durante uma indisponibilidade zonal, o mecanismo de comutação por falha padrão para cargas de trabalho de GPU baseia-se na disponibilidade de capacidade de GPU não utilizada suficiente nas zonas em bom estado restantes. Devido à natureza restrita das GPUs, esta capacidade pode nem sempre estar disponível.

Para aumentar a disponibilidade dos seus serviços acelerados por GPU durante interrupções zonais, pode configurar a redundância zonal especificamente para GPUs:

  • Redundância zonal ativada (predefinição): o Cloud Run reserva capacidade de GPU para o seu serviço em várias zonas. Isto aumenta significativamente a probabilidade de o seu serviço conseguir processar o tráfego reencaminhado de uma zona afetada, oferecendo maior fiabilidade durante falhas zonais com um custo adicional por segundo de GPU.

  • Redundância zonal desativada: o Cloud Run tenta a comutação por falha para cargas de trabalho de GPU com base no melhor esforço. O tráfego é encaminhado 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.

SLA

O SLA da GPU do Cloud Run depende de o serviço usar a opção de redundância zonal ou não zonal . Consulte a página do SLA para ver detalhes.

Peça um aumento da quota

Os projetos que usam nvidia-l4GPUs no Cloud Run numa região pela primeira vez recebem automaticamente uma quota de 3 GPUs (redundância zonal desativada) quando a primeira implementação é criada. Se precisar de GPUs do Cloud Run adicionais, tem de pedir um aumento da quota para o seu serviço do Cloud Run. Use os links fornecidos nos seguintes botões para pedir a quota de que precisa.

Quota necessária Link de quota
GPU com redundância zonal desativada (preço mais baixo) Peça quota de GPU sem redundância zonal
GPU com redundância zonal ativada (preço mais elevado) Peça quota de GPU com redundância zonal

Para mais informações sobre como pedir aumentos da quota, consulte o artigo Como aumentar a quota.

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. Peça a quota necessária.
  8. Consulte as práticas recomendadas: inferência de IA no Cloud Run com GPUs para ver recomendações sobre a criação da imagem do contentor e o carregamento de modelos grandes.
  9. Certifique-se de que o seu serviço do Cloud Run tem as seguintes configurações:
  10. Funções necessárias

    Para receber as autorizações de que precisa para configurar e implementar serviços do Cloud Run, peça ao seu administrador que lhe conceda as seguintes funções da IAM nos serviços:

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

    Se estiver a implementar um serviço ou uma função a partir do código fonte, também tem de ter funções adicionais concedidas no seu projeto e na conta de serviço do Cloud Build.

    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 o seu serviço do Cloud Run interage com Google Cloud APIs, como as bibliotecas 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 um serviço do Cloud Run com GPU

    Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

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

    Consola

    1. Na Google Cloud consola, aceda ao Cloud Run:

      Aceda ao Cloud Run

    2. Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

    3. Se estiver a configurar um novo serviço, preencha a página de definições iniciais do serviço e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.

    4. Clique no separador Contentor.

      imagem

      • Configure a CPU, a memória, a simultaneidade, o ambiente de execução e a sondagem de arranque seguindo as recomendações em Antes de começar.
      • Selecione a caixa de verificação da GPU e, de seguida, selecione o tipo de GPU no menu Tipo de GPU e o número de GPUs no menu Número de GPUs.
      • Por predefinição, a redundância zonal está ativada para novos serviços. Para alterar a definição atual, selecione a caixa de verificação da GPU para mostrar as opções de redundância da GPU.
        • Selecione Sem redundância zonal para desativar a redundância zonal
        • Selecione Redundância zonal para ativar a redundância zonal.
    5. Clique em Criar ou Implementar.

    gcloud

    Para criar um serviço com a GPU ativada, use o comando gcloud run deploy:

    • Para implementar um contentor:

        gcloud run deploy SERVICE \
          --image IMAGE_URL \
          --gpu 1

      Substitua o seguinte:

      • SERVICE: o nome do seu serviço do Cloud Run.
      • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • Para implementar código-fonte e permitir que o Cloud Run use por predefinição o tipo de máquina e2-highcpu-8 do Cloud Build, use o comando gcloud beta run deploy:

        gcloud beta run deploy SERVICE \
          --source . \
          --gpu 1

    Para atualizar a configuração da GPU de um serviço, use o comando gcloud run services update:

      gcloud run services update SERVICE \
        --image IMAGE_URL \
        --cpu CPU \
        --memory MEMORY \
        --no-cpu-throttling \
        --gpu GPU_NUMBER \
        --gpu-type GPU_TYPE \
        --max-instances MAX_INSTANCE
        --GPU_ZONAL_REDUNDANCY
        

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço do Cloud Run.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • CPU: o número de CPUs. Tem de especificar, pelo menos, 4 CPUs.
    • MEMORY: a quantidade de memória. Tem de especificar, pelo menos, 16Gi (16 GiB).
    • GPU_NUMBER: o valor 1 (um). Se não estiver especificado, mas estiver presente um GPU_TYPE, a predefinição é 1.
    • GPU_TYPE: 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).
    • MAX_INSTANCE: o número máximo de instâncias. Este número não pode exceder a quota de GPUs atribuída ao seu projeto.
    • GPU_ZONAL_REDUNDANCY: no-gpu-zonal-redundancy para desativar a redundância zonal ou gpu-zonal-redundancy para a ativar.

    YAML

    1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

      gcloud run services describe SERVICE --format export > service.yaml
    2. Atualize o atributo nvidia.com/gpu: e nodeSelector:
      run.googleapis.com/accelerator:
      :

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: SERVICE
      spec:
        template:
          metadata:
            annotations:
              autoscaling.knative.dev/maxScale: 'MAX_INSTANCE'
              run.googleapis.com/cpu-throttling: 'false'
              run.googleapis.com/gpu-zonal-redundancy-disabled: 'GPU_ZONAL_REDUNDANCY'
          spec:
            containers:
            - image: IMAGE_URL
              ports:
              - containerPort: CONTAINER_PORT
                name: http1
              resources:
                limits:
                  cpu: 'CPU'
                  memory: 'MEMORY'
                  nvidia.com/gpu: '1'
              # Optional: use a longer startup probe to allow long starting containers
              startupProbe:
                failureThreshold: 1800
                periodSeconds: 1
                tcpSocket:
                  port: CONTAINER_PORT
                timeoutSeconds: 1
            nodeSelector:
              run.googleapis.com/accelerator: GPU_TYPE

      Substitua o seguinte:

      • SERVICE: o nome do seu serviço do Cloud Run.
      • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
      • CONTAINER_PORT: a porta do contentor definida para o seu serviço.
      • CPU: o número de CPUs. Tem de especificar, pelo menos, 4 CPUs.
      • MEMORY: a quantidade de memória. Tem de especificar, pelo menos, 16Gi (16 GiB).
      • GPU_TYPE: o valor nvidia-l4 (nvidia-L4 L minúsculo, não o valor numérico catorze).
      • MAX_INSTANCE: o número máximo de instâncias. Este número não pode exceder a quota de GPUs atribuída ao seu projeto.
      • GPU_ZONAL_REDUNDANCY: false para ativar a redundância zonal da GPU ou true para a desativar.
    3. Crie ou atualize o serviço com o seguinte comando:

      gcloud run services replace service.yaml

    Terraform

    Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

    Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform:

    resource "google_cloud_run_v2_service" "default" {
      provider = google-beta
      name     = "SERVICE"
      location = "europe-west1"
    
      template {
        gpu_zonal_redundancy_disabled = "GPU_ZONAL_REDUNDANCY"
        containers {
          image = "IMAGE_URL"
          resources {
            limits = {
              "cpu" = "CPU"
              "memory" = "MEMORY"
              "nvidia.com/gpu" = "1"
            }
          }
        }
        node_selector {
          accelerator = "GPU_TYPE"
        }
      }
    }
    

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço do Cloud Run.
    • GPU_ZONAL_REDUNDANCY: false para ativar a redundância zonal da GPU ou true para a desativar.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • CPU: o número de CPUs. Tem de especificar, pelo menos, 4 CPUs.
    • MEMORY: a quantidade de memória. Tem de especificar, pelo menos, 16Gi (16 GiB).
    • GPU_TYPE: o valor nvidia-l4 (nvidia-L4 letras L minúsculas, não o valor numérico catorze).

    Veja as definições da GPU

    Para ver as definições atuais da GPU do seu serviço do Cloud Run:

    Consola

    1. Na Google Cloud consola, aceda ao Cloud Run:

      Aceda ao Cloud Run

    2. Clique no serviço que lhe interessa para abrir a página Detalhes do serviço.

    3. Clique no separador Revisões.

    4. No painel de detalhes à direita, a definição da GPU é apresentada no separador Contentor.

    gcloud

    1. Use o seguinte comando:

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

    Remover GPU

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

    Consola

    1. Na Google Cloud consola, aceda ao Cloud Run:

      Aceda ao Cloud Run

    2. Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

    3. Se estiver a configurar um novo serviço, preencha a página de definições iniciais do serviço e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.

    4. Clique no separador Contentor.

      imagem

      • Desmarque a caixa de verificação da GPU.
    5. Clique em Criar ou Implementar.

    gcloud

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

      gcloud run services update SERVICE --gpu 0
      

    Substitua SERVICE pelo nome do seu serviço do Cloud Run.

    YAML

    1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

      gcloud run services describe SERVICE --format export > service.yaml
    2. Elimine as linhas nvidia.com/gpu: e nodeSelector: run.googleapis.com/accelerator: nvidia-l4.

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

      gcloud run services replace service.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 das instâncias máximas

    O número de instâncias com GPUs está limitado de duas formas: