基于LKE应用平台部署LLM实现AI推理的完整指南

225 阅读16分钟

AKAMAI应用平台当前处于限量测试阶段,不建议用于生产环境。如需参与测试,请登录云管理平台的BETA页面,点击"AKAMAI应用平台BETA"旁的注册按钮。


LLM(大语言模型)是通过海量数据预训练的深度学习模型。AI 推理是让 AI 模型(如 LLM)进行“推断”并返回准确结果的方法。本教程采用的Meta AI Llama 3是开源预训练模型,支持多语言问答、编程、复杂逻辑推理等任务。 KServe 是面向Kubernetes的标准模型推理平台,专为高扩展场景设计,提供包括Hugging Face 服务运行时在内的多种模型服务环境,支持:文本生成、文本转换、Token分类、序列分类和掩码填充等机器学习任务。
Akamai App Platform for LKE预集成IstioKnative 等开源Kubernetes应用(均为KServe运行前提),并提供自动化部署能力。

本文档将指导您完成:

  1. 使用 Akamai App Platform for LKE 安装 KServe
  2. 通过 Hugging Face runtime 部署 Meta AI 的 Llama 3 模型
  3. 结合 Open WebUI 部署聊天界面
  4. 如需部署基于自定义数据集训练的额外模型,可参阅《Deploy a RAG Pipeline and Chatbot with App Platform for LKE》

如需手动在 LKE 上安装 LLM 和 RAG Pipeline,请参考《Deploy a Chatbot and RAG Pipeline for AI Inferencing on LKE》


延伸阅读,点击链接了解 Akamai Cloud Computing


图解

image.png

架构组件

基础架构

Linode GPU(NVIDIA RTX 4000): Akamai 提供多种 GPU 虚拟机,包括本教程中使用的 NVIDIA RTX 4000 以及 Quadro RTX 6000。RTX 4000 虚拟机采用 NVIDIA 的 Ada Lovelace 架构,擅长执行多种 AI 任务,包括推理图像生成。 • Linode Kubernetes Engine(LKE): LKE 是 Akamai 提供的托管版 Kubernetes 服务,用户可以无需自行搭建和维护 Kubernetes 集群,即可部署容器化应用。 • **App Platform for LKE: ** App Platform for LKE 是一个基于 Kubernetes 的平台,集成了面向开发者与运维的工具、自动化流程、自助服务功能以及容器化应用的工作负载管理能力。该平台简化了应用从开发到交付的全生命周期管理,并将多个 CNCF(云原生计算基金会)生态中的技术集成于同一环境,帮助用户灵活构建专属的 Kubernetes 架构。

软件栈

Open WebUI: 自托管的 AI 聊天机器人应用程序,兼容如 Llama 3 这样的 LLM(大语言模型),并内置用于 RAG(检索增强生成)方案的推理引擎。用户可通过该界面与 LLM 进行交互查询。 • Hugging Face: 数据科学平台及开源库,提供丰富的数据集与预训练 AI 模型。本指南所用的 Llama 3 模型需使用 Hugging Face 账户及访问密钥才能获取。 • Meta AI Llama 3: 本指南使用的 LLM 模型为 meta-llama/Meta-Llama-3-8B 。在部署之前,用户必须阅读并同意其许可协议。 • KServe: 用于部署和服务机器学习模型的推理平台。本指南将 Llama 3 大语言模型部署至 KServe,由 KServe 向其他应用(如聊天机器人界面)提供模型推理服务。 • Istio: 开源服务网格,用于保障微服务之间的连接、安全与监控。 • Knative: 在 Kubernetes 平台上用于部署与管理无服务器(Serverless)工作负载的组件。 • Kyverno: 一套完整的 Kubernetes 策略管理工具,用于实现“策略即代码(Policy-as-Code)”的生命周期管理。

前提条件

• Akamai Cloud Manager 账户,以使用包括 LKE在内的 Akamai 的云计算服务 • Hugging Face 账户,并已获得Meta AI 的 Llama 3 模型的访问权限,以用于拉取该模型。如需申请访问,请前往 Hugging Face 的 Llama 3-8B Instruct LLM 页面,阅读并接受许可协议,并提交相关信息 • 注册参与 Akamai App Platform 的 Beta 测试计划

• 启用 App Platform并完成配置的 LKE 集群。(推荐至少 3 个 RTX4000 Ada x1 Medium GPU 节点) 如需了解如何使用 App Platform 部署 LKE 集群,请参阅《Getting Started with App Platform for LKE》 指南。

基础设施配置

当你的 LKE 集群部署完成,且 App Platform 的 Web 用户界面已就绪后,请按照以下步骤继续完成基础架构的配置。 使用 platform-admin账户,或具有 platform-admin 角色的其他账户登录 App Platform。首次登录 App Platform 的操作指南,请参阅我们的《Getting Started with Akamai App Platform》入门指南。

启用Knative

• 顶部导航选择 view > platform
• 左侧菜单进入 Apps
• 将鼠标悬停在应用图标上并点击电源按钮以启用 Knative 和 Kyverno 应用。 启用约需数几分钟。已启用的应用会以彩色显示,并自动移至可用应用列表的顶部。

image.png

创建团队租户

团队(Teams )是平台上的隔离租户,用于支持开发、运维团队、项目管理,甚至 DTAP(开发、测试、验收、生产)流程。 每个团队都可以访问控制台,包括自助服务功能以及平台上所有可用的共享应用。 操作步骤如下:

  1. 在顶部菜单中选择 view > platform。
  2. 在左侧菜单中点击 Teams(团队)。
  3. 点击 Create Team(创建团队)。
  4. 为该团队填写一个名称。保留其他默认值,然后点击 Submit(提交) 本指南中使用的团队名称为demo

安装NVIDIA GPU Operator

NVIDIA GPU Operator可自动管理部署 GPU 所需的 NVIDIA 软件组件,包括驱动程序、Kubernetes 的 GPU 设备插件、NVIDIA 容器工具包等。

  1. 在顶部导航栏中选择 view > team,然后选择 team > admin。
  2. 在左侧菜单中点击 Shell,等待 Shell 会话加载完成。

image.png

  1. 在加载出的 Shell 会话中,使用 Helm 安装 NVIDIA GPU operator:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update
helm install --wait --generate-name -n gpu-operator --create-namespace nvidia/gpu-operator --version=v24.9.1

将 kserve-crd 所需的Helm Chart

添加至 Catalog

Helm Chart 提供了在 Kubernetes 集群中定义、安装和管理资源的信息。可以使用“添加 Helm Chart”功能将自定义的 Helm Chart 添加到 App Platform 的 Catalog(目录)中。

  1. 在左侧菜单中点击 Catalog(目录)

  2. 选择 Add Helm Chart(添加 Helm Chart)

image.png

  1. Git Repository URL(Git 仓库地址)栏中,输入 kserve-crd Helm Chart 的地址:

github.com/kserve/kser…

  1. 点击 Get Details(获取详情),系统将自动填充该 kserve-crd Helm Chart详细信息

(可选)添加目录图标: 在 ICON URL 字段中填入图像链接,可为自定义 HELM CHART 添加图标。


  1. 取消勾选 Allow teams to use this chart(允许团队使用该 Chart)
  2. 点击 **Add Chart(添加 Chart)**完成添加

为 kserve-crd Helm Chart 创建 Workload

