Cloud Run ジョブに GPU を構成する

このページでは、Cloud Run ジョブの GPU 構成について説明します。GPU は、大規模言語モデル(LLM)のトレーニングに好みのフレームワークを使用する、LLM でバッチ推論またはオフライン推論を実行する、動画処理やグラフィック レンダリングなどのコンピューティング集約型のタスクをバックグラウンド ジョブとして処理するなどの AI ワークロードに適しています。NVIDIA L4 GPU には、インスタンス メモリとは別に、24 GB の GPU メモリ(VRAM)が割り当てられます。

Cloud Run 上の GPU はフルマネージドです。追加のドライバやライブラリは必要ありません。Cloud Run でオンデマンドの CPU とオンデマンドのメモリが機能する仕組みと同様に、GPU 機能は予約なしでオンデマンドの可用性を提供します。

ドライバがプリインストールされ、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 は、ゾーン冗長性なしの料金(プレビュー版)に従います。
  • 最低でも 4 CPU と 16 GiB のメモリを使用する必要があります。
  • GPU は、インスタンスのライフサイクル全体に対して課金されます。

GPU の非ゾーン冗長性

Cloud Run ジョブは、GPU 対応インスタンスの非ゾーン冗長性サポート(プレビュー版)を提供します。非ゾーン冗長性が有効になっている場合、Cloud Run は GPU 対応ジョブのフェイルオーバーをベスト エフォート ベースで試みます。Cloud Run は、その時点で十分な GPU 容量が使用可能な場合にのみ、ジョブ実行を他のゾーンにルーティングします。このオプションでは、フェイルオーバー シナリオの予約容量は保証されませんが、GPU 秒あたりの費用は低くなります。

割り当ての増加をリクエストする

プロジェクトに GPU 割り当てがない場合は、Cloud Run サービスをデプロイして、そのリージョンで 3 つの nvidia-l4 GPU 割り当て(ゾーン冗長性オフ)を自動的に受け取ります。この自動割り当て付与は、CPU とメモリの容量に応じて利用可能になることにご注意ください。未使用のサービスを削除しても、割り当てられた割り当ては変更されません。

ジョブに追加の Cloud Run GPU が必要な場合は、割り当ての増加をリクエストします。

並行して実行できる GPU ジョブ インスタンス(タスク)の最大数は、次の割り当てによって制限されます。

並列処理の値は、どちらの割り当てがより制限的であるかに応じて、ゾーン冗長性のない GPU 割り当てまたはゾーン冗長性のないジョブ GPU インスタンス割り当てのいずれかより小さくする必要があります。

始める前に

次のリストに、Cloud Run で GPU を使用する場合の要件と制限事項を示します。

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Run API.

    Enable the API

  7. GPU を使用した Cloud Run ジョブのパフォーマンスを最適化するには、ベスト プラクティス: GPU を使用した Cloud Run ジョブをご覧ください。

必要なロール

