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