G-gen の佐々木です。2024年8月に Cloud Run で GPU の使用がサポートされました。当記事では Cloud Run で GPU を使用する方法と、GPU がサポートされている他のコンピューティングサービスとの使い分けを解説します。
Cloud Run における GPU
2024年8月に、Cloud Run での GPU 使用が Preview 公開されました。
- 参考 : Run your AI inference applications on Cloud Run with NVIDIA GPUs
- 参考 : Google Cloud Run Adds Support for NVIDIA L4 GPUs, NVIDIA NIM, and Serverless AI Inference Deployments at Scale
Cloud Run で GPU を使用することで、GPU を使用するワークロードにおいて、柔軟かつ高速なスケーリングやオンデマンドの課金など、サーバーレス コンテナ プラットフォームの恩恵を受けることができます。
特に Google の Gemma や Meta の Llama 3 などの軽量なモデルを使用したオンライン推論や、オンデマンドの画像認識、動画のエンコーディングなどがユースケースとして想定されています。
Cloud Run における GPU は Cloud Run services と Cloud Run functions で利用することができ、Cloud Run jobs ではサポートされていません。
Cloud Run における GPU は2024年8月時点ではプレビュー提供の機能であり、us-central1(アイオワ) リージョンでのみ利用可能です。
Cloud Run で GPU を使用する方法
GPU を使用する場合の追加要件
プレビュー時点(2024年8月現在)では、GPU を使用するには Cloud Run GPU sign up ページから利用申請をする必要があります。申請から利用できるようになるまで数週間かかる場合があります。
Cloud Run のインスタンスごとに1つの GPU が利用できます。なお、サイドカーコンテナを使用している場合は、どれか1つのコンテナからのみ GPU に接続することが可能です。
また、GPU を使用する場合、Cloud Run の設定項目に以下の追加要件があります。
設定項目 | 要件・制限事項 |
---|---|
CPU の割り当て | ・インスタンスに対して CPU を常に割り当てる(CPU always allocated) ・最小で 4 CPU(推奨値は 8 CPU) |
メモリの割り当て | ・最小で 16 GiB(推奨値は 32 GiB) |
最大同時リクエスト数 | ・Cloud Run 上のワークロードにおける GPU の使用状況に合わせて調整する(参考) |
最大インスタンス数 | ・プロジェクトごと、リージョンごとの GPU 割り当てを下回る数に設定する必要がある(参考) |
GPU が利用可能になると、Cloud Run のサービス作成画面のチェックボックスや gcloud run deploy コマンドの--gpu
フラグなどから有効化することができます。
サポートされる GPU のタイプ
2024年8月時点では、NVIDIA L4 GPU のみがサポートされています。
モデルの保存場所に関する注意事項
機械学習モデルを Cloud Run にホストする場合、コンテナイメージにモデルをあらかじめ内包しておくか、Cloud Storage に保存してあるモデルをコンテナ起動時にダウンロードするかを選択します。
特に大規模なモデルを使用するようなケースでは、コンテナイメージにモデルを含めてしまうとイメージのサイズが大きくなり、ビルドにかかる時間やコンテナの起動時間に大きく影響します。このようなケースでは、Cloud Storage にモデルを保存しておき、コンテナ起動時にモデルをロードすることでパフォーマンスを向上することができます。
Cloud Run では Cloud Storage バケットをマウントする機能が提供されているため、バケットの接続は容易です。また、バケットのマウントではなく Cloud Storage API を使用すると、モデルを並列ダウンロードすることができるため、より高速なロードを実現することができます。
料金
現在 GPU が利用可能な us-central1(アイオワ)リージョンは、以下の Tier1 料金が適用されます。
GPU の種類 | 料金 |
---|---|
NVIDIA-L4 | $0.0002796 / 秒 |
GPU の利用要件として「CPU を常に割り当てる(CPU always allocated)」設定が必要となるため、CPU の料金同様に、アイドル状態のインスタンスに対しても料金が発生しますが、リクエスト単位の料金は発生しません(参考)。
また、最小インスタンス数を0に設定している場合は、アクティブもしくはアイドル状態のインスタンス数が0の期間は GPU の料金が発生しません。
最新の情報についてはドキュメントの料金ページを参照してください。
他のサービスとの使い分け
従来から GPU がサポートされていたサービスとの使い分けについては、CPU のみを使用するワークロードの場合とほぼ同じ基準で考えるとよいでしょう。
Compute Engine
Cloud Run と比較して、Compute Engine では豊富なコンピューティングリソース(CPU・メモリ)といくつかの GPU モデル(参考)を使用することができます。
Compute Engine は IaaS として提供されているため、実行環境のカスタマイズを柔軟に行うことができますが、インスタンスの運用管理はユーザー自身で行う必要があります。したがって、ワークロードに複雑な要件がある場合のみ利用することになるでしょう。
Google Kubernetes Engine(GKE)
従来、GPU を使用するコンテナ ワークロードでは Google Kubernetes Engine(GKE)が利用されてきました。GKE ではクラスタの種類(Autopilot / Standard)を問わず GPU がサポートされています。
GKE では Cloud Run 同様にコンテナによる柔軟なスケーリングやリソース効率化のメリットを享受できることに加えて、Cloud Run よりも利用できるコンピューティングリソースが豊富であり、また最大実行時間(タイムアウト)の制限がありません。その反面、ユーザー側で Kubernetes クラスタの運用をある程度行う必要があるため、管理負荷はサーバーレスである Cloud Run よりも大きくなります。
したがって、Cloud Run の制限事項に抵触するようなワークロード(重めのバッチ処理など)では GKE、もしくは後述の Batch を使用することを推奨します。
Batch
Batch を使用することで、フルマネージドの Compute Engine 環境で GPU を使用したバッチ処理を実行することができます。処理の実行後はインスタンスは自動で終了するため、Cloud Run 同様にオンデマンドの課金で利用することができます。
実行環境が Compute Engine インスタンスのため、Cloud Run よりもコンピューティングリソースが豊富に使用できることが特徴です。
Cloud Run は実行時間の制限(タイムアウト)が存在することから重めのバッチ処理のようなワークロードには向きません。また長時間実行できる Cloud Run jobs では現時点で GPU のサポートがされていないため、オフラインのバッチ処理を行うケースでは Batch(もしくは GKE)を利用するとよいでしょう。
Vertex AI Endpoint
Vertex AI Endpoint を使用することで、Vertex AI Model Registry にあるモデルを簡単にデプロイすることができます。デプロイ時に API エンドポイントが発行され、オンラインの推論タスクを実行することができます。また、新旧モデル間のトラフィック分割や負荷に応じた自動スケーリングなどの機能が提供されています。
Vertex AI Endpoint は裏側で Compute Engine インスタンスが実行されており、マシンタイプに応じた料金が常に発生します。したがって、料金面ではサーバーレスである Cloud Run が安く利用できる傾向があります。
基本的にはサーバーレスである Cloud Run の利用を推奨しますが、Vertex AI で統合されており、モデルが Model Registry にあれば簡単にデプロイできる点や、使用できるコンピューティングリソースの量や GPU の種類が多い点から、ワークロードの要件によっては Vertex AI Endpoint を利用することになるでしょう。
佐々木 駿太 (記事一覧)
G-gen最北端、北海道在住のクラウドソリューション部エンジニア
2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2024に選出。好きなGoogle CloudプロダクトはCloud Run。
趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。
Follow @sasashun0805