服务的 GPU 支持

本页面介绍了 Cloud Run 服务的 GPU 配置。GPU 非常适合 AI 推理工作负载,例如大语言模型 (LLM) 或其他计算密集型非 AI 应用场景(如视频转码和 3D 渲染)。Google 提供的 NVIDIA L4 GPU 配备 24 GB GPU 内存 (VRAM),该内存与实例内存分开。

Cloud Run 上的 GPU 是全托管式 GPU,无需额外的驱动程序或。GPU 功能提供按需可用性且无需预留,与 Cloud Run 中的按需 CPU 和按需内存的工作方式类似。已配置为使用 GPU 的 Cloud Run 服务的实例在不使用时可缩减至零,以节省费用。

挂接了预安装驱动程序的 L4 GPU 的 Cloud Run 实例会在大约 5 秒内启动,然后容器中运行的进程便可以开始使用该 GPU。

您可以为每个 Cloud Run 实例配置一个 GPU。如果您使用边车容器,请注意 GPU 只能挂接到一个容器。

支持的区域

支持的 GPU 类型

您可以为每个 Cloud Run 实例可以使用一个 L4 GPU。L4 GPU 预安装了以下驱动程序:

  • 当前 NVIDIA 驱动程序版本:535.129.03 (CUDA 12.2)

价格影响

如需了解 GPU 价格详情,请参阅 Cloud Run 价格。请注意以下要求和注意事项:

  • 无法按请求付费。您必须使用基于实例的结算方式才能使用 GPU 功能,因此即使实例处于空闲状态,系统也会按全额费率收取实例数下限费用。
  • GPU 可用区级冗余和非可用区级冗余的费用有所不同。如需了解 GPU 价格详情,请参阅 Cloud Run 价格
  • 您必须至少使用 4 个 CPU 和 16 GiB 内存。
  • GPU 的费用按实例生命周期的整个时长计费。

GPU 可用区级冗余选项

默认情况下,Cloud Run 会在一个区域内的多个可用区部署您的服务。此架构具有固有的弹性:如果某个可用区发生服务中断,Cloud Run 会自动将流量从受影响的可用区路由到同一区域内健康状况良好的可用区。

使用 GPU 资源时,请注意 GPU 资源具有特定的容量限制。在可用区级服务中断期间,GPU 工作负载的标准故障切换机制依赖于其余健康状况良好可用区中提供足够的未使用 GPU 容量。由于 GPU 资源有限,此容量可能不一定始终可用。

如需在可用区级服务中断期间提高 GPU 加速服务的可用性,您可以专门为 GPU 配置可用区级冗余:

  • 可用区级冗余开启(默认):Cloud Run 会跨多个可用区为您的服务预留 GPU 容量。这可显著提高服务成功处理从受影响可用区重新路由的流量的概率,从而在可用区级故障期间提供更高的可靠性,但每 GPU 秒的费用也会更高。

  • 可用区级冗余关闭:Cloud Run 会尽最大努力为 GPU 工作负载尝试故障切换。只有在当时有足够的 GPU 容量时,流量才会路由到其他可用区。此选项无法保证故障切换场景可使用预留容量,但每 GPU 秒的费用较低。

SLA

Cloud Run GPU 的服务等级协议 (SLA) 取决于服务是使用可用区级冗余还是非可用区级冗余选项。如需了解详情,请参阅 SLA 页面

申请增加配额

首次在某个区域中使用 Cloud Run nvidia-l4 GPU 的项目在创建首次部署时,会自动被授予 3 GPU 配额(可用区级冗余关闭)。如果您需要额外的 Cloud Run GPU,则必须为 Cloud Run 服务申请增加配额。点击以下按钮中提供的链接可申请所需的配额。

所需配额 配额链接
关闭可用区级冗余的 GPU(价格较低) 在不使用可用区级冗余的情况下申请 GPU 配额
开启可用区级冗余的 GPU(价格较高) 在使用可用区级冗余的情况下申请 GPU 配额

如需详细了解如何申请增加配额,请参阅如何增加配额

准备工作

以下列表介绍了在 Cloud Run 中使用 GPU 时的要求和限制:

  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. Make sure 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. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Run API.

    Enable the API

  7. 申请所需配额
  8. 如需了解有关构建容器映像和加载大型模型的建议,请参阅最佳实践:使用 GPU 在 Cloud Run 上进行 AI 推理
  9. 确保您的 Cloud Run 服务具有以下配置:
  10. 所需的角色

    如需获得配置和部署 Cloud Run 服务所需的权限,请让您的管理员为您授予服务的以下 IAM 角色:

    • Cloud Run Developer (roles/run.developer) - Cloud Run 服务
    • Service Account User (roles/iam.serviceAccountUser) - 服务身份

    如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色Cloud Run IAM 权限。如果您的 Cloud Run 服务与Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限管理访问权限

    配置具有 GPU 的 Cloud Run 服务

    任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。

    您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 来配置 GPU。

    控制台

    1. 在 Google Cloud 控制台中,前往 Cloud Run:

      转到 Cloud Run

    2. 从菜单中选择服务,然后点击部署容器以配置新服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

    3. 如果您要配置新服务,请填写初始服务设置页面,然后点击容器、卷、网络、安全性以展开服务配置页面。

    4. 点击容器标签页。

      图片

      • 按照准备工作中的建议配置 CPU、内存、并发设置、执行环境和启动探测。
      • 勾选 GPU 复选框,然后从 GPU 类型菜单中选择 GPU 类型,并从 GPU 数量菜单中选择 GPU 数量。
      • 对于新服务,默认情况下会开启可用区级冗余。如需更改当前设置,请选中 GPU 复选框以显示 GPU 冗余选项。
        • 选择无可用区级冗余可关闭可用区级冗余
        • 选择可用区级冗余可启用可用区级冗余。
    5. 点击创建部署

    gcloud

    如需创建启用了 GPU 的服务,请使用 gcloud run deploy 命令:

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

    您需要进行如下替换:

    • SERVICE 替换为您的 Cloud Run 服务的名称。
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

    如需更新服务的 GPU 配置,请使用 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
        

    您需要进行如下替换:

    • SERVICE 替换为您的 Cloud Run 服务的名称。
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • CPU 替换为 CPU 数量。您必须至少指定 4 个 CPU。
    • MEMORY 替换为内存量。您必须至少指定 16Gi (16 GiB)。
    • GPU_NUMBER 替换为值 1(一个)。 如果未指定该项,但存在 GPU_TYPE,则默认值为 1
    • GPU_TYPE 替换为 GPU 类型。如果未指定该项,但存在 GPU_NUMBER,则默认值为 nvidia-l4(nvidia L4 小写 L,而不是数值 14)。
    • MAX_INSTANCE 替换为实例数上限。此数量不能超过为您的项目分配的 GPU 配额
    • GPU_ZONAL_REDUNDANCY 替换为 no-gpu-zonal-redundancy 以关闭可用区级冗余,或替换为 gpu-zonal-redundancy 以开启可用区级冗余。

    YAML

    1. 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置

      gcloud run services describe SERVICE --format export > service.yaml
    2. 更新 nvidia.com/gpu: 属性和 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

      您需要进行如下替换:

      • SERVICE 替换为您的 Cloud Run 服务的名称。
      • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
      • CONTAINER_PORT 替换为为您的服务设置的容器端口。
      • CPU 替换为 CPU 数量。您必须至少指定 4 个 CPU。
      • MEMORY 替换为内存量。您必须指定至少 16Gi (16 GiB)。
      • GPU_TYPE 替换为值 nvidia-l4(nvidia-L4 小写 L,而不是数值 14)。
      • MAX_INSTANCE 替换为实例数上限。此数量不能超过为您的项目分配的 GPU 配额
      • GPU_ZONAL_REDUNDANCY 替换为 false 以开启 GPU 可用区级冗余,或替换为 true 以关闭该功能。
    3. 使用以下命令创建或更新服务:

      gcloud run services replace service.yaml

    Terraform

    如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

    将以下内容添加到 Terraform 配置中的 google_cloud_run_v2_service 资源:

    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"
        }
      }
    }
    

    您需要进行如下替换:

    • SERVICE 替换为您的 Cloud Run 服务的名称。
    • GPU_ZONAL_REDUNDANCY 替换为 false 以开启 GPU 可用区级冗余,或替换为 true 以关闭该功能。
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • CPU 替换为 CPU 数量。您必须至少指定 4 个 CPU。
    • MEMORY 替换为内存量。您必须指定至少 16Gi (16 GiB)。
    • GPU_TYPE 替换为值 nvidia-l4(nvidia-L4 小写 L,而不是数值 14)。

    查看 GPU 设置

    如需查看 Cloud Run 服务的当前 GPU 设置,请执行以下操作:

    控制台

    1. 在 Google Cloud 控制台中,前往 Cloud Run:

      转到 Cloud Run

    2. 点击您感兴趣的服务以打开“服务详细信息”页面。

    3. 点击修订版本标签页。

    4. 在右侧的详细信息面板中,“容器”标签页下列出了 CPU 设置。

    gcloud

    1. 使用以下命令:

      gcloud run services describe SERVICE
    2. 在返回的配置中找到 GPU 设置。

    移除 GPU

    您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 移除 GPU。

    控制台

    1. 在 Google Cloud 控制台中,前往 Cloud Run:

      转到 Cloud Run

    2. 从菜单中选择服务,然后点击部署容器以配置新服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

    3. 如果您要配置新服务,请填写初始服务设置页面,然后点击容器、卷、网络、安全性以展开服务配置页面。

    4. 点击容器标签页。

      图片

      • 取消选中 GPU 复选框。
    5. 点击创建部署

    gcloud

    如需移除 GPU,请使用 gcloud run services update 命令将 GPU 数量设置为 0

      gcloud run services update SERVICE --gpu 0
      

    SERVICE 替换为您的 Cloud Run 服务的名称。

    YAML

    1. 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置

      gcloud run services describe SERVICE --format export > service.yaml
    2. 删除 nvidia.com/gpu:nodeSelector: run.googleapis.com/accelerator: nvidia-l4 行。

    3. 使用以下命令创建或更新服务:

      gcloud run services replace service.yaml

    默认情况下,所有 NVIDIA L4 驱动程序库都会装载到 /usr/local/nvidia/lib64 下。 Cloud Run 会自动将此路径附加到包含 GPU 的容器的 LD_LIBRARY_PATH 环境变量(即 ${LD_LIBRARY_PATH}:/usr/local/nvidia/lib64)。这可让动态链接器找到 NVIDIA 驱动程序库。该链接器会按照您在 LD_LIBRARY_PATH 环境变量中列出的顺序搜索和解析路径。您在此变量中指定的任何值的优先级都高于默认的 Cloud Run 驱动程序库路径 /usr/local/nvidia/lib64

    如果您想使用大于 12.2 的 CUDA 版本,最简单的方法是依赖于已安装向前兼容性软件包的较新 NVIDIA 基础映像。另一种方法是手动安装 NVIDIA 向前兼容性软件包,并将其添加到 LD_LIBRARY_PATH。请参阅 NVIDIA 的兼容性矩阵,确定哪些 CUDA 版本与提供的 NVIDIA 驱动程序版本 (535.216.03) 向后兼容。

    关于 GPU 和实例数上限

    具有 GPU 的实例的数量受到以下两种限制: