AKAMAI应用平台当前处于限量测试阶段,不建议用于生产环境。如需参与测试,请登录云管理平台的BETA页面,点击"AKAMAI应用平台BETA"旁的注册按钮。
LLM(大语言模型)是通过海量数据预训练的深度学习模型。AI 推理是让 AI 模型(如 LLM)进行“推断”并返回准确结果的方法。本教程采用的Meta AI Llama 3是开源预训练模型,支持多语言问答、编程、复杂逻辑推理等任务。
KServe
是面向Kubernetes的标准模型推理平台,专为高扩展场景设计,提供包括Hugging Face
服务运行时在内的多种模型服务环境,支持:文本生成、文本转换、Token分类、序列分类和掩码填充等机器学习任务。
Akamai App Platform for LKE预集成Istio
、Knative
等开源Kubernetes应用(均为KServe运行前提),并提供自动化部署能力。
本文档将指导您完成:
- 使用 Akamai App Platform for LKE 安装 KServe
- 通过 Hugging Face runtime 部署 Meta AI 的 Llama 3 模型
- 结合 Open WebUI 部署聊天界面
- 如需部署基于自定义数据集训练的额外模型,可参阅《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
图解
架构组件
基础架构
• 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 应用。
启用约需数几分钟。已启用的应用会以彩色显示,并自动移至可用应用列表的顶部。
创建团队租户
团队(Teams )是平台上的隔离租户,用于支持开发、运维团队、项目管理,甚至 DTAP(开发、测试、验收、生产)流程。 每个团队都可以访问控制台,包括自助服务功能以及平台上所有可用的共享应用。 操作步骤如下:
- 在顶部菜单中选择 view > platform。
- 在左侧菜单中点击 Teams(团队)。
- 点击 Create Team(创建团队)。
- 为该团队填写一个名称。保留其他默认值,然后点击 Submit(提交)
本指南中使用的团队名称为
demo。
安装NVIDIA GPU Operator
NVIDIA GPU Operator可自动管理部署 GPU 所需的 NVIDIA 软件组件,包括驱动程序、Kubernetes 的 GPU 设备插件、NVIDIA 容器工具包等。
- 在顶部导航栏中选择 view > team,然后选择 team > admin。
- 在左侧菜单中点击 Shell,等待 Shell 会话加载完成。
- 在加载出的 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(目录)中。
-
在左侧菜单中点击 Catalog(目录)
-
选择 Add Helm Chart(添加 Helm Chart)
- 在 Git Repository URL(Git 仓库地址)栏中,输入 kserve-crd Helm Chart 的地址:
- 点击 Get Details(获取详情),系统将自动填充该 kserve-crd Helm Chart详细信息
(可选)添加目录图标: 在 ICON URL 字段中填入图像链接,可为自定义 HELM CHART 添加图标。
- 取消勾选 Allow teams to use this chart(允许团队使用该 Chart)
- 点击 **Add Chart(添加 Chart)**完成添加
为 kserve-crd Helm Chart 创建 Workload
Workload 是一种自助服务功能,用于通过 Catalog 中的 Helm Chart 创建 Kubernetes 资源。
- 在顶部菜单栏选择view > team,然后选择 team > admin
- 在左侧菜单中选择Workloads
- 点击Create Workload(创建工作负载)
- 从 Catalog 中选择 Kserve-Crd Helm Chart
- 点击Values(参数)
- 为该 Workload 命名。本教程使用的名称为 kserve-crd
- 将命名空间设置为 kserve
- 选择创建一个新的命名空间(namespace)
- 继续使用其余默认参数,然后点击 Submit Workload 提交后,App Platform 会创建一个 Argo CD 应用来安装 kserve-crd Helm Chart。等待该 Workload 的状态变为健康(绿色对勾表示)。这可能需要几分钟时间。
当 Workload 就绪后,点击 ArgoCD 应用链接。系统将打开新的窗口进入 Argo CD 界面:
确认 App Health 状态标记为 “Healthy(健康)”,然后返回 App Platform UI。
将 kserve-resources Helm Chart 添加到 Catalog
- 在左侧菜单中点击 Catalog
- 选择 Add Helm Chart
- 在 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,以便后续识别
- 取消勾选 Allow teams to use this chart
- 点击 Add Chart
为 kserve-resources Helm Chart 创建 Workload
- 在顶部菜单栏选择 view > team,然后选择 team > admin
- 在左侧菜单中点击 Workloads
- 点击 Create Workload
- 从 Catalog 中选择 Kserve-Resources Helm Chart
- 点击 Values
- 为该 Workload 命名。本教程使用的名称为 kserve-resources
- 将命名空间设置为 kserve
- 选择创建一个新的命名空间
- 继续使用默认参数,点击Submit,Workload就绪可能需要几分钟时间
将 open-webui Helm Chart 添加到 Catalog
- 在左侧菜单中点击 Catalog
- 选择 Add Helm Chart
- 在 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” 的选项勾选
- 点击Add Chart
将 inferencing-service Helm Chart 添加到 Catalog
- 在左侧菜单中点击Catalog
- 选择Add Helm Chart
- 在 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” 的选项勾选
- 点击Add Chart
创建 Hugging Face Access Token
- 前往 Hugging Face Access Token 页面
- 点击 Create new token(创建新令牌)
- 在 Token type(令牌类型)中,选择 “Write(写入)” 权限
- 输入令牌名称,点击 Create token
- 保存你的 Access Token 信息
- 如需更多信息,请参考 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
- 在菜单中选择 Sealed Secrets
- 点击 Create SealedSecret(创建 Sealed Secret)
- 填写名称为
hf-secret - 在类型(type)下拉框中选择
kubernetes.io/opaque - 添加 Key:
HF_TOKEN - 在 HUGGING_FACE_TOKEN 的Value 字段中填入你的 Hugging Face Access Token
- 点击 Submit Sealed Secret 可能需要几分钟时间才能就绪
为模型创建 Workload
- 在顶部菜单栏选择 view > team,然后选择 team > demo
- 在左侧菜单中点击 Catalog
- 选择 Kserve-Ai-Inferencing-Service chart
- 点击 Values
- 为该 Workload 命名。本教程使用的名称为 llama3-model
- 设置必要参数用于禁用边车 注入,配置 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 状态
- 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
- 如发现某个 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 就绪,然后继续后续步骤发布模型。
发布模型
- 在菜单中选择Services(服务)
- 点击Create Service(创建服务)
- 在名称下拉框中选择llama3-model-predictor服务
- 在 Exposure(公开方式) 选项中,选择 External(外部访问)
- 点击 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 不支持添加额外标签,有两种解决方式:
- 在使用 open-webui Helm Chart的 Git 仓库源
- 添加 Kyverno 策略,自动为 open-webui Pod 添加 sidecar.istio.io/inject: "false"标签。
若选择Kyverno 策略,完成以下步骤以添加 Kyverno 安全策略:
- 在 Apps 中选择 Gitea 应用
- 进入 team-demo-argocd仓库
- 点击 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(提交变更)
- 添加 Open WebUI 策略 a. 前往Apps,打开 Argo CD 应用 b. 使用搜索功能定位 team-demo应用,查看策略是否已生效。如尚未出现,可手动刷新该应用页面
创建 AI 界面 Workload
- 在顶部菜单栏选择 view > team,然后选择 team > demo
- 在左侧菜单中点击 Catalog
- 选择 Open-Webui chart
- 点击 Values
- 为该 Workload 命名。本教程使用的名称为llama3-ui。
- 设置相关参数并修改 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 界面服务
- 在菜单中选择Services
- 点击Create Service
- 在名称下拉列表中选择llama3-ui服务
- 在Exposure中选择External(外部)
- 点击Submit
访问 Open WebUI 聊天界面
当界面部署完成后,你即可访问 Open WebUI 聊天界面。
- 在菜单中点击Services
- 在可用服务列表中,点击 llama3-ui服务的 URL,进入聊天界面
后续步骤
你可以参考《Deploy a RAG Pipeline and Chatbot with App Platform for LKE》指南,进一步扩展本教程架构,部署 RAG(检索增强生成)流程,为用户查询提供定制数据上下文。
更多信息
你可以参考以下资源,获取该主题的更多补充信息。虽然我们提供这些资料是希望对你有所帮助,但请注意,我们无法保证外部托管内容的准确性或时效性。
• Akamai App Platform Documentation
如果你喜欢我们的文章,欢迎关注我们↓↓↓