导读:

        在大规模语言模型(LLM)推理场景中,张量并行(TP)与流水线并行(PP)已成为标配,这要求多节点、多GPU必须像“连体婴”一样协同工作 。然而,传统的Kubernetes工作负载却难以应对这一需求:Deployment无法保证Pod间的版本一致性,容易导致服务“脑裂”;StatefulSet严格的顺序重建策略又限制了高并发下的快速弹性 。

        如何在Kubernetes上实现以“组”为单位的原子化管理?Google开源的 LeaderWorkerSet (LWS) 给出了解法。本文将深入拆解LWS的架构原理,探讨其如何通过组级生命周期管理、LeaderReady启动策略及独占拓扑功能,完美适配vLLM等分布式推理框架。

        大规模语言模型(LLM)推理对计算资源要求较高,得靠多节点、多GPU的分布式计算架构来撑场面——通过Tensor Parallelism(张量并行)把模型参数拆到不同GPU上,再用Pipeline Parallelism(流水线并行)给不同节点分配计算步骤,最终实现多设备齐心协力搞推理。不过传统的Kubernetes工作负载虽然能搭起基础部署框架,但面对分布式推理的核心需求时,短板就挺明显了。而LeaderWorkerSet组件,刚好能精准解决这些麻烦事。

一、传统Kubernetes工作负载的局限性

        Deployment和StatefulSet是Kubernetes里最常用的两种工作负载,但放到LLM分布式推理这个场景里,就有点“水土不服”了,很难满足高性能、高弹性的核心要求:

        Deployment:Deployment本来是为无状态应用设计的,临时拿来部署LLM推理也不是不行,但它管不好Pod之间的“协作关系”和统一的生命周期。比如滚动更新的时候,它默认一个一个Pod更,很容易出现新版本Pod都跑起来了,老版本还在那儿干活的情况。可Tensor Parallelism架构下,所有Pod得一起加载完整模型参数才能Ready,版本不一致,服务可用性肯定受影响。

        StatefulSet:StatefulSet能管有状态应用,比如给Pod分配固定身份、按顺序部署,表面看挺符合LLM推理对节点身份的要求。但StatefulSet对Pod的删除和重建策略较为严格,可能影响服务的快速恢复,难以实现LLM推理服务所需的快速弹性伸缩。

二、LWS在大模型推理部署场景下的优势

        为了解决传统工作负载的问题云星算力调度平台接入的计算集群集成了LeaderWorkerSet插件。它是专门为AI推理场景设计的CRD资源,设计思路就是冲着解决分布式推理的协同、弹性和运维需求来的,和LLM推理的部署特性非常匹配,核心优势为:

        组级生命周期管理,用于支持组级别的弹性伸缩、滚动升级和重启,提升服务高可用性。LWS会把一起干同一个推理任务的多个Pod分成一个“副本组”,里面有1个Leader Pod(组长)和多个Worker Pod(组员)。在弹性伸缩时,是以副本组为单位做扩缩容。

        举个例子:我使用LWS初始化部署了一个分布式推理大模型,占用4个计算节点,那么这个推理副本组一共有1个leader 和3个worker 。当该推理服务负载过高需要扩容时,LWS按组扩容,最低扩容出1个新的副本组,所以额外需要4个计算节点。

三、LWS概要介绍

        简单来说,LeaderWorkerSet就是Kubernetes专门为AI/大模型推理场景量身打造的工作负载类型。它的核心思路很巧妙:把多个Pod编成一个“副本组”,当成一个整体来管。这种架构让vLLM、SGLang这些推理框架的分布式部署变得简单,解决了传统工作负载在LLM推理里的那些痛点,现在已经成了大模型推理部署的优选方案。下面是LWS的架构图:

四、安装指南

4.1版本要求

        需使用版本 ≥ 1.26 的 Kubernetes 集群。

4.2通过 Helm 安装

        若需通过 Helm 在集群中安装 LWS 的正式发布版本,执行以下命令:

CHART_VERSION=0.7.0

helm install lws oci://registry.k8s.io/lws/charts/lws \

  --version=$CHART_VERSION \

  --namespace lws-system \

  --create-namespace \

  --wait --timeout 300s

        也可执行以下命令安装:

VERSION=v0.7.0

helm install lws https://github.com/kubernetes-sigs/lws/releases/download/$VERSION/lws-chart-$VERSION.tgz \

  --namespace lws-system \

  --create-namespace \

  --wait --timeout 300s

