在 GKE 上部署开放模型

1. 简介

概览

本实验旨在让您亲身体验如何在 Google Cloud 上部署开放模型,从简单的本地设置逐步过渡到在 Google Kubernetes Engine (GKE) 上进行生产级部署。您将学习如何使用适合开发生命周期各个阶段的不同工具。

本实验将遵循以下路径:

  • 快速原型设计:您将首先在本地运行 Ollama 模型,了解入门有多么简单。
  • 生产环境部署:最后,您将使用 Ollama 作为可扩缩的服务引擎,将模型部署到 GKE Autopilot。

了解开放模型

如今,人们通常所说的“开放模型”是指可供所有人公开下载和使用的生成式机器学习模型。这意味着模型的架构以及最重要的训练参数或“权重”会公开发布。

与通常只能通过限制性 API 访问的闭源模型相比,这种透明度具有以下几项优势:

  • 数据分析:开发者和研究人员可以“深入了解”模型,了解其内部运作方式。
  • 自定义:用户可以通过称为“微调”的过程,使模型适应特定任务。
  • 创新:它可让社区在强大的现有模型基础上构建新颖创新的应用。

Google 的贡献和 Gemma 系列模型

多年来,Google 一直是开源 AI 运动的基础贡献者。2017 年发表的论文《Attention Is All You Need》(只需依靠注意力)中介绍了革命性的 Transformer 架构,该架构是几乎所有现代大型语言模型的基础。随后,BERT、T5 和经过指令调优的 Flan-T5 等具有里程碑意义的开放模型相继问世,它们不断突破可能的界限,推动了全球范围内的研究和开发。

在这一丰富的开放式创新历史的基础上,Google 推出了 Gemma 模型系列。Gemma 模型采用与强大的闭源 Gemini 模型相同的研究成果和技术构建而成,但以开放式权重提供。对于 Google Cloud 客户,这可将尖端技术与开源的灵活性完美结合,使他们能够控制模型生命周期、与多样化的生态系统集成,并实施多云策略。

Gemma 3 精彩瞬间

在此实验中,我们将重点介绍 Gemma 3,这是该系列中最新且功能最强大的模型。Gemma 3 模型轻量级但先进,旨在在单个 GPU 甚至 CPU 上高效运行。

  • 性能和大小:Gemma 3 模型轻巧但性能出色,可在单个 GPU 甚至 CPU 上高效运行。它们在同类模型中具有卓越的质量和最先进 (SOTA) 的性能。
  • 模态:它们是多模态模型,能够处理文本和图片输入,并生成文本输出。
  • 主要功能:Gemma 3 具有 12.8 万个 token 的大上下文窗口,并支持 140 多种语言。
  • 应用场景:这些模型非常适合各种任务,包括问答、总结和推理。

主要术语

在使用开放模型时,您会遇到一些常用术语:

  • 预训练是指使用庞大而多样化的数据集训练模型,以学习通用语言模式。这些模型本质上是强大的自动补全机器。
  • 指令调优通过微调预训练模型,使其能够更好地遵循特定指令和提示。这些模型“知道如何聊天”。
  • 模型变体:开放模型通常以多种尺寸发布(例如,Gemma 3 有 1B、4B、12B 和 27B 参数版本)和变体,例如经过指令调优 (-it)、预训练或量化以提高效率的版本。
  • 资源需求:大语言模型很大,需要大量计算资源才能托管。虽然这些模型可以在本地运行,但将其部署在云端可带来显著价值,尤其是在使用 Ollama 等工具针对性能和可伸缩性进行优化时。

为何选择 GKE 来提供开放模型?

本实验将引导您从简单的本地模型执行到 Google Kubernetes Engine (GKE) 上的大规模生产部署。虽然 Ollama 等工具非常适合快速原型设计,但生产环境有一套严格的要求,而 GKE 恰好能够满足这些要求。

对于大规模 AI 应用,您需要的不仅仅是运行中的模型,还需要弹性、可扩缩且高效的服务基础架构。GKE 提供了这一基础。以下是您选择 GKE 的时间和原因:

  • 利用 Autopilot 简化管理:GKE Autopilot 会为您管理底层基础架构。您只需专注于应用配置,Autopilot 会自动预配和扩缩节点。
  • 高性能和可伸缩性:借助 GKE 的自动扩缩功能,处理要求严苛且多变的网络流量。这可确保您的应用能够以低延迟时间提供高吞吐量,并根据需要进行扩容或缩容。
  • 大规模成本效益:高效管理资源。GKE 可以将工作负载缩减为零,以避免为闲置资源付费,并且您可以利用 Spot 虚拟机来显著降低无状态推理工作负载的费用。
  • 可移植性和丰富的生态系统:借助基于 Kubernetes 的可移植部署,避免受制于供应商。GKE 还提供对庞大的 Cloud Native (CNCF) 生态系统的访问权限,以便使用出色的监控、日志记录和安全工具。

