假期充电,用阿里云 Serverless K8s + AIGC 搭建私人代码助理

AIGC
后台-插件-广告管理-内容页头部广告(手机)

1000万云上开发者,全栈云产品0元试用:点击「链接」免费试用,即刻开启云上实践之旅!

作者:子白、冬岛

AI 技术正在引领科技创新浪潮,随着 ChatGPT 和 Midjourney 的走红,AIGC 技术正在世界范围内掀起一股 AI 技术浪潮。开源领域也涌现了许多类似模型,如 FastGPT、Moss、Stable Diffusion 等。这些模型展现出的惊人效果吸引企业和开发者们投身其中,但是复杂繁琐的部署方式成为了拦路虎。阿里云 ASK 提供 Serverless 化的容器服务,用户无需关心资源及环境配置,可以帮助开发者们零门槛快速部署 AI 模型。本文以开源的 FastChat 为例,详细展示如何在 ASK 中快速搭建一个私人代码助理。目前,ASK 已加入阿里云免费试用计划,为开发者、企业提供一定额度的试用资源。

假期充电,用阿里云 Serverless K8s + AIGC 搭建私人代码助理

效果预览

Cursor + GPT-4 的代码生成是不是觉得很智能,我们通过 FastChat + VSCode 插件也能做到一样的效果!

  • 快速生成一个 Golang Hello World

地址:https://intranetproxy.alipay.com/skylark/lark/0/2023/gif/11431/1682574183392-11e16131-3dae-4969-a0d1-79a0a9eefb01.gif

  • 快速生成一个 Kubernetes Deployment

地址:https://intranetproxy.alipay.com/skylark/lark/0/2023/gif/11431/1682574192825-7a1d3c76-025d-45db-bea1-4ca5dd885520.gif

背景介绍

ASK(Alibaba Serverless Kubernetes)是阿里云容器服务团队提供的一款面向 Serverless 场景的容器产品。用户可以使用 Kubernetes API 直接创建 Workload,免去节点运维烦恼。ASK 作为容器 Serverless 平台,具有免运维、弹性扩容、兼容 K8s 社区、强隔离四大特性。

假期充电,用阿里云 Serverless K8s + AIGC 搭建私人代码助理

大规模 AI 应用训练和部署主要面临以下挑战。

  • GPU 资源受限且训练成本较高

大规模 AI 应用在训练及推理时都需要使用 GPU,但是很多开发者缺少 GPU 资源。单独购买 GPU 卡,或者购买 ECS 实例都需要较高成本。

  • 资源异构

并行训练时需要大量的 GPU 资源,这些 GPU 往往是不同系列的。不同 GPU 支持的 CUDA 版本不同,且跟内核版本、nvidia-container-cli 版本相互绑定,开发者需要关注底层资源,为 AI 应用开发增加了许多难度。

  • 镜像加载慢

AI 类应用镜像经常有几十 GB,下载往往需要几十分钟甚至数小时。

针对上述问题,ASK 提供了完美的解决方案。在 ASK 中可以通过 Kubernetes Workload 十分方便的使用 GPU 资源,无需其前置准备使用,用完即可立即释放,使用成本低。ASK 屏蔽了底层资源,用户无需关心 GPU、CUDA 版本等等的依赖问题,只需关心 AI 应用的自身逻辑即可。同时,ASK 默认就提供了镜像缓存能力,当 Pod 第 2 次创建时可以秒级启动。

部署流程

1. 前提条件

  • 已创建 ASK 集群。具体操作,请参见创建 ASK 集群[1]
  • 下载 llama-7b 模型并上传到 OSS 。具体操作,请参见本文附录部分。

2. 使用 Kubectl 创建

替换 yaml 文件中变量

${your-ak} 您的 AK

${your-sk} 您的 SK

${oss-endpoint-url} OSS 的 enpoint

${llama-oss-path} 替换为存放 llama-7b 模型的地址(路径末尾不需要/),如 oss://xxxx/llama-7b-hf

apiVersion: v1kind: Secretmetadata:  name: oss-secrettype: OpaquestringData:  .ossutilconfig: |    [Credentials]    language=ch    accessKeyID=${your-ak}    accessKeySecret=${your-sk}    endpoint=${oss-endpoint-url}---apiVersion: apps/v1kind: Deploymentmetadata:  labels:    app: fastchat  name: fastchat  namespace: defaultspec:  replicas: 1  selector:    matchLabels:      app: fastchat  strategy:    rollingUpdate:      maxSurge: 100%      maxUnavailable: 100%    type: RollingUpdate  template:    metadata:      labels:        app: fastchat        alibabacloud.com/eci: "true"       annotations:        k8s.aliyun.com/eci-use-specs: ecs.gn6e-c12g1.3xlarge    spec:      volumes:      - name: data        emptyDir: {}      - name: oss-volume        secret:          secretName: oss-secret      dnsPolicy: Default      initContainers:      - name: llama-7b        image: yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/ossutil:v1        volumeMounts:          - name: data            mountPath: /data          - name: oss-volume            mountPath: /root/            readOnly: true        command:         - sh        - -c        - ossutil cp -r ${llama-oss-path} /data/        resources:          limits:            ephemeral-storage: 50Gi      containers:      - command:        - sh        - -c         - "/root/webui.sh"        image: yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/fastchat:v1.0.0        imagePullPolicy: IfNotPresent        name: fastchat        ports:        - containerPort: 7860          protocol: TCP        - containerPort: 8000          protocol: TCP        readinessProbe:          failureThreshold: 3          initialDelaySeconds: 5          periodSeconds: 10          successThreshold: 1          tcpSocket:            port: 7860          timeoutSeconds: 1        resources:          requests:            cpu: "4"            memory: 8Gi          limits:            nvidia.com/gpu: 1            ephemeral-storage: 100Gi        volumeMounts:        - mountPath: /data          name: data---apiVersion: v1kind: Servicemetadata:  annotations:    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCU  name: fastchat  namespace: defaultspec:  externalTrafficPolicy: Local  ports:  - port: 7860    protocol: TCP    targetPort: 7860    name: web  - port: 8000    protocol: TCP    targetPort: 8000    name: api  selector:    app: fastchat  type: LoadBalancer

3. 等待 FastChat Ready

等待 pod ready 后,在浏览器中访问 http://${externa-ip}:7860

启动后需要下载 vicuna-7b 模型,模型大小约 13GB

下载模型时间大概耗时约 20 分钟左右,如果提前做好磁盘快照,通过磁盘快照创建磁盘并挂载到 pod,就是秒级生效

kubectl get po |grep fastchat# NAME                        READY   STATUS    RESTARTS   AGE# fastchat-69ff78cf46-tpbvp   1/1     Running   0          20mkubectl get svc fastchat# NAME       TYPE           CLUSTER-IP        EXTERNAL-IP    PORT(S)          AGE# fastchat   LoadBalancer   192.168.230.108   xxx.xx.x.xxx   7860:31444/TCP   22m

剩余60%,完整内容请点击下方链接查看:

假期充电,用阿里云 Serverless K8s + AIGC 搭建私人代码助理-阿里云开发者社区

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

后台-插件-广告管理-内容页尾部广告(手机)
标签:

评论留言

我要留言

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。