五、Demo示例

5.1第一个demo

        以下为一个LeaderWorkerSet示例:

apiVersion: leaderworkerset.x-k8s.io/v1

kind: LeaderWorkerSet

metadata:

  name: leaderworkerset-sample

spec:

  replicas: 3

  leaderWorkerTemplate:

    size: 4

    workerTemplate:

      spec:

        containers:

        - name: nginx

          image: nginxinc/nginx-unprivileged:1.27

          resources:

            limits:

              cpu: "100m"

            requests:

              cpu: "50m"

          ports:

          - containerPort: 8080

        若要列出属于某个LeaderWorkerSet(LWS)的所有Pod,可执行如下命令:

kubectl get pods --selector=leaderworkerset.sigs.k8s.io/name=leaderworkerset-sample

        输出结果类似如下:

NAME                         READY   STATUS    RESTARTS   AGE

leaderworkerset-sample-0     1/1     Running   0          6m10s

leaderworkerset-sample-0-1   1/1     Running   0          6m10s

leaderworkerset-sample-0-2   1/1     Running   0          6m10s

leaderworkerset-sample-0-3   1/1     Running   0          6m10s

leaderworkerset-sample-1     1/1     Running   0          6m10s

leaderworkerset-sample-1-1   1/1     Running   0          6m10s

leaderworkerset-sample-1-2   1/1     Running   0          6m10s

leaderworkerset-sample-1-3   1/1     Running   0          6m10s

leaderworkerset-sample-2     1/1     Running   0          6m10s

leaderworkerset-sample-2-1   1/1     Running   0          6m10s

leaderworkerset-sample-2-2   1/1     Running   0          6m10s

leaderworkerset-sample-2-3   1/1     Running   0          6m10s

    5.1Pod的多模板配置

            若指定了leaderTemplate字段,LWS支持为Leader Pod和Worker Pod配置不同模板;若未指定该字段,则workerTemplate模板将同时应用于Leader Pod和 Worker Pod。

    apiVersion: leaderworkerset.x-k8s.io/v1
    
    kind: LeaderWorkerSet
    
    metadata:
    
      name: leaderworkerset-sample
    
    spec:
    
      replicas: 3
    
      leaderWorkerTemplate:
    
        size: 4
    
        leaderTemplate:
    
          spec:
    
        workerTemplate:
    
          spec:

      5.3启动策略

            .spec.startupPolicy用于控制Worker有状态集(StatefulSet)相对于其LeaderPod的创建时机,包含以下两种配置选项:

      • LeaderCreated(默认):LeaderPod对象一旦创建,LWS控制器便会立即创建Worker有状态集。此策略不保证Leader与Worker之间的就绪顺序。
      • LeaderReady:LWS控制器会延迟创建Worker有状态集,直至LeaderPod处于就绪(Ready)状态。
      apiVersion: leaderworkerset.x-k8s.io/v1
      
      kind: LeaderWorkerSet
      
      metadata:
      
        name: leaderworkerset-sample
      
      spec:
      
        startupPolicy: LeaderReady
      
        replicas: 3
      
        leaderWorkerTemplate:
      
        ...

        5.4LWS与拓扑调度的专属绑定

                LWS的注解leaderworkerset.sigs.k8s.io/exclusive-topology可定义LWS副本与拓扑调度的1:1绑定关系。例如,为提升分布式推理的跨节点通信效率,需将某个LWS副本调度至同一机架,可按如下配置实现:

        apiVersion: leaderworkerset.x-k8s.io/v1
        
        kind: LeaderWorkerSet
        
        metadata:
        
          name: leaderworkerset-sample
        
          annotations:
        
            leaderworkerset.sigs.k8s.io/exclusive-topology: rack
        
        spec:
        
          replicas: 3
        
          leaderWorkerTemplate:
        
          ...

        六、算力调度平台集成LWS构建LLM大模型推理能力

                算力调度平台的大模型推理服务功能,支持用户将LLM大模型权重文件上传到平台统一管理,支持创建推理服务,平台自动将纳管的LLM大模型部署到计算节点,对外提供OpenAI兼容的API接口。

                算力调度平台的模型自动部署功能基于LWS构建,支持推理服务快速扩缩容。


        📡更多系列文章、开源项目、关键洞察、深度解读、技术干货

        🌟请持续关注佳杰云星

        💬欢迎在评论区留言,或私信博主交流 大模型推理架构 经验~

        Logo

        有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

        更多推荐