この Codelab について
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 バケット。
必要なリソースを設定する手順は次のとおりです。
- この 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} - 次のコマンドを実行して、サービス アカウントを作成します。
gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
--display-name="Service account for batch inference codelab" - Secret Manager を使用して Hugging Face アクセス トークンを保存します。
gcloud secrets create $SECRET_ID \
--replication-policy="automatic"
printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=- - サービス アカウントに Secret Manager のシークレット アクセサーのロールを付与します。
gcloud secrets add-iam-policy-binding $SECRET_ID \
--member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
--role='roles/secretmanager.secretAccessor' - ファインチューニングされたモデルをホストするバケットを作成します。
gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
- サービス アカウントにバケットへのアクセス権を付与します。
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \
--role=roles/storage.objectAdmin - コンテナ イメージを保存する 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 を作成するには、次の操作を行います。
- ファインチューニング ジョブコードをホストするディレクトリを作成します。
mkdir codelab-inference-job
cd codelab-inference-job 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.")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 ボリューム マウント フラグも含まれています。
- 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 - ジョブを実行します。
ジョブが完了するまでに数分かかります。最後のコマンドの出力に表示されたリンクを使用して、ステータスを確認できます。gcloud run jobs execute inference-job --region $REGION --async
成功を確認する
ジョブが正常に実行されたことを確認するには、最後のコマンドの出力のようにジョブのログを表示します。
Cloud Storage バケットで結果を確認します。
コンソールで次の操作を行います。
- [Cloud Storage] に移動します。
inference-codelab
で始まるバケットを選択します。- [
output.txt
] を選択します。 - [認証済み 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
を実行すると、使用可能なすべてのプロジェクトのリストが表示されます。