1. 简介
概览
Cloud Run 最近添加了 GPU 支持。此功能目前为公开预览版,但需要申请加入等候名单。如果您有兴趣试用此功能,请填写此表单以加入等候名单。Cloud Run 是 Google Cloud 上的一个容器平台,可让您轻松在容器中运行代码,而无需管理集群。
目前,我们提供的 GPU 是配备 24 GB vRAM 的 Nvidia L4 GPU。每个 Cloud Run 实例有一个 GPU,并且 Cloud Run 自动扩缩功能仍然适用。这包括横向扩容到最多 5 个实例(可申请增加配额),以及在没有请求时缩容到零个实例。
GPU 的一个应用场景是运行您自己的开放大语言模型 (LLM)。本教程将引导您完成部署运行 LLM 的服务。
在此 Codelab 中,您将部署一个多容器服务,该服务使用 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
设置环境变量
您可以设置本 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. 创建 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. 创建存储分区
现在,模型已下载完毕,您可以将模型移至 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 --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 映像。
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
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 服务
现在,在 Web 浏览器中打开服务网址。
界面完成加载后,在选择模型下,选择 Gemma 2 2B。
现在,向 Gemma 提问,例如“为什么天空是蓝色的?”
8. 恭喜!
恭喜您完成此 Codelab!
建议您查看有关 Cloud Run functions 的文档
所学内容
- 如何在 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 查看所有可用项目的列表。