作者:庄宇
大语言模型的问世掀起了新一波的 AI 浪潮,而受限于个人电脑的算力资源,用户通常无法在本地运行一个资源需求庞大的AI应用。同样,由于GPU资源紧张,在本地数据中心运行大模型应用也存在挑战。同时近年来 Kubernetes 技术的兴起,也使得协同调度不同架构的计算资源成为可能。然而本地 Kubernetes 集群在运行诸如 AI 模型等对算力资源要求巨大的应用时,往往会面临资源不足的问题,因此越来越多的企业和用户选择采用混合云架构来部署自己的应用和服务。
在之前的文章 选对方法,K8s多集群管理没那么难 中,我们介绍过阿里云 ACK One 注册集群正是为混合云架构而生。无论是本地自建集群还是其他公共云厂商集群,都能够接入注册集群,在阿里云控制台进行统一操作和管理。本文介绍如何在本地通过 kind 快速创建一个 Kubernetes 集群,接入阿里云注册集群,通过本地kind集群提交一个 AI 聊天机器人服务 FastChat,最终通过云上资源运行。
关于 kind
kind 是一个通过使用 docker 容器来模拟节点,帮助用户快速创建本地 Kubernetes 集群的工具。安装 kind 前需要先安装 docker 环境。macOS 用户可以按照如下命令安装 docker 和 kind:
brew install --cask docker brew install kind
其余系统下 kind 的安装请参见:kind 官方安装教程。安装完成后,可以快速在本地创建一个 Kubernete 集群:
kind create cluster
关于 onectl
Onectl 是阿里云分布式云容器平台的命令行工具,可以帮助用户快捷管理注册集群和集群组件。其主要功能包括:
- 集群管理:帮助用户在本地管理云上注册集群,包括注册集群的创建、连接、删除与状态描述。
- 组件管理:帮助用户在本地管理注册集群中安装的组件,包括组件的安装、升级、卸载等。
更多关于 onectl 的功能描述、安装方法、使用步骤,请参见如何使用 onectl 管理注册集群。
基于注册集群快速部署一个 AI 聊天服务
前提条件
- 已在本地部署 Kubernetes 集群
- 已在本地安装并配置 onectl
通过 onectl 创建并连接注册集群
以交互式的方式创建注册集群,根据提示选择地域、VPC 等信息即可:
onectl cluster create -i onectl cluster describe --cluster-id xxx //获取集群状态,等待状态变为waiting
连接注册集群:
onectl cluster connect --cluster-id ***
更多关于使用 onectl 创建注册集群的信息,请参见如何通过onectl创建注册集群。
安装组件
要使注册集群能够使用阿里云的云上资源,并对外提供 LoadBalance 类型的 Service,需要安装 ack-virtual-node 组件和 cloud-controller-manager 组件:
onectl addon install ack-virtual-node --version v2.8.0 onectl addon install cloud-controller-manager
部署 AI 聊天服务 FastChat
FashChat 服务的资源文件 fastchat.yaml:
--- apiVersion: v1 kind: Pod metadata: labels: app: fastchat alibabacloud.com/eci: "true" annotations: # 指定云上GPU机型 k8s.aliyun.com/eci-use-specs: ecs.gn6i-c8g1.2xlarge,ecs.gn5-c8g1.2xlarge,ecs.gn6v-c8g1.8xlarge,ecs.gn6i-c16g1.4xlarge # 指定存储空间 k8s.aliyun.com/eci-extra-ephemeral-storage: 100Gi name: fastchat namespace: default spec: activeDeadlineSeconds: 3600 # 默认运行1小时,节省成本,避免忘记删除 schedulerName: eci-scheduler dnsPolicy: Default containers: - command: - sh - -c - "/root/webui.sh" image: yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/fastchat:v1.1.0 imagePullPolicy: IfNotPresent name: fastchat ports: - containerPort: 7860 protocol: TCP readinessProbe: failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 10 successThreshold: 1 tcpSocket: port: 7860 timeoutSeconds: 1 resources: requests: cpu: "8" memory: 16Gi limits: nvidia.com/gpu: 1 --- apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCU name: fastchat-svc namespace: default spec: externalTrafficPolicy: Local ports: - port: 7860 protocol: TCP targetPort: 7860 selector: app: fastchat type: LoadBalancer
其中,labels 中的 aibabacloud.com/eci 字段指定使用云上 ECI 资源运行此应用,annotations 中的 k8s.aliyun.com/eci-use-specs 指定 ECI 的资源规格。
检查服务状态:
kubectl get svc fastchat-svc
预期输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE fastchat-svc LoadBalancer 10.96.119.1 47.xxx.xxx.27 7860:30631/TCP 95s
访问 AI 聊天服务
打开浏览器,访问 http://47.xxx.xxx.27:7860:
可以看到 AI 聊天服务 FastChat 已经部署成功,并已经能正常对外提供服务。至此,我们成功在本地kind集群提交了一个AI大模型应用,并成功使用云上计算资源运行。通过接入云上无限算力,打破了本地计算资源瓶颈。
资源清理
服务使用完成后,清理相应资源:
kubectl delete -f fastchat.yaml
相关链接:
[1] 注册集群概述:
https://help.aliyun.com/document_detail/155208.html
[2] 通过 onectl 管理注册集群
[3] 通过 onectl 创建注册集群
[4] 扩容弹性容器实例ECI
11月21日直播预告:如何基于分布式云容器平台 ACK One 实现跨云协同?
- 全面上云已成现状,目前行业对云原生容器工程师的需求是什么样?人才缺口有多大?
- ACP 认证的价值和好处是什么?对整个行业的云原生人才培养有哪些积极影响?
- 云原生领域新进展?未来我们需要重点关注云原生哪些技术?快来直播间与大咖互动提问吧~
直播时间:2023年11月21日(周二)20:00
直播嘉宾:阿里云高级技术专家,庄宇;极客帮科技联合创始人&CEO 司巧蕾
点击下方链接或扫描海报二维码即刻预约: