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等)的弹性部署和高效运维。

- 每个LWS副本(Replica)对应一个独立对外服务的AI推理实例(Serve实例)。
- Replica内的每个Pod对应Serve实例中的各个并行切片,如Tensor Parallel的各个分片对应一个Pod,每个Pod有唯一编号,用于模型分片、通信等。
- Replica内的Pod可划分为Leader和Worker。一般情况下,Leader不仅需要承担业务负载,还需要负责实例初始化、调度等特殊职责。但在某些特殊场景下,Leader只负责协调和管理,不参与实际的推理计算。
前提条件
- 已安装v1.27及以上版本的CCE Standard/Turbo集群。
- 请根据业务类型创建对应类型的节点和插件,且节点资源充足。
- NPU业务:已创建NPU节点,且已安装CCE AI套件(Ascend NPU)插件。
- GPU业务:已创建GPU节点,且已安装CCE AI套件(NVIDIA GPU)插件。
约束与限制
- 目前,LeaderWorkerSet插件暂不支持在线升级。
- 若需卸载LeaderWorkerSet插件,请先清除所有与LWS相关的CRD资源,再执行卸载操作。
- 该插件当前正处于上线阶段,已发布区域请以控制台实际为准。
- 该插件处于公测阶段,您可体验最新插件特性,但需要注意该版本的稳定性未得到完全的验证,不适用于CCE服务SLA。
安装插件
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“插件中心”,在右侧找到LeaderWorkerSet插件,单击“安装”。
- 在“插件安装”页面右下角单击“安装”。当“插件中心 > LeaderWorkerSet插件”右上角变为“已安装”时,则说明安装成功。
安装完成后,即可通过kubectl等工具部署LWS类型的AI推理负载。
卸载插件
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“插件中心”,在右侧找到LeaderWorkerSet插件,单击“卸载”。
- 在“卸载插件”的弹窗中输入“DELETE”,单击“确定”。当“插件中心 > LeaderWorkerSet插件”右上角变为“未安装”时,则说明卸载成功。
卸载该插件前,请先清除所有与LWS相关的CRD资源。
组件说明
容器组件 |
说明 |
资源类型 |
---|---|---|
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网关价格计算器。
- 在已有的ECS中安装kubectl,并使用kubectl连接集群,具体操作请参见通过kubectl连接集群。
- 执行以下命令,创建名为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
- 执行以下命令,创建上述资源。
kubectl apply -f vllm-lws.yaml
回显结果如下:
leaderworkerset.leaderworkerset.x-k8s.io/vllm created service/vllm-leader created
- 执行以下命令,查看相关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
- 执行以下命令,通过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 } }
版本说明
插件版本 |
支持的集群版本 |
更新特性 |
社区版本 |
---|---|---|---|
0.6.1 |
v1.27 v1.28 v1.29 v1.30 v1.31 |
CCE Standard/Turbo集群支持使用LeaderWorkerSet插件 |