简而言之,当您的 AI 应用准备好投入生产环境,并且需要一个能够实现大规模、高性能和成熟运营的平台时,您就可以迁移到 GKE。

学习内容

在本实验中,您将学习如何执行以下任务:

  • 使用 Ollama 在本地运行开放模型。
  • 使用 Ollama 将开放模型部署到 Google Kubernetes Engine (GKE) Autopilot 以提供服务。
  • 了解如何从本地开发框架逐步过渡到 GKE 上可用于生产环境的服务架构。

2. 项目设置

Google 账号

如果您还没有个人 Google 账号,则必须先创建一个 Google 账号

请使用个人账号,而不是工作账号或学校账号。

登录 Google Cloud 控制台

使用个人 Google 账号登录 Google Cloud 控制台

启用结算功能

设置个人结算账号

如果您使用 Google Cloud 抵用金设置了结算,则可以跳过此步骤。

如需设置个人结算账号,请点击此处在 Cloud 控制台中启用结算功能

注意事项:

  • 完成本实验的 Cloud 资源费用应不到 1 美元。
  • 您可以按照本实验结束时的步骤删除资源,以避免产生更多费用。
  • 新用户符合参与 $300 USD 免费试用计划的条件。

创建项目(可选)

如果您没有想要用于此实验的当前项目,请在此处创建一个新项目

3. 打开 Cloud Shell Editor

  1. 点击此链接可直接前往 Cloud Shell 编辑器
  2. 如果系统在今天任何时间提示您进行授权,请点击授权继续。点击以授权 Cloud Shell
  3. 如果终端未显示在屏幕底部,请打开它:
    • 点击查看
    • 点击终端在 Cloud Shell 编辑器中打开新终端
  4. 在终端中,使用以下命令设置项目:
    gcloud config set project [PROJECT_ID]
    
    • 示例:
      gcloud config set project lab-project-id-example
      
    • 如果您不记得自己的项目 ID,可以使用以下命令列出所有项目 ID:
      gcloud projects list
      
      在 Cloud Shell 编辑器终端中设置项目 ID
  5. 您应会看到以下消息:
    Updated property [core/project].
    

4. 使用 Ollama 运行 Gemma

您的首要目标是在开发环境中尽快运行 Gemma 3。您将使用 Ollama,这是一款可大幅简化在本地运行大型语言模型的工具。此任务将向您展示开始尝试使用开放模型的直接方法。

Ollama 是一款免费的开源工具,可让用户在自己的计算机上本地运行生成式模型(大语言模型、视觉语言模型等)。它简化了访问这些模型并与之互动的过程,使这些模型更易于访问,并让用户能够私下使用它们。

安装并运行 Ollama

现在,您可以安装 Ollama、下载 Gemma 3 模型,并通过命令行与其互动。

  1. 在 Cloud Shell 终端中,下载并安装 Ollama:
    curl -fsSL https://ollama.com/install.sh | sh
    
    此命令会下载 Ollama、安装它并启动 Ollama 服务。
  2. 在后台启动 Ollama 服务:
    ollama serve &
    
  3. 使用 Ollama 拉取(下载)Gemma 3 1B 模型:
    ollama pull gemma3:1b
    
  4. 在本地运行模型:
    ollama run gemma3:1b
    
    ollama run 命令会显示提示 (>>>),供您向模型提问。
  5. 通过问题测试模型。例如,输入 Why is the sky blue? 并按 ENTER 键。您应该会看到如下所示的响应:
    >>> Why is the sky blue?
    Okay, let's break down why the sky is blue – it's a fascinating phenomenon related to how light interacts with the Earth's atmosphere.
    Here's the explanation:
    
    **1. Sunlight and Colors:**
    
    * Sunlight appears white, but it's actually made up of all the colors of the rainbow (red, orange, yellow, green, blue, indigo, and violet).
    Think of a prism splitting sunlight.
    
    **2. Rayleigh Scattering:**
    
    * As sunlight enters the Earth's atmosphere...
    ...
    
  6. 如需退出终端中的 Ollama 提示,请输入 /bye,然后按 Enter 键。

将 OpenAI SDK 与 Ollama 搭配使用

