掘金 人工智能 前天 10:58
货拉拉海豚平台基于LWS实现的大模型分布式部署实践
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

货拉拉的云原生AI开发平台“海豚平台”通过引入LeaderWorkerSet (LWS),解决了K8S在部署大模型时面临的挑战,实现了大模型在多台物理机上的分布式部署。文章详细介绍了LWS的特性、实现原理以及在SGLang部署中的实践,并阐述了未来平台在算力优化、稳定性提升等方面的规划。

🐳 现有K8S Deployment难以满足大模型分布式部署需求,主要体现在启动命令差异、固定IP需求以及Pod组的扩容、更新和故障恢复能力。

💡 LWS基于K8S的HeadlessService和StatefulSet实现,解决了AI/ML多机分布式部署问题,支持多模板、扩缩容、滚动更新和故障恢复等特性。

🚀 LWS通过LeaderStatefulSet和WorkerStatefulSet实现PodGroup内的多模板,利用StatefulSet和HeadlessService确保LeaderPod网络标识固定,并协同实现PodGroup的扩缩容和滚动更新。

🛠️ 在SGLang部署示例中,通过配置LWS的replicas字段实现扩缩容,配置maxUnavailable和maxSurge字段实现滚动更新,LeaderPod探针检测失败时,整个PodGroup组将重启,保障服务稳定。

一、前言

海豚平台是货拉拉自研的一站式云原生AI开发平台,覆盖了从数据处理、镜像构建到模型开发、训练、部署及在线推理的全流程。经过近两年的建设,海豚平台已成为货拉拉AI开发的核心基础平台,显著提升了AI开发人效和算力资源利用率,有力推动了公司AI技术与业务的发展。然而随着大模型技术的快速发展,海豚平台在部署大模型时迎来新的挑战。

二、海豚平台大模型部署的挑战

海豚平台目前使用K8S的Deployment来部署模型服务,一个Pod部署一个完整的模型实例并运行在一台GPU物理机上。但在部署大模型时,由于物理节点算力资源有限,单台物理机无法独立完成大模型部署,需要引入大模型分布式框架,使用流水线并行(PP)和张量并行(TP)等策略,利用多个Pod将大模型分布式部署在多台物理节点上。然而,基于Deployment托管Pod的模式在实现此方案时存在以下问题:

    大模型分布式框架中,不同节点的启动命令不同,而Deployment托管的Pod启动命令相同,无法满足需求。大模型分布式框架要求主节点IP固定,以便其他节点连接并构建节点组。然而,Deployment部署的Pod IP地址不固定,模型服务重启后,整个分布式框架无法正常运行。多个Pod构成的Pod组需要整体扩容、滚动更新和故障恢复能力,而Deployment不支持该能力。

对于以上问题,仅靠现有K8S的Deployment能力无法满足大模型分布式部署要求,我们必须寻求其他解决方案。下面将介绍海豚平台如何基于K8S实现大模型多机分布式部署方案和背后的原理。

三、海豚平台的解决方案

我们经过调研发现,LeaderWorkerSet(LWS) 可以解决AI/ML多机分布式部署问题。海豚平台通过引入LWS,配合大模型分布式推理框架(如 Vllm、SGLang、LmDeploy 等),将大模型部署在多台物理机上,从而实现了海豚平台基于K8S的大模型分布式部署能力。

3.1 LWS是什么

LWS是K8S兴趣小组基于K8S的HeadlessService和StatefulSet实现的CRD工作负载,它专注于解决AI/ML多机分布式部署的业务场景。

3.2 LWS的主要特性

下面我们将简单介绍LWS特性的实现原理。

3.3 LWS的实现原理

3.3.1 一个副本内多个Pod支持多模版

在一个PodGroup中,LeaderPod和WorkerPod分别由对应的LeaderStatefulSet和WorkerStatefulSet创建,并通过label将它们关联起来,LeaderStatefulSet和WorkerStatefulSet可以分别配置不同的template,如启动命令、运行镜像、资源配置等,从而成功实现了在一个PodGroup内,LeaderPod和WorkerPod多模版的能力。

3.3.2 LeaderPod网络标识固定

在大模型分布式部署时,LeaderPod必须要有固定的网络标识,才能让WorkerPod进行通信,LWS采用StatefulSet和HeadlessService结合使用,实现Pod节点组内的Pod网络标识固定的能力。

StatefulSet:是Kubernetes用于管理有状态应用的工作负载,它为有状态应用提供了有序的部署、扩展和管理能力,与Deployment和DaemonSet等其他控制器不同,StatefulSet更适合需要稳定网络标识和持久化存储的有状态应用,比如数据库(如 MySQL、MongoDB 等)、分布式缓存(如 Redis 集群)等。 StatefulSet为每个Pod生成稳定的Pod名称,例如,如果你创建了一个名为haitun的StatefulSet,它会生成名为haitun-0、haitun-1的Pod。这些Pod的名称在整个生命周期中保持不变,即使Pod被重新调度或重启,名称也不会改变。

HeadlessService:是一种特殊的Service,不会分配一个集群内部的虚拟IP地址(Cluster IP),不支持负载均衡、服务发现,主要作用是会为对应的Pod增加一条DNS记录,用于固定Pod的网络地址标识,如下:

{pod名称}.{serviceName}.namespace.svc.cluster.local

通过StatefulSet实现Pod名称的固定后,HeadlessService将会为每个Pod生成一条固定的DNS记录,从而实现LeaderPod网络标识固定的能力。

