Cloud Run ジョブでバッチ推論を実行する方法

Cloud Run ジョブでバッチ推論を実行する方法

この Codelab について

subject最終更新: 6月 4, 2025
account_circleGoogle 社員により作成

1. はじめに

概要

この Codelab では、Cloud Run ジョブを使用して、Meta の Llama 3.2-1b LLM と Cloud Run Jobs GPU を活用した vLLM を使用してバッチ推論を実行します。Cloud Run ボリューム マウントを使用して、結果を Cloud Storage に直接書き込みます。

学習内容

  • Cloud Run Jobs 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 シークレット
  • 推論結果を保存する 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 のシークレット アクセサーのロールを付与します。
    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. [認証済み URL] をクリックして、ブラウザでコンテンツを表示します。

ファイルの内容は、4 つのプロンプトとその出力にする必要があります。

6. お疲れさまでした

以上で、この Codelab は完了です。

Cloud Run のドキュメントを確認することをおすすめします。

学習した内容

  • Cloud Run Jobs 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 を実行すると、使用可能なすべてのプロジェクトのリストが表示されます。