现在,Ollama 服务已在运行,您可以通过编程方式与其互动。您将使用与 Ollama 公开的 API 兼容的 OpenAI Python SDK。

  1. 在 Cloud Shell 终端中,使用 uv 创建并激活虚拟环境。这样可确保项目依赖项不会与系统 Python 发生冲突。
    uv venv --python 3.14
    source .venv/bin/activate
    
  2. 在终端中,安装 OpenAI SDK:
    uv pip install openai
    
  3. 在终端中输入以下内容,创建一个名为 ollama_chat.py 的新文件:
    cloudshell edit ollama_chat.py
    
  4. 将以下 Python 代码粘贴到 ollama_chat.py 中。此代码会向本地 Ollama 服务器发送请求。
    from openai import OpenAI
    
    client = OpenAI(
        base_url = 'http://localhost:11434/v1',
        api_key='ollama', # required by OpenAI SDK, but not used by Ollama
    )
    
    response = client.chat.completions.create(
        model="gemma3:1b",
        messages=[
            {
                "role": "user",
                "content": "Why is the sky blue?"
            },
        ],
    )
    print(response.choices[0].message.content)
    
  5. 在终端中运行脚本:
    python3 ollama_chat.py
    
    几秒钟后,您会看到类似于从命令行收到的响应。
  6. 如需尝试流式传输模式,请在终端中运行以下命令,创建另一个名为 ollama_stream.py 的文件:
    cloudshell edit ollama_stream.py
    
  7. 将以下内容粘贴到 ollama_stream.py 文件中。请注意请求中的 stream=True 参数。这样,模型就可以在生成 token 后立即返回。
    from openai import OpenAI
    
    client = OpenAI(
        base_url = 'http://localhost:11434/v1',
        api_key='ollama',
    )
    
    stream = client.chat.completions.create(
        model="gemma3:1b",
        messages=[
            {
                "role": "user",
                "content": "Why is the sky blue?"
            },
        ],
        stream=True
    )
    for chunk in stream:
        if chunk.choices[0].delta.content is not None:
            print(chunk.choices[0].delta.content, end="", flush=True)
    print()
    
  8. 在终端中运行流式传输脚本:
    python3 ollama_stream.py
    
    回答现在会逐个令牌显示。

流式传输是一项实用功能,可用于在聊天机器人等互动式应用中打造良好的用户体验。流式传输功能不会让用户等待整个回答生成完毕,而是会在生成回答时逐个显示回答词元。这样可以提供即时反馈,并使应用感觉更加灵敏。

您学到的知识:使用 Ollama 运行开放模型

您已成功使用 Ollama 运行了一个开放模型。您已经了解了下载 Gemma 3 等强大模型并与之互动有多么简单,无论是通过命令行界面还是以编程方式使用 Python 都可以实现。此工作流程非常适合快速原型设计和本地开发。现在,您已经为探索更高级的部署选项打下了坚实的基础。

5. 在 GKE Autopilot 上部署搭配 Ollama 的 Gemma

对于需要简化操作和可伸缩性的生产工作负载,Google Kubernetes Engine (GKE) 是理想的平台。在此任务中,您将使用 Ollama 在 GKE Autopilot 集群上部署 Gemma。

GKE Autopilot 是 GKE 中的一种运维模式,在此模式中,Google 会管理您的集群配置,包括节点、扩缩、安全性和其他预配置设置。它可打造真正的“无服务器”Kubernetes 体验,非常适合运行推理工作负载,而无需管理底层计算基础设施。

准备 GKE 环境

对于部署到 Kubernetes 的最终任务,您将预配一个 GKE Autopilot 集群。

  1. 在 Cloud Shell 终端中,为您的项目和所需区域设置环境变量。
    export PROJECT_ID=$(gcloud config get-value project)
    export REGION=europe-west1
    
    gcloud config set compute/region $REGION
    
  2. 在终端中运行以下命令,为您的项目启用 GKE API:
    gcloud services enable container.googleapis.com
    
  3. 在终端中运行以下命令,创建 GKE Autopilot 集群:
    gcloud container clusters create-auto gemma-cluster \
      --region $REGION \
      --release-channel rapid
    
  4. 在终端中运行以下命令,为新集群获取凭据:
    gcloud container clusters get-credentials gemma-cluster \
      --region $REGION
    

部署 Ollama 和 Gemma

