1. はじめに
概要
Cloud Run に GPU のサポートが追加されました。ウェイティング リストに登録したユーザー向けの公開プレビュー版として提供されています。この機能をお試しになる場合は、こちらのフォームに記入してウェイティング リストにご登録ください。Cloud Run は Google Cloud 上のコンテナ プラットフォームであり、クラスタを管理することなく、コンテナでコードを簡単に実行できます。
現在、利用可能な GPU は、24 GB の vRAM を搭載した Nvidia L4 GPU です。Cloud Run インスタンスごとに 1 つの GPU があり、Cloud Run の自動スケーリングは引き続き適用されます。これには、最大 5 つのインスタンスへのスケールアウト(割り当ての増加が可能)と、リクエストがない場合のゼロ インスタンスへのスケールダウンが含まれます。
GPU のユースケースの 1 つに、独自のオープン大規模言語モデル(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
Gemma とのチャットが完了したら、 と入力して終了できます。
/bye
4. Storage バケットを作成する
モデルがダウンロードされたので、モデルを 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 --platform=linux/amd64 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
サービス イメージを保存する 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 イメージを pull します。
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
env:
- name: OLLAMA_MODELS
value: /root/.ollama/models
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 サービスをテストする
ウェブブラウザでサービス URL を開きます。
UI の読み込みが完了したら、[Select a model] で [Gemma 2 2B] を選択します。
Gemma に質問します(例: 「空はなぜ青いの?」)。
8. 完了
以上で、この Codelab は完了です。
Cloud Run functions のドキュメントを確認することをおすすめします。
学習した内容
- Cloud Run で複数のコンテナ サービスを作成する方法
- Gemma 2 2B モデルを提供するサイドカーとして Ollama をデプロイする方法
- Open WebUI をフロントエンドの Ingress コンテナとしてデプロイする方法
9. クリーンアップ
Cloud Run functions を削除するには、Cloud Run Cloud Console(https://console.cloud.google.com/run)に移動して、ollama-sidecar-codelab サービスを削除します。
プロジェクト全体を削除する場合は、https://console.cloud.google.com/cloud-resource-manager に移動し、ステップ 2 で作成したプロジェクトを選択して [削除] を選択します。プロジェクトを削除する場合は、Cloud SDK でプロジェクトを変更する必要があります。gcloud projects list を実行すると、使用可能なすべてのプロジェクトのリストを表示できます。