Cloud Run ジョブの構成に必要な権限を取得するには、ジョブに対する次の IAM ロールを付与するよう管理者に依頼してください。

  • Cloud Run ジョブに対する Cloud Run デベロッパー ロール(roles/run.developer
  • サービス ID に対するサービス アカウント ユーザー ロール(roles/iam.serviceAccountUser

Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールCloud Run IAM 権限をご覧ください。Cloud Run ジョブがGoogle Cloud API(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限アクセスの管理をご覧ください。

GPU を使用して Cloud Run ジョブを構成する

Google Cloud コンソール、Google Cloud CLI、または YAML を使用して GPU を構成できます。

gcloud

GPU を有効にしたジョブを作成するには、gcloud beta run jobs create コマンドを使用します。

gcloud beta run jobs create JOB_NAME --image=IMAGE --gpu=1

次のように置き換えます。

  • JOB_NAME: Cloud Run ジョブの名前。
  • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/job:latest など)。

ジョブの GPU 構成を更新するには、gcloud beta run jobs update コマンドを使用します。

    gcloud beta run jobs update JOB_NAME \
      --image IMAGE_URL \
      --cpu CPU \
      --memory MEMORY \
      --gpu GPU_NUMBER \
      --gpu-type GPU_TYPE \
      --parallelism PARALLELISM

次のように置き換えます。

  • JOB_NAME: Cloud Run ジョブの名前。
  • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/job:latest など)。
  • CPU は、ジョブの最小 4 CPU に置き換えます。推奨値は 8 です。
  • 最小 16Gi(16 GiB)MEMORY。推奨値は 32Gi です。
  • GPU_NUMBER: 値 1(1)。これが指定されていないが GPU_TYPE が存在する場合、デフォルトは 1 です。
  • GPU_TYPE: GPU のタイプ。これが指定されていないが GPU_NUMBER が存在する場合、デフォルトは nvidia-l4 です(nvidia L4 の L は小文字、数値 14 ではありません)。
  • プロジェクトに割り当てられた該当する割り当て上限の最小値よりも小さい整数値の PARALLELISM

YAML

  1. 新しいジョブを作成する場合は、この手順をスキップします。既存のジョブを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. nvidia.com/gpu 属性、リリース ステージの annotations: run.googleapis.com/launch-stagenodeSelector:
    run.googleapis.com/accelerator
    を更新します。

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
      labels:
        cloud.googleapis.com/location: REGION
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
    template:
      spec:
        template:
          spec:
            containers:
            - image: IMAGE_URL
              limits:
                cpu: 'CPU'
                memory: 'MEMORY'
                nvidia.com/gpu: 'GPU_NUMBER'
            nodeSelector:
              run.googleapis.com/accelerator: GPU_TYPE

    次のように置き換えます。

    • JOB_NAME: Cloud Run ジョブの名前。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/job:latest など)。
    • CPU: CPU の数。少なくとも 4 個の CPU を指定する必要があります。
    • MEMORY: メモリ容量。少なくとも 16Gi(16 GiB)を指定する必要があります。
    • GPU_NUMBER: 値 1(1)。Cloud Run インスタンスごとに 1 つの GPU の接続のみをサポートしています。
    • GPU_TYPE の値は nvidia-l4 です。nvidia-L4 の L は小文字で、数値の 14 ではありません。
  3. 次のコマンドを使用して、ジョブを作成または更新します。

    gcloud run jobs replace job.yaml

GPU の設定を表示する

Cloud Run ジョブの現在の GPU 設定を表示するには:

gcloud

  1. 次のコマンドを使用します。

    gcloud run jobs describe JOB_NAME
  2. 返された構成で、GPU の設定を見つけます。

GPU を削除する

GPU は、Google Cloud CLI または YAML を使用して削除できます。

gcloud

GPU を削除するには、gcloud beta run jobs update コマンドを使用して GPU の数を 0 に設定します。

  gcloud beta run jobs update JOB_NAME --gpu 0
  

JOB_NAME は、Cloud Run ジョブの名前に置き換えます。

YAML

  1. 新しいジョブを作成する場合は、この手順をスキップします。既存のジョブを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. nvidia.com/gpu: 行と nodeSelector: run.googleapis.com/accelerator: nvidia-l4 行を削除します。

  3. 次のコマンドを使用して、ジョブを作成または更新します。

    gcloud run jobs replace job.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 ジョブ インスタンスの割り当ては 5 に設定されています。割り当ての増加をリクエストするには、割り当てを増やす方法をご覧ください。GPU タスクは可能な限り迅速に開始され、プロジェクトと選択したリージョンに割り当てた GPU 割り当て量に応じて最大値まで増加します。並列処理を GPU 割り当て上限より大きい値に設定すると、Cloud Run のデプロイは失敗します。

ジョブが実行ごとに使用する GPU 割り当てを計算するには、ジョブタスクあたりの GPU 数に並列処理の値を掛けます。たとえば、GPU 割り当てが 10 で、--gpu=1--parallelism=10 を使用して Cloud Run ジョブをデプロイすると、ジョブは 10 個の GPU 割り当てをすべて使用します。また、--gpu=1--parallelism=20 を使用してデプロイすると、デプロイは失敗します。

詳細については、ベスト プラクティス: GPU を使用した Cloud Run ジョブをご覧ください。