现在,您已拥有 GKE Autopilot 集群,可以部署 Ollama 服务器了。Autopilot 会根据您在部署清单中定义的要求自动预配计算资源(CPU 和内存)。

  1. 在终端中运行以下命令,创建一个名为 gemma-deployment.yaml 的新文件:
    cloudshell edit gemma-deployment.yaml
    
  2. 将以下 YAML 配置粘贴到 gemma-deployment.yaml 中。此配置定义了一个使用官方 Ollama 映像在 CPU 上运行的部署。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ollama-gemma
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ollama-gemma
      template:
        metadata:
          labels:
            app: ollama-gemma
        spec:
          containers:
          - name: ollama-gemma-container
            image: ollama/ollama:0.12.10
            resources:
              requests:
                cpu: "8"
                memory: "8Gi"
                ephemeral-storage: "10Gi"
              limits:
                cpu: "8"
                memory: "8Gi"
                ephemeral-storage: "10Gi"
            # We use a script to start the server and pull the model
            command: ["/bin/bash", "-c"]
            args:
            - |
              ollama serve &
              OLLAMA_PID=$!
              echo "Waiting for Ollama server to start..."
              sleep 5
              echo "Pulling Gemma model..."
              ollama pull gemma3:1b
              echo "Model pulled. Ready to serve."
              wait $OLLAMA_PID
            ports:
            - containerPort: 11434
            env:
            - name: OLLAMA_HOST
              value: "0.0.0.0"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: llm-service
    spec:
      selector:
        app: ollama-gemma
      type: ClusterIP
      ports:
      - protocol: TCP
        port: 8000
        targetPort: 11434
    
    以下是 Autopilot 的配置说明:
    • image: ollama/ollama:latest:指定官方 Ollama Docker 映像。
    • resources:我们明确请求 8 个 vCPU 和 8Gi 内存。GKE Autopilot 使用这些值来预配底层计算资源。由于我们未使用 GPU,因此模型将在 CPU 上运行。8Gi 的内存足以容纳 Gemma 1B 模型及其上下文。
    • command/args:我们会替换启动命令,以确保在 Pod 启动时拉取模型。该脚本在后台启动服务器,等待服务器就绪,拉取 gemma3:1b 模型,然后让服务器保持运行。
    • OLLAMA_HOST:将此值设置为 0.0.0.0 可确保 Ollama 监听容器内的所有网络接口,从而使 Kubernetes 服务能够访问它。
  3. 在终端中,将部署清单应用到您的集群:
    kubectl apply -f gemma-deployment.yaml
    
    Autopilot 需要几分钟时间来预配资源并启动 pod。您可以使用以下工具监控该指标:
    kubectl get pods --watch
    
    等待 pod 状态为 RunningREADY1/1,然后再继续。

测试 GKE 端点

您的 Ollama 服务现在正在 GKE Autopilot 集群上运行。如需从 Cloud Shell 终端对其进行测试,您将使用 kubectl port-forward

  1. 打开一个新的 Cloud Shell 终端标签页(点击终端窗口中的 + 图标)。port-forward 命令是一个阻塞进程,因此需要有自己的终端会话。
  2. 在新终端中,运行以下命令以转发本地端口(例如 8000)到服务的端口(8000):
    kubectl port-forward service/llm-service 8000:8000
    
    您会看到表明转发已开始的输出。让此终端保持运行状态。
  3. 返回原始终端
  4. 向本地端口 8000 发送请求。Ollama 服务器公开了与 OpenAI 兼容的 API,并且由于端口转发,您现在可以通过 http://127.0.0.1:8000 访问该 API。
    curl http://127.0.0.1:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
    "model": "gemma3:1b",
    "messages": [
    {"role": "user", "content": "Explain why the sky is blue."}
    ]
    }'
    
    该服务将返回包含模型完成情况的 JSON 响应。

6. 清理

为避免系统因本实验中使用的资源向您的 Google Cloud 账号收取费用,请按照以下步骤删除 GKE 集群。

  1. 在 Cloud Shell 终端中,删除 GKE Autopilot 集群:
    gcloud container clusters delete gemma-cluster \
      --region $REGION --quiet
    
    此命令将移除集群和所有关联的资源。

7. 总结

太棒了!在本实验中,您学习了在 Google Cloud 上部署开放模型的几种关键方法。您首先体验了使用 Ollama 进行本地开发的简便性和速度。最后,您使用 Google Kubernetes Engine Autopilot 和 Ollama 框架将 Gemma 部署到了生产级可扩缩环境中。

现在,您已掌握相关知识,可以在 Google Kubernetes Engine 上部署开放模型,以处理要求严苛的可扩缩工作负载,而无需管理底层基础架构。

回顾

在本实验中,您学习了:

  • 什么是开放模型,以及它们为何重要。
  • 如何使用 Ollama 在本地运行开放模型。
  • 如何使用 OllamaGoogle Kubernetes Engine (GKE) Autopilot 上部署开放模型以进行推理。

了解详情