尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

DisaggregatedSet 部署实战:Slices 与 PlacementPolicy 如何优化多角色拓扑分布

DisaggregatedSet 部署实战:Slices 与 PlacementPolicy 如何优化多角色拓扑分布 DisaggregatedSet 部署实战Slices 与 PlacementPolicy 如何优化多角色拓扑分布【免费下载链接】lwsLeaderWorkerSet: An API for deploying a group of pods as a unit of replication项目地址: https://gitcode.com/gh_mirrors/lws2/lwsDisaggregatedSet 是 Kubernetes 生态中面向大模型推理场景的控制器与 CRD它基于 LeaderWorkerSet 构建用于部署以 Pod 组为复制单元的多角色推理拓扑。在实际部署中prefill、decode 等角色既要独立扩缩容、独立滚动更新又希望被合理地分布到机架、可用区等拓扑域内——这正是 Slices 与 PlacementPolicy 两大特性的用武之地。本文以一份可复现的 DisaggregatedSet 部署实战为例讲清这两个字段如何帮你优化多角色拓扑分布。为什么需要 DisaggregatedSet从单一 Pod 组到多角色拓扑普通的 LeaderWorkerSet 解决的是一组同构 Pod 如何协同的问题而 LLM 推理的预填充prefill、解码decode、编码encode阶段负载特征差异巨大prefill 计算密集、适合大 Pod 组decode 受内存带宽约束、适合小 Pod 组。DisaggregatedSet 就是为这种多角色、多资源配置的解耦推理模式设计的它不替代 LWS而是编排多个 LWS。特性LeaderWorkerSetDisaggregatedSet复制单元一组同构 Pod多个角色组成的完整拓扑典型场景同构推理、训练prefill / decode / encode 解耦推理子资源单个 StatefulSet每个角色一个 LeaderWorkerSet拓扑控制组级专属放置切片级聚合与分散Slices PlacementPolicy核心概念速览角色、切片与拓扑域角色Roleprefill、decode、encodespec.roles是一个至少 2 个、最多 10 个角色的列表每个角色定义了自己的replicas、leaderWorkerTemplate和滚动更新配置。控制器会为每个角色生成独立的 LeaderWorkerSet。切片Slice整份拓扑的复制单位spec.slices是一个整数默认 1最小 1作用是把整套角色拓扑复制成 N 份独立副本。每一份 slice 都是包含全部角色的完整拓扑拥有自己独立的滚动时钟和稳定的身份标签disaggregatedset.x-k8s.io/slice。拓扑策略PlacementPolicy切片放哪里的规则spec.placementPolicy用typetopology两个字段声明切片内角色要聚合在同一个拓扑域、切片间要分散到不同拓扑域。topology是任意节点标签键如可用区、机架、NVLink 域机制与具体硬件无关。Slices 部署实战一行配置复制整套拓扑最小 YAML 示例在一个 DisaggregatedSet 部署中开启 2 个切片只需在 spec 顶部加一行apiVersion: disaggregatedset.x-k8s.io/v1 kind: DisaggregatedSet metadata: name: disaggregatedset-sample spec: slices: 2 roles: - name: prefill spec: replicas: 2 leaderWorkerTemplate: size: 1 leaderTemplate: spec: containers: - name: worker image: nginx:latest - name: decode spec: replicas: 2 leaderWorkerTemplate: size: 1 leaderTemplate: spec: containers: - name: worker image: nginx:latest完整示例见仓库中的 config/samples/disaggregatedset_v1_disaggregatedset.yaml。Slices 的 4 个关键行为独立滚动更新每个 slice 按自己的节奏滚动。修改 pod 模板后各 slice 先后升级但任意时刻每个 slice 内部始终有一整套同版本的完整拓扑在服务。扩容不触发滚动slices不参与 revision 哈希计算把它从 2 改成 4 只是纯扩容操作已有 slice 完全不受影响。缩容直接删除高序号切片从 4 减回 2控制器直接删除 slice 2、3 的 LWS 与 Service低序号切片不受波及。命名与标签可预测子 LWS 命名格式为实例名-slice-revision-role例如disaggregatedset-sample-0-58f79fdb78-prefill查询子资源务必用标签选择器而非硬编码名称。PlacementPolicy 部署实战三种模式如何选型None默认行为不注入任何亲和性不配置placementPolicy时Pod 由调度器自由放置适合对拓扑分布无要求或节点较少的场景。ExclusiveSlice切片聚合 本实例切片分散配置示例spec: placementPolicy: type: ExclusiveSlice topology: topology.kubernetes.io/zone控制器会向 LWS 的 Pod 模板注入两类硬性亲和性podAffinity 把同一 slice 的 prefill 与 decode 聚合到同一个域保证 KV cache 在域内传递podAntiAffinity 让本实例的不同 slice 分散到不同域单个域故障最多拖垮一个切片。其他 DisaggregatedSet 仍可与它共享域利于资源密排。ExclusiveTopology域级独占1:1 映射spec: placementPolicy: type: ExclusiveTopology topology: topology.kubernetes.io/zone在 ExclusiveSlice 全部能力之上额外注入一条跨实例的 podAntiAffinity任意一个域最多只属于一个 slice且跨所有 DisaggregatedSet 生效。适合对性能隔离要求苛刻的生产环境。模式切片内聚合本实例切片分散域独占跨实例None否否否ExclusiveSlice✅✅否ExclusiveTopology✅✅✅注意两种非 None 模式都是硬性Required亲和性若域内容量不足会导致 Pod 长期 Pending部署前请确认节点确实带有topology指定的标签。部署实战清单从应用到验证安装控制器并等待就绪kubectl wait deploy/lws-controller-manager -n lws-system --forconditionavailable --timeout5m应用上面带slices: 2的 YAMLkubectl apply -f disaggregatedset-sample.yaml按标签验证子 LWS 是否齐全kubectl get leaderworkerset -l disaggregatedset.x-k8s.io/namedisaggregatedset-sample查看 Pod 拓扑分布kubectl get pods -o wide观察不同 slice 是否落在期望的域内扩容拓扑副本数kubectl patch disaggregatedset disaggregatedset-sample --type merge -p {spec:{slices:3}}确认新切片按当前版本直接拉起清理kubectl delete disaggregatedset disaggregatedset-sample子 LWS 会一并删除源码速览快速定位关键实现想深入理解这两个特性建议从以下文件入手均在仓库源码中API 定义api/disaggregatedset/v1/disaggregatedset_types.go 中Slices、PlacementPolicy、PlacementType三处核心类型亲和性注入逻辑pkg/utils/disaggregatedset/affinity.go 的SetPlacementAffinities三种模式的注入差异都在这里按切片调度的执行器pkg/controllers/disaggregatedset/executor.go 中带slice参数的函数链N 维滚动更新规划器pkg/controllers/disaggregatedset/planner.go每个切片独立运行同一套算法服务管理pkg/controllers/disaggregatedset/service_manager.goService 按(slice, revision, role)粒度隔离设计文档KEP-846Slices与 KEP-848PlacementPolicy位于 keps/846-disaggregatedset-slices/README.md 与 keps/848-disaggregatedset-placement-policy/README.md如需本地复现可先获取仓库git clone https://gitcode.com/gh_mirrors/lws2/lws。小结Slices 与 PlacementPolicy 是 DisaggregatedSet 优化多角色拓扑分布的两大支柱前者用一行配置复制整套拓扑换来独立滚动与稳定切片身份后者用三种策略把聚合、分散、独占的放置诉求声明化让 KV cache 域内传递、单域故障只伤一个切片成为可预期的部署结果。对于正在搭建多角色 LLM 推理服务的团队把这两组字段纳入 DisaggregatedSet 部署模板是性价比极高的第一步。【免费下载链接】lwsLeaderWorkerSet: An API for deploying a group of pods as a unit of replication项目地址: https://gitcode.com/gh_mirrors/lws2/lws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表