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 は、インスタンスのライフサイクル全体に対して課金されます。
  • gcloud beta を使用して GPU 構成でソースコードからサービスまたは関数をデプロイすると、Cloud Run はデフォルトの e2-standard-2 マシンタイプ(プレビュー)ではなく、 e2-highcpu-8 マシンタイプを使用します。マシンタイプが大きいほど、より上位の CPU サポートが得られるとともにネットワーク帯域幅が大きくなり、ビルド時間が短縮されます。

GPU 非ゾーン冗長性

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

非ゾーン冗長性を有効にする方法については、GPU を使用した Cloud Run ジョブの構成をご覧ください。

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

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

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

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

parallelism の値は、ゾーン冗長性のない 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. Verify 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. Verify 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 ジョブをご覧ください。
  8. 必要なロール

    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

    非ゾーン冗長性を有効にするには、--no-gpu-zonal-redundancy を指定する必要があります。これは、ジョブでの GPU 使用に必要です。

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

        gcloud beta run jobs create JOB_NAME \
          --image=IMAGE \
          --gpu=1 \
          --no-gpu-zonal-redundancy

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

    • 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 \
          --no-gpu-zonal-redundancy

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

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

    YAML

    アノテーション run.googleapis.com/gpu-zonal-redundancy-disabled: を「true」に設定する必要があります。これにより、ジョブの GPU に必要な非ゾーン冗長性が有効になります。

    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:
          metadata:
            annotations:
              run.googleapis.com/gpu-zonal-redundancy-disabled: 'true'
          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:run.googleapis.com/gpu-zonal-redundancy-disabled: 'true'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 と並列処理について

    ジョブ実行で並列タスクを実行する場合は、parallelism 値を、プロジェクトに割り当てた該当する割り当て上限の最小値より小さい値に設定します。デフォルトでは、並列実行されるタスクの GPU ジョブ インスタンスの割り当ては 5 に設定されています。割り当ての増加をリクエストするには、割り当てを増やす方法をご覧ください。GPU タスクは可能な限り迅速に開始され、最大数に達します。最大数は、プロジェクトに割り当てた GPU 割り当ての量と選択したリージョンによって異なります。parallelism を GPU 割り当て上限よりも大きく設定すると、Cloud Run のデプロイは失敗します。

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

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