Workload 是一种自助服务功能,用于通过 Catalog 中的 Helm Chart 创建 Kubernetes 资源。

  1. 在顶部菜单栏选择view > team,然后选择 team > admin
  2. 在左侧菜单中选择Workloads
  3. 点击Create Workload(创建工作负载)
  4. 从 Catalog 中选择 Kserve-Crd Helm Chart
  5. 点击Values(参数)
  6. 为该 Workload 命名。本教程使用的名称为 kserve-crd
  7. 将命名空间设置为 kserve
  8. 选择创建一个新的命名空间(namespace)
  9. 继续使用其余默认参数,然后点击 Submit Workload 提交后,App Platform 会创建一个 Argo CD 应用来安装 kserve-crd Helm Chart。等待该 Workload 的状态变为健康(绿色对勾表示)。这可能需要几分钟时间。

image.png

当 Workload 就绪后,点击 ArgoCD 应用链接。系统将打开新的窗口进入 Argo CD 界面:

image.png

确认 App Health 状态标记为 “Healthy(健康)”,然后返回 App Platform UI。

将 kserve-resources Helm Chart 添加到 Catalog

  1. 在左侧菜单中点击 Catalog
  2. 选择 Add Helm Chart
  3. 在 Git Repository URL 输入框中,填写 kserve-resources Helm Chart 的地址:
https://github.com/kserve/kserve/blob/v0.14.1/charts/kserve-resources/Chart.yaml

4. 点击 Get Details以填充 Helm Chart 的信息 5. 请注意 Helm Chart 默认名称为Kserve,而非 Kserve-Resources。请编辑**目标目录名称(Target Directory Name)**为 Kserve-Resources,以便后续识别

  1. 取消勾选 Allow teams to use this chart
  2. 点击 Add Chart

为 kserve-resources Helm Chart 创建 Workload

  1. 在顶部菜单栏选择 view > team,然后选择 team > admin
  2. 在左侧菜单中点击 Workloads
  3. 点击 Create Workload
  4. 从 Catalog 中选择 Kserve-Resources Helm Chart
  5. 点击 Values
  6. 为该 Workload 命名。本教程使用的名称为 kserve-resources
  7. 将命名空间设置为 kserve
  8. 选择创建一个新的命名空间
  9. 继续使用默认参数,点击Submit,Workload就绪可能需要几分钟时间

将 open-webui Helm Chart 添加到 Catalog

  1. 在左侧菜单中点击 Catalog
  2. 选择 Add Helm Chart
  3. 在 Git Repository URL 输入框中,填写 open-webui Helm Chart 的地址:
https://github.com/open-webui/helm-charts/blob/open-webui-5.20.0/charts/open-webui/Chart.yaml

4. 点击 Get Details以填充open-webui Helm Chart 信息 5. 保持 “允许团队使用此 Chart” 的选项勾选

  1. 点击Add Chart

将 inferencing-service Helm Chart 添加到 Catalog

  1. 在左侧菜单中点击Catalog
  2. 选择Add Helm Chart
  3. 在 Git Repository URL 输入框中,填写 inferencing-service Helm Chart 的地址:
https://github.com/linode/apl-examples/blob/main/inferencing-service/Chart.yaml

4. 点击Get Details以填充 inferencing-service Helm Chart 信息 5. 保持 “允许团队使用此 Chart” 的选项勾选

  1. 点击Add Chart

创建 Hugging Face Access Token

  1. 前往 Hugging Face Access Token 页面
  2. 点击 Create new token(创建新令牌)
  3. 在 Token type(令牌类型)中,选择 “Write(写入)” 权限
  4. 输入令牌名称,点击 Create token
  5. 保存你的 Access Token 信息
  6. 如需更多信息,请参考 Hugging Face 官方关于用户访问令牌 的文档

请求访问 Llama 3

如尚未完成,请申请对 Llama 3 LLM 模型的访问。前往 Hugging Face 的 Llama 3-8B Instruct LLM 页面,阅读并接受许可协议,提交相关信息。必须等待获得访问权限后才能继续。

部署并发布模型

创建 Sealed Secret

