1. はじめに
概要
Cloud Run に最近 GPU のサポートが追加されました。ウェイティング リストに登録した公開プレビュー版として入手できます。この機能をお試しになりたい場合は、こちらのフォームにご記入のうえ、順番待ちリストにご登録ください。Cloud Run は Google Cloud 上のコンテナ プラットフォームで、クラスタを管理することなく、コンテナ内でコードを簡単に実行できます。
現在提供されている GPU は、24 GB の vRAM を搭載した Nvidia L4 GPU です。Cloud Run インスタンスごとに 1 つの GPU があり、Cloud Run の自動スケーリングは引き続き適用されます。これには、最大 5 インスタンスのスケールアウト(割り当て増加を利用可能)と、リクエストがない場合はインスタンスを 0 にスケールダウンすることが含まれます。
GPU のユースケースの一つに、独自のオープン大規模言語モデル(LLM)の実行があります。このチュートリアルでは、LLM を実行するサービスをデプロイする手順について説明します。
この Codelab では、Open WebUI をフロントエンド Ingress コンテナとして使用し、サイドカーで Ollama を使用して、Google Cloud Storage バケットに保存されている Gemma 2 2B モデルを提供するマルチコンテナ サービスをデプロイします。
学習内容
- Cloud Run で複数のコンテナ サービスを作成する方法
- Gemma 2 2B モデルを提供するサイドカーとして Ollama をデプロイする方法
- Open WebUI をフロントエンド Ingress コンテナとしてデプロイする方法
2. 環境変数を設定して API を有効にする
gcloud CLI をアップグレードする
まず、gcloud CLI の最新バージョンをインストールする必要があります。CLI を更新するには、次のコマンドを実行します。
gcloud components update
環境変数を設定する
この Codelab 全体で使用する環境変数を設定できます。
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
API を有効にする
この Codelab を使用する前に、いくつかの API を有効にする必要があります。この Codelab では、次の API を使用する必要があります。これらの API を有効にするには、次のコマンドを実行します。
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ artifactregistry.googleapis.com
この Codelab 用のディレクトリを作成します。
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. Gemma 2 2B モデルを保存する GCS バケットを作成する
まず、モデルをダウンロードするために Ollama をインストールします。これにより、モデルが /home/$USER/.ollama/models にダウンロードされます。
curl -fsSL https://ollama.com/install.sh | sh
次のコマンドを実行して ollama を実行します
ollama serve
Ollama はポート 11434 でリッスンを開始します。
2 つ目のターミナル ウィンドウを開き、Gemma 2 2B モデルを pull して
ollama pull gemma2:2b
(省略可)コマンドラインから Gemma を操作するには、次のコマンドを実行します。
ollama run gemma2:2b
Gemini とのチャットを終了するには、
/bye
4. ストレージ バケットを作成する
モデルがダウンロードされたので、モデルを GCS バケットに移動できます。
まず、バケットを作成します。
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
次に、models フォルダを GCS に移動します。
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. Ollama イメージを作成する
次の内容の dockerfile を作成します。
FROM ollama/ollama # Listen on all interfaces, port 11434 ENV OLLAMA_HOST 0.0.0.0:11434 # Store model weight files in /models ENV OLLAMA_MODELS /models # Reduce logging verbosity ENV OLLAMA_DEBUG false # Never unload model weights from the GPU ENV OLLAMA_KEEP_ALIVE -1 # Store the model weights in the container image ENV MODEL gemma2:2b RUN ollama serve & sleep 5 && ollama pull $MODEL # Start Ollama ENTRYPOINT ["ollama", "serve"]
サービス イメージを保存する Artifact Registry リポジトリを作成します。
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
ollama サイドカー イメージをビルドする
gcloud builds submit \
--tag us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/ollama-gemma-2b \
--machine-type e2-highcpu-32
6. Open WebUI フロントエンド イメージを作成する
このセクションでは、Open WebUI を使用してフロントエンド Ingress コンテナを作成します。
docker を使用して Open WebUI のイメージをプルダウンします。
docker pull ghcr.io/open-webui/open-webui:main
次に、Google Cloud 認証情報を使用して Artifact Registry の認証を行うように Docker を構成します。これにより、Docker を使用して Artifact Registry リポジトリにイメージを push できるようになります。
gcloud auth configure-docker us-central1-docker.pkg.dev
イメージにタグを付けて、Artifact Registry に push します。
docker tag ghcr.io/open-webui/open-webui:main us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui docker push us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui
7. マルチコンテナ サービスを Cloud Run にデプロイする
YAML ファイルを使用してマルチコンテナ サービスをデプロイする
次の内容で service.yaml
を作成します。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: ollama-sidecar-codelab labels: cloud.googleapis.com/location: us-central1 spec: template: metadata: annotations: autoscaling.knative.dev/maxScale: '5' run.googleapis.com/cpu-throttling: 'false' run.googleapis.com/startup-cpu-boost: 'true' run.googleapis.com/container-dependencies: '{"openwebui":["ollama-sidecar"]}' spec: containerConcurrency: 80 timeoutSeconds: 300 containers: - name: openwebui image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/openwebui ports: - name: http1 containerPort: 8080 env: - name: OLLAMA_BASE_URL value: http://localhost:11434 - name: WEBUI_AUTH value: 'false' resources: limits: memory: 1Gi cpu: 2000m volumeMounts: - name: in-memory-1 mountPath: /app/backend/data startupProbe: timeoutSeconds: 240 periodSeconds: 240 failureThreshold: 1 tcpSocket: port: 8080 - name: ollama-sidecar image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/ollama-gemma-2b resources: limits: cpu: '6' nvidia.com/gpu: '1' memory: 16Gi volumeMounts: - name: gcs-1 mountPath: /root/.ollama startupProbe: timeoutSeconds: 1 periodSeconds: 10 failureThreshold: 3 tcpSocket: port: 11434 volumes: - name: gcs-1 csi: driver: gcsfuse.run.googleapis.com volumeAttributes: bucketName: YOUR_PROJECT_ID-gemma2-2b-codelab - name: in-memory-1 emptyDir: medium: Memory sizeLimit: 10Gi nodeSelector: run.googleapis.com/accelerator: nvidia-l4
service.yaml を更新して、PROJECT_ID をプロジェクト ID に置き換えます。
sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml
次のコマンドを使用して Cloud Run にデプロイします。
gcloud beta run services replace service.yaml
Cloud Run サービスをテストする
ウェブブラウザで Service URL を開きます。
UI の読み込みが完了したら、[モデルを選択] で [Gemma 2 2B] を選択します。
次に、Gemma に質問します(例: 「空はなぜ青いの?」)。
8. 完了
以上で、この Codelab は完了です。
Cloud Run の関数に関するドキュメントを確認することをおすすめします。
学習した内容
- Cloud Run で複数のコンテナ サービスを作成する方法
- Gemma 2 2B モデルを提供するサイドカーとして Ollama をデプロイする方法
- Open WebUI をフロントエンド Ingress コンテナとしてデプロイする方法
9. クリーンアップ
誤って課金されないようにするには(たとえば、Cloud Run サービスが 無料 tier の Cloud Run の月間呼び出し割り当てを超える回数で誤って呼び出された場合など)、Cloud Run を削除するか、手順 2 で作成したプロジェクトを削除します。
Cloud Run 関数を削除するには、Cloud Run Cloud コンソール(https://console.cloud.google.com/run)に移動して ollama-sidecar-codelab
サービスを削除します。
プロジェクト全体を削除する場合は、https://console.cloud.google.com/cloud-resource-manager に移動し、ステップ 2 で作成したプロジェクトを選択して、[削除] を選択します。プロジェクトを削除する場合は、Cloud SDK でプロジェクトを変更する必要があります。gcloud projects list
を実行すると、使用可能なすべてのプロジェクトのリストが表示されます。