首页 > 其他分享 >假期充电,用阿里云 Serverless K8s + AIGC 搭建私人代码助理

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

时间:2023-05-09 12:14:08浏览次数:46  
标签:Serverless name fastchat oss AIGC ASK K8s com 7b

作者:子白、冬岛

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

image

效果预览

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 社区、强隔离四大特性。

image

大规模 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: v1
kind: Secret
metadata:
  name: oss-secret
type: Opaque
stringData:
  .ossutilconfig: |
    [Credentials]
    language=ch
    accessKeyID=${your-ak}
    accessKeySecret=${your-sk}
    endpoint=${oss-endpoint-url}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: fastchat
  name: fastchat
  namespace: default
spec:
  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: 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
  namespace: default
spec:
  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

标签:Serverless,name,fastchat,oss,AIGC,ASK,K8s,com,7b
From: https://www.cnblogs.com/alisystemsoftware/p/17384479.html

相关文章

  • k8s容器资源需求与资源限制
    在Kubernetes中,我们可以通过为容器定义资源需求和限制来管理容器的资源使用。资源需求(ResourceRequests):指容器在调度和运行时需要的最小资源。当定义了资源需求后,Kubernetes会根据该需求进行调度,安排节点资源。如果节点不能满足指定的需求,Pod将不会被调度。资源需求包括:CP......
  • k8s容器安全上下文
    k8s在创建和管理Pod时,可以设置一些安全限制。它包括以下几个方面:1.自主访问控制(DAC):每个容器都有一个默认的用户ID,可以通过PodSecurityContext或SecurityContext来修改它。通过限制各个容器使用不同的用户ID或组ID,可以减小容器之间的攻击面。2.Linux功能:将内核管理权限......
  • k8s 节点压力驱逐
    节点压力驱逐节点压力驱逐是 kubelet 主动终止Pod以回收节点上资源的过程。kubelet 监控集群节点的内存、磁盘空间和文件系统的inode等资源。当这些资源中的一个或者多个达到特定的消耗水平,kubelet可以主动地使节点上一个或者多个Pod失效,以回收资源防止饥饿。在节......
  • K8S:分享一次“乌龙问题”(人为导致的无法正常删除命名空间)
    问题背景背景是这样的,我有一套测试用的K8S集群,发现无法正常删除命名空间了,一直处于Terminating状态,强制删除也不行。于是,再次手动创建了一个名为“test-b”的命名空间,同样也是不能正常删除。于是,展开了排查。不过,查到最后,发现是个毫无技术含量的“乌龙问题”。结果不重要,重要的......
  • k8s集群组件
    k8s集群有以下组件:Master:Kubernetes集群的控制中心,包括:APIServer:在Kubernetes集群中,APIserver扮演一个接口,使用户和管理员可以通过kubectl或其他工具与集群进行交互,而不必直接与底层组件打交道。同时,所有其他Kubernetes组件,包括kubelet、kube-proxy、controllerman......
  • k8s pod概念
    KubernetesPod是Kubernetes中最小的可部署单元,是一个或多个相互协作的应用容器的集合,它们共享相同的网络命名空间和存储卷。每个Pod都有一个唯一的IP地址,用于和其他Pod进行通信。Pod的核心概念如下:Pod是一个逻辑主机,它可以包含多个容器,其中pause容器作为其他容器的......
  • 还原k8s控制节点
    0、基础环境配置参照节点建立搭建配置1、从旧控制节点拷贝/opt/kubernets/usr/local/bin/kubectl/usr/lib/systemd/system/etcd.service/usr/lib/systemd/system/kube-apiserver.service/usr/lib/systemd/system/kube-controller-manager.service/usr/lib/systemd/system/ku......
  • 二进制部署K8S v1.27.x
    1.1系统环境系统:Rockylinux8.7x64cat/etc/hosts----172.16.10.81flyfish81172.16.10.82flyfish82172.16.10.83flyfish83172.16.10.84flyfish84172.16.10.85flyfish85-----本次部署为前三台Rockylinux8.6x64flyfish81做为master部署flyfish82......
  • AIGC生产工艺流程之games生产流程
    AIGC生产工艺流程中的“games生产流程”主要是指游戏的生产过程。一般来说,游戏生产流程包括游戏设计、策划、程序开发、美术制作、音效制作等等环节,具体流程可以根据不同公司和项目有所差异。其中游戏设计一般是一个较为重要的环节,主要确定游戏的整体架构和玩法规则;策划环节是根据......
  • k8s sa
    serviceacount=sa创建sa,会自动创建一个token。root@myang-computer:~/yaml#kubectlcreatesamysaserviceaccount/mysacreatedroot@myang-computer:~/yaml#kubectlgetsaNAMESECRETSAGEdefault12d4hmysa114sroot@myang-comput......