如何在 Cloud Run 作业上运行批量推理

如何在 Cloud Run 作业上运行批量推理

关于此 Codelab

subject上次更新时间:6月 4, 2025
account_circleGoogle 员工编写

1. 简介

概览

在此 Codelab 中,您将使用 Cloud Run 作业来使用 Meta 的 Llama 3.2-1b LLMvLLM(由 Cloud Run 作业 GPU 提供支持)运行批量推理。您将使用 Cloud Run 卷装载将结果直接写入 Cloud Storage。

学习内容

  • 如何使用 Cloud Run 作业 GPU 进行批量推理
  • 如何使用 Cloud Run 卷装载写入 Cloud Storage

2. 准备工作

启用 API

在开始使用此 Codelab 之前,请通过运行以下命令启用以下 API:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    secretmanager.googleapis.com \
    artifactregistry.googleapis.com

GPU 配额

为受支持的区域申请增加配额。配额为 nvidia_l4_gpu_allocation_no_zonal_redundancy,位于 Cloud Run Admin API 下。

注意:如果您使用的是新项目,则可能需要几分钟时间,API 配额才会显示在此页面中。

Hugging Face

此 Codelab 使用托管在 Hugging Face 上的模型。如需获取此模型,请请求具有“读取”权限的 Hugging Face 用户访问令牌。在下文中,我们会用 YOUR_HF_TOKEN 来引用它。

您还需要同意使用条款才能使用该模型:https://huggingface.co/meta-llama/Llama-3.2-1B

3. 设置和要求

本部分包含设置以下资源的说明:

  • IAM 服务账号和关联的 IAM 权限。
  • 用于存储 Hugging Face 令牌的 Secret Manager Secret
  • 用于存储推理结果的 Cloud Storage 存储分区。

如需设置所需资源,请按以下步骤操作:

  1. 为此 Codelab 设置环境变量:
    export PROJECT_ID=<your_project_id>
    export REGION=<your_region>
    export HF_TOKEN=<YOUR_HF_TOKEN>

    export SERVICE_ACCOUNT=inference-service-account
    export SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
    export SECRET_ID=hugging-face-token
    export BUCKET_NAME=inference-codelab-${PROJECT_ID}
  2. 运行以下命令来创建服务账号:
    gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
      --display-name="Service account for batch inference codelab"
  3. 使用 Secret Manager 存储 Hugging Face 访问令牌:
    gcloud secrets create $SECRET_ID \
         
    --replication-policy="automatic"

    printf $HF_TOKEN
    | gcloud secrets versions add $SECRET_ID --data-file=-
  4. 向您的服务账号授予 Secret Manager Secret Accessor 角色:
    gcloud secrets add-iam-policy-binding $SECRET_ID \
     
    --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
     
    --role='roles/secretmanager.secretAccessor'
  5. 创建一个存储分区来托管经过微调的模型:
    gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
  6. 向您的服务账号授予对存储分区的访问权限:
    gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
     
    --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \
     
    --role=roles/storage.objectAdmin
  7. 创建一个 Artifact Registry 仓库来存储容器映像。如果您之前在项目中使用过 Cloud Run 源代码部署,请跳过此步骤。
    gcloud artifacts repositories create cloud-run-source-deploy \
       
    --repository-format=docker \
       
    --location=$REGION \
       
    --project=$PROJECT_ID

4. 创建 Cloud Run 作业

在本部分中,您将创建以下代码:

  • 从 Hugging Face 导入 Llama 模型
  • 对模型执行批量推理。该作业在此过程中使用单个 L4 GPU。
  • 将结果写入本地磁盘。系统会通过卷挂载将其写入 Cloud Storage。

如需创建 Cloud Run 作业和 Dockerfile,请按以下步骤操作:

  1. 创建一个目录来托管微调作业代码:
    mkdir codelab-inference-job
    cd codelab
    -inference-job
  2. 创建一个名为 main.py 的文件
    # SPDX-License-Identifier: Apache-2.0
    from vllm import LLM, SamplingParams

    # Sample prompts.
    prompts = [
       
    "Cloud Run is",
       
    "The future of AI is",
       
    "The capital of Germany is",
       
    "python as a programming language is",
    ]
    # Create a sampling params object.
    sampling_params = SamplingParams(temperature=0.8, top_p=0.95)

    # Create an LLM.
    llm = LLM(model="meta-llama/Llama-3.2-1B")
    # Generate texts from the prompts. The output is a list of RequestOutput objects
    # that contain the prompt, generated text, and other information.
    outputs = llm.generate(prompts, sampling_params)

    # Save the outputs to disk
    with open("/results/output.txt", "w") as f:
       
    for output in outputs:
           
    prompt = output.prompt
           
    generated_text = output.outputs[0].text
           
    f.write(f"Prompt: {prompt!r}, Generated text: {generated_text!r}\n")

    print(f"Wrote {len(outputs)} to disk.")
  3. 创建 Dockerfile
    FROM python:3.12
    ADD main.py .
    RUN python -m pip install --upgrade pip setuptools
    RUN pip install vllm
    CMD ["python", "./main.py"]

5. 部署和执行作业

在此步骤中,您将使用 Cloud Run 源代码部署创建 Cloud Run 作业,然后执行该作业。此步骤还包含用于存储结果的 Cloud Run 卷挂载标志。

  1. 创建 Cloud Run 作业:
    gcloud beta run jobs deploy inference-job \
      --region $REGION \
      --source . \
      --gpu=1 \
      --set-secrets HF_TOKEN=${SECRET_ID}:latest \
      --add-volume name=results,type=cloud-storage,bucket=${BUCKET_NAME} \
      --add-volume-mount volume=results,mount-path=/results \
      --service-account $SERVICE_ACCOUNT_EMAIL
    此命令会根据源代码构建映像并部署作业。此过程需要一些时间才能完成。
  2. 执行作业:
    gcloud run jobs execute inference-job --region $REGION --async
    该作业需要几分钟才能完成。您可以使用上一个命令的输出中提供的链接来查看状态。

确认成功

如需确认作业是否已成功执行,请查看上一个命令的输出中显示的作业日志。

在 Cloud Storage 存储分区中查看结果:

在控制台中:

  1. 前往 Cloud Storage
  2. 选择以 inference-codelab 开头的存储分区。
  3. 选择 output.txt
  4. 点击要求验证身份的网址,在浏览器中查看相应内容。

文件中应包含四个问题及其输出。

6. 恭喜!

恭喜您完成此 Codelab!

建议您参阅 Cloud Run 文档。

所学内容

  • 如何使用 Cloud Run 作业 GPU 进行批量推理
  • 如何使用 Cloud Run 卷装载写入 Cloud Storage

7. 清理

如需删除 Cloud Run 作业,请前往 Cloud Run Cloud 控制台 (https://console.cloud.google.com/run),然后删除 inference-job 作业。

如需删除整个项目,请前往管理资源,选择您在第 2 步中创建的项目,然后选择“删除”。如果您删除该项目,则需要在 Cloud SDK 中更改项目。您可以通过运行 gcloud projects list 来查看所有可用项目的列表。