使用ACS算力快速搭建生成式会话应用

阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。

使用前准备

已注册阿里云账号并完成实名认证。具体操作,请参见注册阿里云账号个人实名认证

背景知识介绍

  • 本教程所使用两个开源项目,分别是RWKV-RunnerChatGPT-Next-Web。RWKV-Runner是一个0.1b的大模型并提供RESTful API对外提供在线推理服务,ChatGPT-Next-Web是会话应用的WebUI。RWKV-Runner与ChatGPT-Next-Web形成前后端分离架构的生成式AI会话应用,通过容器镜像部署到ACS集群中。完成本教程后,您将创建生成式AI会话应用。

    image.png

  • 如果您想了解更多Kubernetes相关概念,可以通过CNCF × Alibaba 云原生技术公开课深入学习Kubernetes。

操作流程

当您首次使用ACS时,您需要开通并授权容器计算服务ACS,然后创建集群,在集群中部署生成式AI应用。

image

步骤一:开通并授权容器计算服务ACS

首次使用时,您需要开通容器计算服务ACS,并为其授权相应云资源的访问权限。

  1. 登录容器计算服务控制台,单击前往开通

  2. 前往容器计算服务ACS开通页面,按提示完成产品授权开通。

  3. 返回容器计算服务管理控制台并刷新页面,单击前往授权。

  4. 前往容器计算服务授权页面,按提示完成产品授权。

    完成以上授权后,刷新控制台即可使用容器计算服务ACS。

步骤二:创建ACS集群

本步骤介绍如何通过配置主要参数快速创建一个ACS集群。

  1. 登录容器计算服务控制台,在左侧导航栏选择集群

  2. 集群页面,单击页面左上角的创建集群

  3. 创建集群页面,进行如下配置。未说明的配置项使用默认设置即可。

    配置项

    说明

    示例

    集群名称

    填写集群的名称。

    ACS-Demo。

    地域

    选择集群所在的地域。

    华北2(北京)。

    选择专有网络

    设置集群的网络。ACS集群仅支持专有网络。支持自动创建使用已有的VPC。

    • 自动创建:集群会自动新建一个VPC,并在VPC中自动创建NAT网关以及配置SNAT规则。

    • 使用已有:您可以在已有VPC列表中选择所需的VPC和交换机。如需访问公网,例如下载容器镜像,则需要配置NAT网关。建议将容器镜像上传到集群所在区域的阿里云镜像服务,并通过内网VPC地址拉取镜像。

    详细信息,请参见创建和管理专有网络

    选择自动创建

    API Server 访问配置

    设置集群API Server是否可在公网访问,当您需要从公网远程管理集群时,需要配置弹性公网IP(EIP)。

    选中使用 EIP 暴露 API Server

    服务发现

    单击显示高级选项下拉框,设置是否开启集群服务发现能力。当你需要服务发现能力时,需选择开启CoreDNS

    选择CoreDNS。

  4. 单击确认配置,然后选中并阅读服务协议,单击创建集群

    说明

    集群的创建时间一般约为10分钟。创建完成后,在集群页面,可以看到新创建的集群。

步骤三:使用ACS控制台部署RWKV-Runner

本步骤指导您如何在新创建的ACS集群中使用通用型实例快速部署一个无状态应用(Deployment)RWKV-Runner,并将该应用RESTful API在集群内公开。关于创建Deployment的详细参数描述,请参见创建无状态工作负载Deployment

  1. 登录容器计算服务控制台,在集群页面,单击目标集群名称(即ACS-Demo)。

  2. 在左侧导航栏,选择工作负载 > 无状态

  3. 无状态页面,单击使用镜像创建

  4. 应用基本信息配置向导,设置应用名称rwkv-runner,选择实例类型通用型QoS类型default,单击下一步

  5. 容器配置向导,配置容器的相关信息,单击下一步

    配置项

    说明

    示例值

    镜像名称

    直接输入不包含镜像Tag的镜像地址或单击选择镜像来选择所需的镜像。

    registry.cn-beijing.aliyuncs.com/acs-demo-ns/rwkv-runner

    镜像Tag

    单击选择镜像Tag选择镜像的版本。

    1.0.0

    CPU

    根据需要为该应用指定所需的CPU核数。

    1 Core

    内存

    根据需要为该应用指定所需的内存大小。

    2 GiB

    端口

    设置容器的端口。

    • 名称:runner

    • 容器端口:8000

    • 协议:TCP

  6. 高级配置向导,单击服务(Service)右侧的创建

  7. 创建服务对话框,配置以下信息,单击创建,以通过该服务集群内发布rwkv-runner的RESTful API。

    配置项

    说明

    示例值

    名称

    输入服务的名称。

    rwkv-runner-svc

    类型

    选择服务类型,即服务访问的方式。

    虚拟集群IP

    端口映射

    设置服务端口容器端口容器端口需要与后端的Pod中暴露的容器端口一致。

    • 名称:runner

    • 服务端口:80

    • 容器端口:8000

    • 协议:TCP

    image

  8. 高级配置向导,单击右下角的创建

    创建成功后,默认进入创建完成配置向导,显示应用包含的对象。您可以单击查看应用详情进行查看。

    image.png

