🦙

Cloud Run が GPU に対応! -Ollama サンプルアプリをデプロイしてみた-

2024/10/10に公開

はじめに

こんにちは、クラウドエースの第二開発部に所属している村松です。
入社したての新人エンジニアですが、Google Cloud を使って日々開発に勤しんでいます。

さて、2024年の8月に、Cloud Run の NVIDIA L4 GPU のプレビュー版サポート が公開されました。

https://cloud.google.com/run/docs/configuring/services/gpu?hl=ja

Cloud Run が GPU に対応することで、Google の Gemma や Meta の Llama などのオープンモデルを使用したカスタムチャットボットや生成 AI モデルを構築し、オートスケーリング機能によって サービスの高速化費用の削減 を実現できます。
さらに、Cloud Run Functions と組み合わせれば、イベントドリブンな AI 推論 を簡単に行うこともできるようになります。
もちろん、メディア処理や 3D レンダリングなど、多くのコンピューティング処理を必要とするサービスを Cloud Run で高速化できるというのも大きなメリットです。

そこで今回は、NVIDIA GPU 搭載の Cloud Run で Ollama を使用したサンプルアプリケーションをデプロイしてみました。
さらに、サンプルアプリのデプロイにかかる時間・レスポンスにかかる時間についても検証しました。

Ollama について

Ollama はローカル環境で大規模言語モデル (LLM) を使用するためのフレームワークです。
インターネットに接続せずに大規模な AI モデルを実行でき、豊富なモデルを使用して様々なビジネス要件に適した AI ソリューションを開発できます。
https://ollama.com/
本記事では、Ollama で Google の提供する LLM である Gemma 2 を使用してアプリケーションをデプロイしてみます。

Cloud Run で GPU を使用するための要件

Cloud Run で GPU を使用するためには、以下のページから利用登録を行う必要があります。
利用登録をするには、リージョンが us-central1 (アイオワ) のプロジェクトで Cloud Run のサービスを 1つ以上 実行している必要があります。
https://services.google.com/fb/forms/cloudrungpusignup/

さらに、サービスを作成する際に以下の条件を満たす必要があります。

  • GPUの数 1 に設定する
    現在、Cloud Run ではインスタンス1つあたり1つの GPU がサポートされています。
    2つ以上の GPU はサポートされていません。

  • リージョン us-central1 (アイオワ) に設定する
    現在、Cloud Run での GPU は us-central1 (アイオワ) でのみ利用可能となっています。
    2024年末までに europe-west4 (オランダ)asia-southeast1 (シンガポール) でも利用可能になる予定です。

サンプルアプリのデプロイと実行

以下の記事を参考に、Cloud Run で Ollama を使用したサンプルアプリをデプロイし、起動してみました。
今回は、プロジェクトの操作に Cloud Shell を使用しています。
https://cloud.google.com/blog/ja/products/application-development/run-your-ai-inference-applications-on-cloud-run-with-nvidia-gpus/

まず、Cloud Run で GPU を使用できる Google Cloud プロジェクトで Cloud Shell を起動して、Dockerfile を作成します。

nano Dockerfile

次に、Dockerfile を開いて、以下のコードを記述します。

Dockerfile
FROM ollama/ollama
ENV HOME /root
WORKDIR /
RUN ollama serve & sleep 10 && ollama pull gemma2
ENTRYPOINT ["ollama","serve"]

続けて、以下のコマンドでデプロイします。
GPU は1つで、GPU タイプには今回利用可能になった nvidia-l4 を指定しています。

gcloud beta run deploy --source . --port 11434 --no-cpu-throttling --cpu 8 --memory 32Gi --gpu 1 --gpu-type=nvidia-l4

すると Service name を求められるので、デプロイしたいアプリの名前を入力します。
ここでは ollama-sample としました。

Service name:  ollama-sample

次にリージョンの選択を求められますが、ここでは us-central1 を選択します。

Please specify a region:
 [1] africa-south1
 [2] asia-east1
 [3] asia-east2
 ...
 [32] us-central1
 ...
 [41] cancel
Please enter numeric choice or text value (must exactly match list item):  32

しばらく待って、Service URL が表示されればデプロイ完了です。

サービスの URL をクリックするとアプリが起動します。
画面に Ollama is running と表示されたら起動成功です!

サンプルアプリのデプロイから実行まで、筆者の環境では 15分 ほどで完了しました。
時間のほとんどはデプロイが完了するまでの待ち時間でしたが、手順は非常にシンプルで、簡単にデプロイできました。

レスポンスにかかる時間

コールドスタート時

先述の記事を参考に、Ollama を使用したサンプルアプリのコールドスタート (インスタンス数0からの起動) 時のレスポンスにかかる時間を検証してみました。
サンプルアプリの URL をクリックしてから、画面に Ollama is running と表示されるまでの時間を計測しました。

参考記事では gemma2:9b を使用した場合のコールドスタート時間は 25~30秒 となっていましたが、サンプルアプリで使用したモデル gemma2 では 約20秒 で実行できました。
恐らく参考記事にまとめられているモデルとは異なるのでコールドスタート時間も異なっていますが、短時間で実行できるという利点は確認できました。

インスタンス起動後

インスタンスが起動している状態でのレスポンスにかかる時間も計測してみました。
こちらも、URL のクリックから画面に Ollama is running と表示されるまでの時間を計測しました。

10回計測した結果、Ollama is running と表示されるまでの時間は平均 約0.28秒 でした。
モデルによる差などはあると思いますが、実際のリリース環境ではインスタンスが起動している状態でアクセスされるケースが多いと思いますし、起動後の処理は十分高速であるといえるでしょう。

おわりに

今回は、NVIDIA GPU 搭載の Cloud Run で Ollama を使用したサンプルアプリケーションをデプロイしてみました。
さらに、デプロイにかかる時間や、レスポンスにかかる時間についても検証しました。

Cloud Run で GPU を使用することで、高速な自動スケーリングなどの Cloud Run の特徴を活かした AI 推論アプリケーションを簡単に実行することができ、AI ソリューションの開発と提供がよりシンプル・迅速になることが期待されます。
一般公開が楽しみです。

Discussion