LeaderWorkerSet API

LeaderWorkerSet API 是什么?

  • 简称 LWS

  • 是一个 API

  • 旨在解决 AI/ML 推理工作负载的常见部署模式,尤其是多机多卡的推理工作负载,其中 LLM 将被分片并在多个节点上的多个设备上运行

    lws-img

场景

  • 用于大模型的服务推理

  • 利用多个主机的 GPU 卡完成模型部署和推理

    img

安装 lws

## install
[root@tf1-dameile-master01 ~]# VERSION=v0.6.0
[root@tf1-dameile-master01 ~]# kubectl apply --server-side -f https://github.com/kubernetes-sigs/lws/releases/download/$VERSION/manifests.yaml

namespace/lws-system serverside-applied
customresourcedefinition.apiextensions.k8s.io/leaderworkersets.leaderworkerset.x-k8s.io serverside-applied
serviceaccount/lws-controller-manager serverside-applied
role.rbac.authorization.k8s.io/lws-leader-election-role serverside-applied
clusterrole.rbac.authorization.k8s.io/lws-manager-role serverside-applied
clusterrole.rbac.authorization.k8s.io/lws-metrics-reader serverside-applied
clusterrole.rbac.authorization.k8s.io/lws-proxy-role serverside-applied
rolebinding.rbac.authorization.k8s.io/lws-leader-election-rolebinding serverside-applied
clusterrolebinding.rbac.authorization.k8s.io/lws-manager-rolebinding serverside-applied
clusterrolebinding.rbac.authorization.k8s.io/lws-metrics-reader-rolebinding serverside-applied
clusterrolebinding.rbac.authorization.k8s.io/lws-proxy-rolebinding serverside-applied
configmap/lws-manager-config serverside-applied
secret/lws-webhook-server-cert serverside-applied
service/lws-controller-manager-metrics-service serverside-applied
service/lws-webhook-service serverside-applied
deployment.apps/lws-controller-manager serverside-applied
mutatingwebhookconfiguration.admissionregistration.k8s.io/lws-mutating-webhook-configuration serverside-applied
validatingwebhookconfiguration.admissionregistration.k8s.io/lws-validating-webhook-configuration serverside-applied
[root@tf1-dameile-master01 ~]# 

## check
[root@tf1-dameile-master01 ~]# kubectl get deployments.apps -n lws-system 
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
lws-controller-manager   0/2     2            0           95s
[root@tf1-dameile-master01 ~]# kubectl get deployments.apps -n lws-system lws-controller-manager -o yaml | grep image
        image: registry.k8s.io/lws/lws:v0.6.0
        imagePullPolicy: IfNotPresent
        
## modify
registry.k8s.io/lws/lws:v0.6.0 替换为 k8s.m.daocloud.io/lws/lws:v0.6.0 # k8s.m.daocloud.io 是 daocloud 加速器

lws 滚动更新

更新策略

  • MaxUnavailable:表示在更新过程中允许多少个副本不可用,不可用数量基于 spec.replicas。默认为 1
  • MaxSurge:表示更新时可以部署多少个额外副本。默认为 0
  • maxSurge 和 maxUnavailable 不能同时为零

滚动更新 demo

  • 示例 yaml
spec:
  rolloutStrategy:
    type: RollingUpdate
    rollingUpdateConfiguration:
      maxUnavailable: 2
      maxSurge: 2
  replicas: 4
  • 更新过程如下:
    • ✅ 副本已更新
    • ❎ 副本尚未更新
    • ⏳ 副本正在滚动更新
分区副本R-0R-1R-2R-3R-4R-5说明
第一阶段04滚动更新之前
第 2 阶段46滚动更新已开始
第 3 阶段26分区从 4 变为 2
第四阶段26由于最后一个 Replica 尚未准备好,因此 Partition 不会发生改变
第五阶段06分区从 2 变为 0
第六阶段06
第七阶段05回收副本以容纳尚未准备好的副本
第八阶段04发布另一个副本
第九阶段04滚动更新已完成

lws 标签、注解、环境变量

Labels

描述例子适用于
leaderworkerset.sigs.k8s.io/name这些资源所属的 LeaderWorkerSet 对象的名称。leaderworkerset-多模板Pod、StatefulSet、服务
leaderworkerset.sigs.k8s.io/template-revision-hash用于跟踪与 LeaderWorkerSet 对象匹配的控制器修订的哈希。5c5fcdfb44Pod、StatefulSet
leaderworkerset.sigs.k8s.io/group-index它所属的组。0Pod、StatefulSet(仅工作线程)
leaderworkerset.sigs.k8s.io/group-key标识该组的唯一键。689ce1b5…b07Pod、StatefulSet(仅工作线程)
leaderworkerset.sigs.k8s.io/worker-index组内 pod 的索引或标识。0
leaderworkerset.sigs.k8s.io/subgroup-index跟踪该 pod 所属的子分组。0Pod(仅当设置了 SubGroup 时)
leaderworkerset.sigs.k8s.io/subgroup-key属于同一子组的 Pod 将具有相同的唯一哈希值。92904e74…801Pod(仅当设置了 SubGroup 时)

Annotations

描述例子适用于
leaderworkerset.sigs.k8s.io/size每个组中的 pod 总数。4
leaderworkerset.sigs.k8s.io/replicas副本数:领导-工作组的数量。3StatefulSet (唯一领导者)
leaderworkerset.sigs.k8s.io/leader-name领导者荚的名称。leaderworkerset-多模板-0Pod(仅工作进程)
leaderworkerset.sigs.k8s.io/exclusive-topology指定独占 1:1 调度的拓扑。cloud.google.com/gke-nodepoolLeaderWorkerSet、Pod(仅当使用 exclusive-topology 时)
leaderworkerset.sigs.k8s.io/subdomainPolicy确定将注入哪种类型的域。每个副本唯一Pod(仅当 leader 和 subdomainPolicy 设置为 UniquePerReplica 时)
leaderworkerset.sigs.k8s.io/subgroup-size每个子组的 pod 数量。2Pod(仅当设置了 SubGroup 时)
leaderworkerset.sigs.k8s.io/subgroup-exclusive-topology指定子组内的独占 1:1 调度的拓扑。拓扑键LeaderWorkerSet、Pod(仅当设置了 SubGroup 并使用了 subgroup-exclusive-topology 时)

Env

描述例子适用于
LWS_LEADER_ADDRESS通过无头服务获取领导者的地址。leaderworkerset-多模板-0.leaderworkerset-多模板.默认
LWS_GROUP_SIZE跟踪 LWS 组的大小。4
LWS_WORKER_INDEX组内 pod 的索引或标识。2
TPU_WORKER_HOSTNAMES仅位于同一子组中的 TPU 工作者的主机名。测试样本-1-5.默认,测试样本-1-6.默认,测试样本-1-7.默认,测试样本-1-8.默认Pod(仅当启用 TPU 时)
TPU_WORKER_IDTPU 工人的 ID。0Pod(仅当启用 TPU 时)
TPU_NAMETPU 的名称。测试样本-1Pod(仅当启用 TPU 时)

更多示例配置

LWS 设计文档