步骤四:使用ACS集群证书部署并公开ChatGPT-Next-Web

本步骤指导您如何使用ACS集群证书在新创建的ACS集群中使用通用型实例快速部署一个无状态应用(Deployment)ChatGPT-Next-Web,并将该应用公网公开。关于创建Deployment的详细参数描述,请参见创建无状态工作负载Deployment

  1. 登录容器计算服务控制台,在集群页面,单击目标集群名称(即ACS-Demo)。

  2. 集群信息页面,单击连接信息页签,获取公网访问证书,然后按页面提示放置到相应位置。

  3. 使用以下示例应用的YAML内容,创建名为chat-next-web.yaml的文件。

    展开查看chat-next-web.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: chat-frontend-svc
    spec:
      ports:
        - name: chat
          port: 80
          protocol: TCP
          targetPort: 3000
      selector:
        app: chat-frontend
      type: LoadBalancer
    
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: chat-frontend
      name: chat-frontend
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: chat-frontend
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            alibabacloud.com/compute-class: general-purpose  # 通用型
            #alibabacloud.com/compute-class: performance 性能型
            app: chat-frontend
        spec:
          containers:
            - env:
                - name: BASE_URL
                  value: 'http://rwkv-runner-svc'
              image: registry.cn-beijing.aliyuncs.com/acs-demo-ns/chatgpt-next-web:amd64
              imagePullPolicy: IfNotPresent
              name: chat-frontend
              ports:
                - containerPort: 3000
                  protocol: TCP
              resources:
                requests:
                  cpu: "1"
                  memory: 2Gi
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
  4. 执行以下命令,将资源提交到ACS集群。

    kubectl apply -f chat-next-web.yaml

步骤五:使用ACS集群证书创建应用初始任务

本步骤指导您如何使用ACS集群证书在新创建的ACS集群中使用BestEffort 算力质量的实例快速创建一个任务(Job),用于RWKV-Runner应用大模型的初始化。关于创建Job的详细参数描述,请参见创建任务工作负载Job

  1. 使用以下示例应用的YAML内容,创建名为rwkv-init-job.yaml的文件。

    展开查看rwkv-init-job.yaml

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-demo
    spec:
      activeDeadlineSeconds: 600
      backoffLimit: 6
      completionMode: NonIndexed
      completions: 1
      parallelism: 1
      suspend: false
      template:
        metadata:
          labels:
            alibabacloud.com/compute-qos: best-effort # BestEffort型
            #alibabacloud.com/compute-qos: default  # 默认型
            app: job-demo
        spec:
          containers:
          - name: job
            image: registry.cn-beijing.aliyuncs.com/acs-demo-ns/rwkv-init-job:1.0.0
            imagePullPolicy: Always
            resources:
              requests:
                cpu: 500m
                memory: 1Gi
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Never
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    
  2. 执行以下命令,确认初始化任务。

    kubectl apply -f rwkv-init-job.yaml
  3. 执行以下命令,确认初始化任务执行完成。

    kubectl get pod

    预期输出:

    image.png

步骤六:测试应用

本步骤指导您如何通过服务(Service)来访问新部署的容器化应用。

  1. 登录容器计算服务控制台,在集群页面,单击目标集群名称(即ACS-Demo)。

  2. 在左侧导航栏,选择网络 > 服务

  3. 服务页面,找到新创建的服务(即chat-frontend-svc),单击External IP列的IP地址,即可访问生成式AI会话应用。

    image.png

释放资源

使用ACS集群所产生的费用包括以下两部分:

  • 创建工作负载使用的算力,由容器计算服务ACS收取。

  • 使用的其他阿里云云产品资源费用,按照各云产品规定的计费规则计费,由各云产品收取。

完成快速入门后,请参考以下场景处理集群:

  • 如果无需继续使用集群,请删除集群及关联资源。具体操作,请参见删除集群

  • 如果需要继续使用集群,请为阿里云账号充值,确保账户金额不小于100.00元人民币。关于使用ACS集群过程中用到的其他阿里云云产品资源的相关计费说明,请参见云产品资源计费