Sealed Secret 是存储在 Values Git 仓库中的一种Kubernetes Secret密钥。当你在控制台中创建 Sealed Secret 时,系统会在对应团队(Team)的命名空间中自动生成相应的 Kubernetes Secret。 在顶部菜单栏选择 view > team,然后选择 team > demo

  1. 在菜单中选择 Sealed Secrets
  2. 点击 Create SealedSecret(创建 Sealed Secret)
  3. 填写名称为 hf-secret
  4. 在类型(type)下拉框中选择kubernetes.io/opaque
  5. 添加 Key:HF_TOKEN
  6. 在 HUGGING_FACE_TOKEN 的Value 字段中填入你的 Hugging Face Access Token
  7. 点击 Submit Sealed Secret 可能需要几分钟时间才能就绪

为模型创建 Workload

  1. 在顶部菜单栏选择 view > team,然后选择 team > demo
  2. 在左侧菜单中点击 Catalog
  3. 选择 Kserve-Ai-Inferencing-Service chart
  4. 点击 Values
  5. 为该 Workload 命名。本教程使用的名称为 llama3-model
  6. 设置必要参数用于禁用边车 注入,配置 Hugging Face Token,并指定资源限制
labels:
  sidecar.istio.io/inject: "false"
env:
  - name: HF_TOKEN
    valueFrom:
      secretKeyRef:
        name: hf-secret
        key: HF_TOKEN
        optional: "false"
args:
  - --model_name=llama3
  - --model_id=meta-llama/meta-llama-3-8b-instruct
resources:
  limits:
    cpu: "12"
    memory: 24Gi
    nvidia.com/gpu: "1"
  requests:
    cpu: "6"
    memory: 12Gi
    nvidia.com/gpu: "1"

7. 点击 Submit

检查 Workload 状态

  1. Kserve-Ai-Inferencing-Service Workload 就绪可能需要几分钟。要检查构建状态,在左侧菜单点击 Shell打开shell 会话,使用kubectl命令行查看 pod 状态。 kubectl get pods
NAME                                                       READY   STATUS    RESTARTS   AGE
llama3-model-predictor-00001-deployment-86f5fc5d5d-7299c   0/2     Pending   0          4m22s
tekton-dashboard-5f57787b8c-gswc2                          2/2     Running   0          19h

  1. 如发现某个 Pod 状态为 Pending,可使用 kubectl describe pod 命令查看更多信息。将POD_NAME替换为用户Pod命名,在上述输出中llama3-model-predictor-00001-deployment-86f5fc5d5d-7299c 是处于pending状态的Pod 名称。 kubectl describe pod POD_NAME

将输出内容滚动至底部,查找 Events(事件) 部分。 如果出现 Reason(原因)为 FailedScheduling(调度失败) 的事件,说明你在 Kserve-Ai-Inferencing-Service工作负载中的 resources.request参数可能需要进行调整。

Events:
Type        Reason             Age    From               Message
----        ------             ----   ----               -------
Warning     FailedScheduling   12s    default-scheduler  0/3 nodes are available: 3 Insufficient cpu. preemption: 0/3 nodes are available: 3 No
preemption victims found for incoming pod.

若事件信息中显示 “FailedScheduling”,Insufficient cpu警告resources.request(资源请求值)设置过高。 3. 如果是这种情况,请编辑你在 Kserve-Ai-Inferencing-Service Workload 中的 resources.request参数值: a. 进入 Workloads页面 b. 选择你的 llama3-model工作负载 c. 点击 Values 标签页 d. 调整必要的 resources.request值。在上述示例中,应该降低 CPU 的数量 e. 完成资源参数调整后,点击 Submit

根据提示调整 resources.request的参数后,再次提交。等待 Workload 就绪,然后继续后续步骤发布模型。

