更新时间:2025-08-27 GMT+08:00

LeaderWorkerSet插件

大规模语言模型(LLM)推理采用多节点、多GPU的分布式计算架构,通过Tensor Parallelism跨GPU切分模型参数,结合Pipeline Parallelism跨节点分配计算阶段,实现多设备协同推理。传统的Kubernetes的Deployment和StatefulSet可以用于部署LLM分布式推理,但存在一些局限性:

  • Deployment:用于部署无状态应用,虽然可以用于LLM推理,但难以管理Pod间的依赖关系和统一的生命周期。例如,滚动更新时可能导致部分 Pod 已经更新,而其他 Pod 尚未更新,从而影响推理服务的可用性。
  • StatefulSet:用于管理有状态应用,可以保证Pod的顺序部署和唯一身份。但是,StatefulSet的伸缩和更新操作相对复杂,难以实现LLM推理服务所需的快速弹性伸缩。此外,StatefulSet对Pod的删除和重建策略较为严格,可能影响服务的快速恢复。

对此,CCE Standard/Turbo集群提供了LeaderWorkerSet插件,这是一种专为AI/ML推理设计的CRD资源,能够更有效地解决在LLM分布式推理场景中Deployment和StatefulSet的局限性。该插件具有以下优势:

  • 分布式推理优化:支持Tensor Parallelism与Pipeline Parallelism并行策略,实现跨Pod的高效计算协同与零拷贝通信。
  • 组级别生命周期管理:支持组级别的弹性伸缩、滚动升级和重启,提升服务高可用性。
  • 身份标识与智能路由:每个LeaderWorkerSet(LWS)可被唯一标识,并支持基于KV Cache亲和性的智能路由。
  • 多租户资源隔离:每个团队或用户可以拥有独立的推理实例(Serve实例),实现资源隔离和灵活的资源管理。

LeaderWorkerSet插件适用于以下场景:

  • LLM分布式推理服务:适用于各种需要高性能、高吞吐量的大模型推理场景。例如,在线问答、文本生成、对话机器人、AI 辅助创作等。
  • 高性能多节点推理加速:支持vLLM、SGLang等主流AI推理框架,能够充分利用多节点的计算资源,加速推理过程。尤其适用于对推理时延有较高要求的场景,例如实时推荐、智能搜索等。
  • 会话感知型推理服务优化:对于需要保持会话状态的应用(例如聊天机器人、智能客服等),通过LeaderWorkerSet与AI Gateway联动,可以实现基于Session的精准路由,从而提高KV Cache命中率,减少重复计算,提升性能。

基本概念

LeaderWorkerSet(LWS)是Kubernetes为AI/大模型推理场景设计的一种工作负载类型,它允许以副本(Replica)为单位,将多Pod协作组成一个逻辑整体,实现复杂分布式推理任务的统一生命周期管理。LWS极大简化了AI推理服务(如vLLM、SGLang等)的弹性部署和高效运维。

图1 LWS结构图
  • 每个LWS副本(Replica)对应一个独立对外服务的AI推理实例(Serve实例)。
  • Replica内的每个Pod对应Serve实例中的各个并行切片,如Tensor Parallel的各个分片对应一个Pod,每个Pod有唯一编号,用于模型分片、通信等。
  • Replica内的Pod可划分为Leader和Worker。一般情况下,Leader不仅需要承担业务负载,还需要负责实例初始化、调度等特殊职责。但在某些特殊场景下,Leader只负责协调和管理,不参与实际的推理计算。

前提条件

  • 已安装v1.27及以上版本的CCE Standard/Turbo集群。
  • 请根据业务类型创建对应类型的节点和插件,且节点资源充足。

约束与限制

  • 目前,LeaderWorkerSet插件暂不支持在线升级。
  • 若需卸载LeaderWorkerSet插件,请先清除所有与LWS相关的CRD资源,再执行卸载操作。
  • 该插件当前正处于上线阶段,已发布区域请以控制台实际为准
  • 该插件处于公测阶段,您可体验最新插件特性,但需要注意该版本的稳定性未得到完全的验证,不适用于CCE服务SLA

安装插件

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“插件中心”,在右侧找到LeaderWorkerSet插件,单击“安装”
  3. 在“插件安装”页面右下角单击“安装”。当“插件中心 > LeaderWorkerSet插件”右上角变为“已安装”时,则说明安装成功。

    安装完成后,即可通过kubectl等工具部署LWS类型的AI推理负载。

卸载插件

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“插件中心”,在右侧找到LeaderWorkerSet插件,单击“卸载”
  3. 在“卸载插件”的弹窗中输入“DELETE”,单击“确定”。当“插件中心 > LeaderWorkerSet插件”右上角变为“未安装”时,则说明卸载成功。

    卸载该插件前,请先清除所有与LWS相关的CRD资源

组件说明

表1 LeaderWorkerSet组件

容器组件

说明

资源类型

leaderworkerset-lws-controller-manager

LWS类型资源控制器,用于对集群内相关资源进行管理。

Deployment

使用示例

根据LeaderWorkerSet提供的vLLM LeaderWorkerSet用例,向您展示如何通过LWS在GPU节点上部署vLLM分布式推理服务。vLLM支持基于Megatron-LM张量并行算法的分布式推理,其运行时由Ray框架管理。

本示例要求集群中的Pod可以访问公网,用于获取vLLM官方镜像,以及通过HuggingFace Token下载Llama-3.1-405B模型权重。您可以为集群配置SNAT规则以保证Pod能够访问公网,配置SNAT规则将涉及一定费用,具体请参见NAT网关价格计算器

  1. 在已有的ECS中安装kubectl,并使用kubectl连接集群,具体操作请参见通过kubectl连接集群
  2. 执行以下命令,创建名为vllm-lws的YAML文件,用于部署vLLM分布式推理服务。

    vim vllm-lws.yaml

    文件内容如下:

    apiVersion: leaderworkerset.x-k8s.io/v1
    kind: LeaderWorkerSet
    metadata:
      name: vllm   # LeaderWorkerSet实例名称
    spec:
      replicas: 2  # 部署2个Serve实例
      leaderWorkerTemplate:    
        size: 2    # 每个实例中通过2个Pod并发支撑推理负载,1个Leader和1个Worker
        restartPolicy: RecreateGroupOnPodRestart   
        leaderTemplate:  # 定义Leader Pod
          metadata:
            labels:
              role: leader   # 用于标识Pod角色
          spec:
            containers:
              - name: vllm-leader
                image: vllm/vllm-openai:latest    # 使用官方vLLM镜像
                env:
                  - name: HUGGING_FACE_HUB_TOKEN 
                    value: <your-hf-token>    # 请填入HuggingFace Token,用于拉取Llama-3.1-405B模型
                command:    # 启动命令,用于加载Llama-3.1-405B模型
                  - sh
                  - -c
                  - "bash /vllm-workspace/examples/online_serving/multi-node-serving.sh leader --ray_cluster_size=$(LWS_GROUP_SIZE); 
                     python3 -m vllm.entrypoints.openai.api_server --port 8080 --model meta-llama/Meta-Llama-3.1-405B-Instruct --tensor-parallel-size 8 --pipeline_parallel_size 2"
                resources:
                  limits:
                    nvidia.com/gpu: "8"   # 每个Pod中最多挂载8张NVIDIA GPU
                    memory: 1124Gi      
                    ephemeral-storage: 800Gi   # 临时存储空间,用于缓存模型权重
                  requests:
                    ephemeral-storage: 800Gi
                    cpu: 125
                ports:
                  - containerPort: 8080
                readinessProbe:   # 就绪指针
                  tcpSocket:
                    port: 8080     
                  initialDelaySeconds: 15   
                  periodSeconds: 10   
                volumeMounts:    # 在Learder Pod中挂载临时存储卷
                  - mountPath: /dev/shm
                    name: dshm
            volumes:    # 创建临时存储卷
            - name: dshm
              emptyDir:
                medium: Memory
                sizeLimit: 15Gi
        workerTemplate:   # 定义Worker Pod
          spec:
            containers:
              - name: vllm-worker
                image: vllm/vllm-openai:latest
                command:    # 启动命令,让Worker Pod作为计算节点加入Ray集群,并通过$(LWS_LEADER_ADDRESS)连接到主节点,准备参与分布式推理任务。
                  - sh
                  - -c
                  - "bash /vllm-workspace/examples/online_serving/multi-node-serving.sh worker --ray_address=$(LWS_LEADER_ADDRESS)"
                resources:
                  limits:
                    nvidia.com/gpu: "8"  # 每个pod中最多挂载8张NVIDIA GPU
                    memory: 1124Gi
                    ephemeral-storage: 800Gi
                  requests:
                    ephemeral-storage: 800Gi
                    cpu: 125
                env:
                  - name: HUGGING_FACE_HUB_TOKEN
                    value: <your-hf-token>
                volumeMounts:
                  - mountPath: /dev/shm
                    name: dshm   
            volumes:
            - name: dshm
              emptyDir:
                medium: Memory
                sizeLimit: 15Gi
    ---
    apiVersion: v1    # 用于集群内访问Serve实例
    kind: Service
    metadata:
      name: vllm-leader
    spec:
      ports:
        - name: http
          port: 8080
          protocol: TCP
          targetPort: 8080
      selector:
        leaderworkerset.sigs.k8s.io/name: vllm
        role: leader
      type: ClusterIP

  3. 执行以下命令,创建上述资源。

    kubectl apply -f vllm-lws.yaml

    回显结果如下:

    leaderworkerset.leaderworkerset.x-k8s.io/vllm created
    service/vllm-leader created

  4. 执行以下命令,查看相关Pod是否部署成功。

    kubectl get pod
    回显结果如下,状态皆为Running,则说明部署成功。其中vllm-0、vllm-0-1同属一个Serve实例,vllm-1、vllm-1-1同属一个Serve实例,且vllm-0和vllm-1为Leader。
    NAME       READY     STATUS     RESTARTS    AGE
    vllm-0     1/1       Running    0           2s
    vllm-0-1   1/1       Running    0           2s
    vllm-1     1/1       Running    0           2s
    vllm-1-1   1/1       Running    0           2s

  5. 执行以下命令,通过Service的ClusterIP地址访问vllm-leader实例。

    kubectl port-forward svc/vllm-leader 8080:8080

    回显结果如下,则说明vllm-leader实例可以正常访问。

    {
      "id": "cmpl-1bb34faba88b43f9862cfbfb2200949d",
      "object": "text_completion",
      "created": 1715138766,
      "model": "meta-llama/Meta-Llama-3.1-405B-Instruct",
      "choices": [
        {
          "index": 0,
          "text": " top destination for foodies, with",
          "logprobs": null,
          "finish_reason": "length",
          "stop_reason": null
        }
      ],
      "usage": {
        "prompt_tokens": 5,
        "total_tokens": 12,
        "completion_tokens": 7
      }
    }

版本说明

表2 LeaderWorkerSet插件版本记录

插件版本

支持的集群版本

更新特性

社区版本

0.6.1

v1.27

v1.28

v1.29

v1.30

v1.31

CCE Standard/Turbo集群支持使用LeaderWorkerSet插件

v0.6.1