3.3.3 PodGroup扩缩容

LWS的扩缩容机制基于LeaderStatefulSet和WorkerStatefulSet的协同操作实现。当用户修改LWS的spec.replicas字段时,LWS Controller感知到这一变更,随即触发扩缩容流程:

    对LeaderStatefulSet进行扩缩容操作,K8S会按照序号递增的顺序创建新的LeaderPod,或者删除序号最大的LeaderPod。对于每个新创建的LeaderPod,LWS Controller会自动创建一个与之对应的WorkerStatefulSet,从而确保每个LeaderPod都有其专属的WorkerPod。当某个LeaderPod被删除时,其对应的WorkerStatefulSet 也会被同步删除,从而完成PodGroup中WorkerPod的创建和删除操作。

在整个扩缩容流程中,LWS确保整个PodGroup的扩缩容操作的原子性。

四、海豚平台LWS内部实践

4.1 安装 LWS 插件

VERSION=v0.6.1kubectl apply --server-side -f https://github.com/kubernetes-sigs/lws/releases/download/$VERSION/manifests.yaml

4.2 SGLang部署示例

通过LWS部署如下的示例:

apiVersion: leaderworkerset.x-k8s.io/v1kind: LeaderWorkerSetmetadata:  name: sglangspec:  replicas: 2  leaderWorkerTemplate:    size: 2    restartPolicy: RecreateGroupOnPodRestart    leaderTemplate:      metadata:        labels:          role: leader      spec:        containers:          - name: sglang-leader            image: lmsysorg/sglang:latest            env:              - name: HUGGING_FACE_HUB_TOKEN                value: <your-hf-token>            command:              - python3              - -m              - sglang.launch_server              - --model-path              - meta-llama/Meta-Llama-3.1-8B-Instruct              - --tp              - "2" # Size of Tensor Parallelism              - --dist-init-addr              - $(LWS_LEADER_ADDRESS):20000              - --nnodes              - $(LWS_GROUP_SIZE)              - --node-rank              - $(LWS_WORKER_INDEX)              - --trust-remote-code              - --host              - "0.0.0.0"              - --port              - "40000"            resources:              limits:                nvidia.com/gpu: "1"            ports:              - containerPort: 40000    workerTemplate:      spec:        containers:          - name: sglang-worker            image: lmsysorg/sglang:latest            env:            - name: HUGGING_FACE_HUB_TOKEN              value: <your-hf-token>            command:              - python3              - -m              - sglang.launch_server              - --model-path              - meta-llama/Meta-Llama-3.1-8B-Instruct              - --tp              - "2" # Size of Tensor Parallelism              - --dist-init-addr              - $(LWS_LEADER_ADDRESS):20000              - --nnodes              - $(LWS_GROUP_SIZE)              - --node-rank              - $(LWS_WORKER_INDEX)              - --trust-remote-code            resources:              limits:                nvidia.com/gpu: "1"

4.3 推理测试

curl http://localhost:40000/v1/completions -H "Content-Type: application/json" -d '{    "model": "meta-llama/Meta-Llama-3.1-8B-Instruct",    "role": "user",    "prompt": "What is the meaning of life?"}'

4.4 缩容

通过更新LWS的spec.replicas字段即可实现对应的扩缩容机制。

apiVersion: leaderworkerset.x-k8s.io/v1kind: LeaderWorkerSetmetadata:  name: sglangspec:  replicas: 2

4.5 滚动更新

同Deployment一样,在模型服务更新时,LWS通过配置maxUnavailable和maxSurge字段实现滚动的更新。

spec:  rolloutStrategy:    type: RollingUpdate    rollingUpdateConfiguration:      maxUnavailable: 2      maxSurge: 2  replicas: 4

如上yaml文件所示,服务滚动更新的过程如下:

4.6 故障 恢复

LeaderPod 作为整个PodGroup的探针检测点,支持启动探针、存活探针、就绪探针。Leader Pod探针检测失败时,整个PodGroup组将重启。

readinessProbe:  tcpSocket:    port: 40000  initialDelaySeconds: 15  periodSeconds: 10

4.7 发布状态检测

同Deployment发布状态检测一样,LWS也提供了类似的判定方法:

期望副本数(spec.replicas)=已经ready的副本数(readyReplicas)=实时副本数(status.replicas)=已更新副本数(updatedReplicas)

五、海豚平台未来规划

目前海豚平台已经支持了AI开发流程的全部核心能力,大模型应用方面也已支持大模型的训练和部署推理,接下来我们将从以下几个方面进一步提升平台能力:

    完善大模型应用市场: 统一管理海豚平台大模型,提供大模型的快速微调训练、部署、体验及API接入的全方位支持。大模型分布式训练:引入业界先进的大模型微调训练框架,结合高速网络传输(RDMA)与高性能文件存储技术,完善大模型分布式微调训练体系。算力资源利用率提升:深度优化算力资源分配与调度机制,聚焦大模型算力资源的高效分配与利用,提升整体算力资源的使用效率。平台稳定性建设:构建多Region多集群架构,实现算法服务的多泳道(多活)能力,提升平台的稳定性。

主要开发人员:货拉拉/技术中心/智能平台部&核心基础设施部

智能平台部:何家实、蔡高兴、廖立普、邱雨墨、倪松林

核心基础设施部:郑韩、陈宗舒、周海波、刘琼

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

海豚平台 K8S 大模型 分布式部署 LWS
相关文章