Cloud RunでGPUを使用する

記事タイトルとURLをコピーする

G-gen の佐々木です。2024年8月に Cloud Run で GPU の使用がサポートされました。当記事では Cloud Run で GPU を使用する方法と、GPU がサポートされている他のコンピューティングサービスとの使い分けを解説します。

Cloud Run における GPU

2024年8月に、Cloud Run での GPU 使用が Preview 公開されました。

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設定項目

サポートされる 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、ミステリ)、カラオケなど。