このページでは、Cloud Run サービスの GPU 構成について説明します。GPU は、大規模言語モデル(LLM)などの AI 推論ワークロードや、動画のコード変換、3D レンダリングなどのコンピューティング集約型の AI 以外のユースケースに適しています。NVIDIA L4 GPU には、インスタンス メモリとは別に、24 GB の GPU メモリ(VRAM)が割り当てられます。
Cloud Run 上の GPU はフルマネージドです。追加のドライバやライブラリは必要ありません。Cloud Run でオンデマンドの CPU とオンデマンドのメモリが機能する仕組みと同様に、GPU 機能は予約なしでオンデマンドの可用性を提供します。GPU を使用するように構成された Cloud Run サービスのインスタンスは、未使用時にゼロにスケールダウンして、費用を節約できます。
ドライバがプリインストールされ、L4 GPU が割り当てられた Cloud Run インスタンスは約 5 秒で起動します。この時点で、コンテナで実行されているプロセスは GPU の使用を開始できます。
Cloud Run インスタンスごとに 1 つの GPU を構成できます。サイドカー コンテナを使用する場合、GPU は 1 つのコンテナにのみ接続できます。
サポートされるリージョン
asia-southeast1
(シンガポール)asia-south1
(ムンバイ)。このリージョンは招待制です。このリージョンにご興味をお持ちの場合は、Google アカウント チームにお問い合わせください。europe-west1
(ベルギー)低 CO2
europe-west4
(オランダ)低 CO2
us-central1
(アイオワ)低 CO2
us-east4
(北バージニア)
サポートされている GPU タイプ
Cloud Run インスタンスごとに 1 つの L4 GPU を使用できます。L4 GPU には、次のドライバがプリインストールされています。
- 現在の NVIDIA ドライバのバージョン: 535.216.03 (CUDA 12.2)
料金への影響
GPU の料金の詳細については、Cloud Run の料金をご覧ください。次の要件と考慮事項に注意してください。
- リクエストごとに料金は発生しません。GPU 機能を使用するには、インスタンス ベースの課金を使用する必要があります。最小インスタンスはアイドル状態の場合でも全額請求されます。
- GPU ゾーン冗長性と非ゾーン冗長性では、費用が異なります。GPU の料金の詳細については、Cloud Run の料金をご覧ください。
- 最低でも 4 CPU と 16 GiB のメモリを使用する必要があります。
- GPU は、インスタンスのライフサイクル全体に対して課金されます。
gcloud beta
を使用して GPU 構成でソースコードからサービスまたは関数をデプロイすると、Cloud Run はデフォルトのe2-standard-2
マシンタイプ(プレビュー)ではなく、e2-highcpu-8
マシンタイプを使用します。マシンタイプが大きいほど、サポートされる CPU とネットワーク帯域幅が大きくなり、ビルド時間が短縮されます。
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 を使用する場合の要件と制限事項を示します。
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run API.
- 必要な割り当てをリクエストします。
- コンテナ イメージのビルドと大規模モデルの読み込みに関する推奨事項については、ベスト プラクティス: GPU を使用した Cloud Run での AI 推論をご覧ください。
- Cloud Run サービスに次の構成があることを確認します。
- 課金設定をインスタンス ベースの課金に構成します。インスタンス ベースの課金に設定されているサービスは、ゼロにスケールできます。
- サービスには少なくとも 4 個の CPU を構成します(8 個の CPU を推奨)。
- 少なくとも 16 GiB のメモリを構成します(32 GiB を推奨)。
- GPU 使用率に最適な最大同時実行数を判断して設定します。
- [最大インスタンス数] は、各リージョンのプロジェクトあたりの GPU の割り当ての下限に設定する必要があります。GPU と最大インスタンスについてをご覧ください。
-
Cloud Run サービスに対する Cloud Run デベロッパー(
roles/run.developer
)ロール -
サービス ID に対するサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)ロール Google Cloud コンソールで Cloud Run に移動します。
メニューから [サービス] を選択し、[コンテナをデプロイ] をクリックして新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。
[コンテナ] タブをクリックします。
- 始める前にの推奨事項に従って、CPU、メモリ、同時実行、実行環境、起動プローブを構成します。
- [GPU] チェックボックスをオンにして、[GPU のタイプ] メニューから GPU タイプを選択し、[GPU の数] メニューから GPU の数を選択します。
- デフォルトでは、新しいサービスのゾーン冗長性がオンになっています。現在の設定を変更するには、GPU チェックボックスをオンにして、GPU 冗長性オプションを表示します。
- [ゾーン冗長性なし] を選択して、ゾーンの冗長性を無効にします。
- [ゾーンの冗長性] を選択して、ゾーンの冗長性を有効にします。
[作成] または [デプロイ] をクリックします。
コンテナをデプロイするには:
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 がすでに作成されている必要があります。URL はLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
の形式です。
ソースコードをデプロイし、Cloud Run で Cloud Build の
e2-highcpu-8
マシンタイプをデフォルトで使用するには、gcloud beta run deploy
コマンドを使用します。gcloud beta run deploy SERVICE \ --source . \ --gpu 1
- SERVICE: Cloud Run サービスの名前。
- IMAGE_URL: コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/hello:latest
など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL はLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
の形式です。 - CPU: CPU の数。少なくとも
4
個の CPU を指定する必要があります。 - MEMORY: メモリの量。少なくとも
16Gi
(16 GiB)を指定する必要があります。 - GPU_NUMBER: 値
1
(1)。これが指定されていないが GPU_TYPE が存在する場合、デフォルトは1
です。 - GPU_TYPE: GPU タイプ。これが指定されていないが GPU_NUMBER が存在する場合、デフォルトは
nvidia-l4
です(nvidiaL
4 の l は小文字の L、数値の 14 ではありません)。 - MAX_INSTANCE: インスタンスの最大数。この数は、プロジェクトに割り当てられた GPU 割り当てを超えることはできません。
- GPU_ZONAL_REDUNDANCY: ゾーン冗長性をオフにするには
no-gpu-zonal-redundancy
、ゾーン冗長性をオンにするにはgpu-zonal-redundancy
。 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
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 がすでに作成されている必要があります。URL は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-L
4 の l は小文字の L、数値の 14 ではありません。 - MAX_INSTANCE: インスタンスの最大数。この数は、プロジェクトに割り当てられた GPU 割り当てを超えることはできません。
- GPU_ZONAL_REDUNDANCY: GPU ゾーン冗長性をオンにするには
false
、オフにするにはtrue
。
次のコマンドを使用して、サービスを作成または更新します。
gcloud run services replace service.yaml
- SERVICE: Cloud Run サービスの名前。
- GPU_ZONAL_REDUNDANCY: GPU ゾーン冗長性をオンにするには
false
、オフにするにはtrue
。 - IMAGE_URL: コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/hello:latest
など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL はLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
の形式です。 - CPU: CPU の数。少なくとも
4
個の CPU を指定する必要があります。 - MEMORY: メモリの量。少なくとも
16Gi
(16 GiB)を指定する必要があります。 - GPU_TYPE の値は
nvidia-l4
です。nvidia-L
4 の l は小文字の L、数値の 14 ではありません。 Google Cloud コンソールで Cloud Run に移動します。
目的のサービスをクリックして、[サービスの詳細] ページを開きます。
[変更内容] タブをクリックします。
右側の詳細パネルの [コンテナ] タブに、GPU の設定が表示されます。
次のコマンドを使用します。
gcloud run services describe SERVICE
返された構成で、GPU の設定を見つけます。
Google Cloud コンソールで Cloud Run に移動します。
メニューから [サービス] を選択し、[コンテナをデプロイ] をクリックして新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。
[コンテナ] タブをクリックします。
- GPU のチェックボックスをオフにします。
[作成] または [デプロイ] をクリックします。
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
nvidia.com/gpu:
行とnodeSelector: run.googleapis.com/accelerator: nvidia-l4
行を削除します。次のコマンドを使用して、サービスを作成または更新します。
gcloud run services replace service.yaml
- [最大インスタンス数] の設定では、サービスごとのインスタンス数を制限します。これは、GPU のリージョンごとのプロジェクトあたりの割り当てよりも高く設定することはできません。
- 各リージョンのプロジェクトごとに許可される GPU の割り当て。これにより、同じリージョン内のサービス間のインスタンス数が制限されます。
必要なロール
Cloud Run サービスの構成とデプロイに必要な権限を取得するには、サービスに対する次の IAM ロールを付与するよう管理者に依頼してください。
ソースコードからサービスまたは関数をデプロイする場合は、プロジェクトと Cloud Build サービス アカウントに追加のロールが付与されている必要があります。
Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールと Cloud Run IAM 権限をご覧ください。Cloud Run サービスがGoogle Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限とアクセスの管理をご覧ください。
GPU を使用して Cloud Run サービスを構成する
構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。
Google Cloud コンソール、Google Cloud CLI、または YAML を使用して GPU を構成できます。
コンソール
gcloud
GPU を有効にしたサービスを作成するには、gcloud run deploy コマンドを使用します。
サービスの 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
次のように置き換えます。
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"
}
}
}
次のように置き換えます。
GPU の設定を表示する
Cloud Run サービスの現在のコンテナ設定を表示するには:
コンソール
gcloud
GPU の削除
GPU は、 Google Cloud コンソール、Google Cloud CLI、または YAML を使用して削除できます。
コンソール
gcloud
GPU を削除するには、gcloud run services update コマンドを使用して GPU の数を 0
に設定します。
gcloud run services update SERVICE --gpu 0
SERVICE は、Cloud Run サービスの名前に置き換えます。
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 の互換性マトリックスを参照して、提供されている NVIDIA ドライバ バージョン(535.216.03)と上位互換性がある CUDA バージョンを確認します。
GPU と最大インスタンス数について
GPU を使用するインスタンスの数は、次の 2 つの方法で制限できます。