发布模型

  1. 在菜单中选择Services(服务
  2. 点击Create Service(创建服务)
  3. 在名称下拉框中选择llama3-model-predictor服务
  4. 在 Exposure(公开方式) 选项中,选择 External(外部访问)
  5. 点击 Submit 服务准备好后,复制其 URL 保存备用。

部署并发布 AI 界面

本指南中公开发布的LLM 使用了大量端口,因此 Team 中的所有 Pod 会自动注入 Istio 边车。

边车注入是一种将额外容器及其配置添加到 Pod 模板中的机制。在此情况下,Istio 边车 会阻止 open-webui Pod 连接到llama3-model服务。因为 Team 命名空间中所有出站流量都会被 Istio 的 ServiceEntry 拦截。这意味着,在使用 open-webui Helm Chart 部署AI界面前,必须避免open-webui Pod 被注入边车。 open-webui Helm Chart 不支持添加额外标签,有两种解决方式:

  1. 在使用 open-webui Helm Chart的 Git 仓库源
  2. 添加 Kyverno 策略,自动为 open-webui Pod 添加 sidecar.istio.io/inject: "false"标签。

若选择Kyverno 策略,完成以下步骤以添加 Kyverno 安全策略:

  1. 在 Apps 中选择 Gitea 应用
  2. 进入 team-demo-argocd仓库
  3. 点击 Add File(添加文件) 下拉菜单,选择 New File(新建文件),命名为 open-webui-policy.yaml,填入指定内容
apiVersion: kyverno.io/v1
kind: Policy
metadata:
  name: disable-sidecar-injection
  annotations:
    policies.kyverno.io/title: Disable Istio sidecar injection
spec:
  rules:
  - name: disable-sidecar-injection
    match:
      any:
      - resources:
          kinds:
          - StatefulSet
          - Deployment
          selector:
            matchLabels:
              ## change the value to match the name of the Workload
              app.kubernetes.io/instance: "llama3-ui"
    mutate:
      patchStrategicMerge:
        spec:
          template:
            metadata:
              labels:
                sidecar.istio.io/inject: "false"

4. 可选添加标题或注释,点击Commit Changes(提交变更)

image.png

  1. 添加 Open WebUI 策略 a. 前往Apps,打开 Argo CD 应用 b. 使用搜索功能定位 team-demo应用,查看策略是否已生效。如尚未出现,可手动刷新该应用页面

创建 AI 界面 Workload

  1. 在顶部菜单栏选择 view > team,然后选择 team > demo
  2. 在左侧菜单中点击 Catalog
  3. 选择 Open-Webui chart
  4. 点击 Values
  5. 为该 Workload 命名。本教程使用的名称为llama3-ui。
  6. 设置相关参数并修改 openaiBaseApiUrl 为先前发布模型的服务地址,并追加 /openai/v1。 确保将nameOverride 设置为 llama3-ui
#Change the nameOverride to match the name of the Workload
nameOverride: llama3-ui
ollama:
  enabled: false
pipelines:
  enabled: false
replicaCount: 1
persistence:
  enabled: false
openaiBaseApiUrl: https://llama3-model--predictor-team-demo.<cluster-domain>/openai/v1
extraEnvVars:
  - name: WEBUI_AUTH
    value: "false"

7. 点击Submit

发布 AI 界面服务

  1. 在菜单中选择Services
  2. 点击Create Service
  3. 在名称下拉列表中选择llama3-ui服务
  4. Exposure中选择External(外部)
  5. 点击Submit

访问 Open WebUI 聊天界面

当界面部署完成后,你即可访问 Open WebUI 聊天界面。

  1. 在菜单中点击Services
  2. 在可用服务列表中,点击 llama3-ui服务的 URL,进入聊天界面

image.png

后续步骤

你可以参考《Deploy a RAG Pipeline and Chatbot with App Platform for LKE》指南,进一步扩展本教程架构,部署 RAG(检索增强生成)流程,为用户查询提供定制数据上下文。

更多信息

你可以参考以下资源,获取该主题的更多补充信息。虽然我们提供这些资料是希望对你有所帮助,但请注意,我们无法保证外部托管内容的准确性或时效性。

Akamai App Platform for LKE

Akamai App Platform Documentation


如果你喜欢我们的文章,欢迎关注我们↓↓↓

了解更多