1. 簡介
總覽
Cloud Run 最近新增了 GPU 支援。這項產品可做為候補名單的公開預先發布版。如有意試用這項功能,請填寫這份表單,加入候補名單。Cloud Run 是 Google Cloud 上的容器平台,可讓您輕鬆在容器中執行程式碼,不必管理叢集。
目前,我們提供的 GPU 是 Nvidia L4 GPU,具有 24 GB 的 vRAM。每個 Cloud Run 執行個體有一個 GPU,但仍適用 Cloud Run 自動調整資源配置功能。包括向外擴充 5 個執行個體 (可增加配額),以及在沒有任何要求時將執行個體縮減至零。
GPU 的其中一個用途是執行您自己的開放式大型語言模型 (LLM)。本教學課程將逐步引導您部署執行 LLM 的服務。
在本程式碼研究室中,您將部署使用 Open WebUI 做為前端輸入容器的多容器服務,並在補充資訊中使用 Ollama,為儲存在 Google Cloud Storage 值區中的 Gemma 2 2B 模型提供服務。
課程內容
- 如何在 Cloud Run 中建立多個容器服務
- 如何部署 Ollama 做為提供 Gemma 2 2B 模型的附屬服務
- 如何將 Open WebUI 部署為前端 Ingress 容器
2. 設定環境變數並啟用 API
升級 gcloud CLI
首先,您必須安裝最新版本的 gcloud CLI。如要更新 CLI,請執行下列指令:
gcloud components update
設定環境變數
您可以設定在本程式碼研究室中使用的環境變數。
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
啟用 API
開始使用本程式碼研究室之前,您必須先啟用多個 API。本程式碼研究室需要使用下列 API。您可以執行下列指令來啟用這些 API:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ artifactregistry.googleapis.com
為本程式碼研究室建立目錄。
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. 建立 GCS 值區來儲存 Gemma 2 2B 模型
首先,您必須安裝 Ollama 才能下載模型。這會將模型下載至 /home/$USER/.ollama/models
curl -fsSL https://ollama.com/install.sh | sh
現在只要跑步以跑 ollama 吧
ollama serve
Ollama 開始監聽通訊埠 11434。
開啟第二個終端機視窗,將 Gemma 2 2B 模型下載至
ollama pull gemma2:2b
(選用) 如要透過指令列與 Gemma 互動,請執行下列指令:
ollama run gemma2:2b
與 Gemma 聊天完畢後,只要輸入
/bye
4. 建立 Storage 值區
模型下載完成後,您可以將模型移至 GCS 值區。
首先建立值區。
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
接著,將模型資料夾移至 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 建立前端入口容器。
使用 docker 下拉 Open WebUI 映像檔。
docker pull ghcr.io/open-webui/open-webui:main
然後將 Docker 設為使用您的 Google Cloud 憑證,透過 Artifact Registry 進行驗證。這樣您就能使用 Docker 將映像檔推送至 Artifact Registry 存放區。
gcloud auth configure-docker us-central1-docker.pkg.dev
標記映像檔,然後推送至 Artifact Registry。
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 服務
現在請在網路瀏覽器中開啟服務網址。
等 UI 載入完成後,請在「Select a model」下方選擇「Gemma 2 2B」。
接著詢問 Gemma 問題,例如「為什麼天空是藍色的?」
8. 恭喜!
恭喜您完成程式碼研究室!
建議您參考 Cloud Run 函式的說明文件
涵蓋內容
- 如何在 Cloud Run 中建立多個容器服務
- 如何部署 Ollama 做為提供 Gemma 2 2B 模型的附屬服務
- 如何將 Open WebUI 部署為前端 Ingress 容器
9. 清理
為避免產生意外費用 (舉例來說,如果 Cloud Run 服務意外叫用次數超過免費方案的每月 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
來查看所有可用專案的清單。