基于多角色部署的弹性降级(降P补D)
什么是降P补D
降P补D是ModelArts推理部署平台面向PD分离部署场景提供的一种弹性降级调度能力。
在大模型推理的PD分离部署中,P(Prefill)负责请求的预处理与首token计算,D(Decode)负责后续token的逐步解码生成。在xP1D等部署形态中,D的角色至关重要,一旦D故障且资源不足以恢复全部负载,业务将完全中断。
降P补D的核心思路:
当D角色故障且集群剩余资源不足以拉起全部副本时,通过减少P角色的副本数量(降P),释放资源优先满足D角色的副本需求(补D),从而在降级状态下维持业务连续性。同理,P角色故障时也支持P自身降级恢复。
该特性基于Volcano的多维Gang调度能力实现,通过配置环境变量“minSubGroups” 字段指定每个角色允许的最小副本分组数,使调度器在资源不足时可以按最低规格进行部分调度,而非严格等待全部资源就绪后才整体调度。
降P补D与传统Gang调度的区别:
| 对比维度 | 传统Gang调度 | 降P补D(弹性Gang调度) |
|---|---|---|
| 调度条件 | 全部副本资源满足才调度 | 最少minSubGroups个副本资源满足即可调度 |
| 资源不足时行为 | 持续等待,服务不可用 | 降级运行,服务可用但性能降低 |
| 适用场景 | 严格要求全量副本的场景 | 允许降级运行以保障业务连续性的场景 |
| 降级后恢复 | 资源充足后自动全量调度 | 资源恢复时会自动恢复部分或者全量副本 |
相关概念
- P(Prefill):推理请求的Prefill角色负载,负责首Token计算和请求预处理。
- D(Decode):推理请求的Decode角色负载,负责后续Token的逐步解码生成。
- PD分离部署:xPyD部署形态,P和D角色分别部署,如4P1D、2P1D等。
- 降级:在资源不足时,减少部分角色的副本数量来保障整个服务的可用性。
- 降P补D:降级的一种特殊场景:通过减少P副本数,优先满足D副本数,让业务可恢复。
- minSubGroups:Volcano PodGroup subGroupPolicy中的字段,指定角色最少需要的SubGroup分组数,控制降级最低副本数。
- Gang调度:Volcano调度策略,要求一组负载全部满足资源要求才统一调度,否则不调度。Gang调度更多介绍请参见多维组调度(Gang)。
- 弹性Gang调度:在Gang调度基础上允许设置minSubGroups,实现资源不足时的部分调度。
使用场景
| 场景分类 | 场景描述 | 方案介绍 |
|---|---|---|
| 故障恢复时资源不足(降级恢复) | 服务故障恢复时,集群剩余资源不足以满足全量副本需求。 | 故障恢复操作允许降级,通过minSubGroups配置实现降级恢复,服务以低于全量副本的规格先运行,待资源充足后升级恢复。 |
| D角色故障,资源不足以恢复(典型降P补D) | 4P1D分离部署服务正常运行中,D角色所在节点异常导致D Pod退出。Volcano调度尝试恢复D副本,但集群剩余资源不足以同时满足4P+1D的全量调度需求,服务持续中断。 | 开启P角色的降级开关并设置minSubGroups=1,Volcano调度器在资源不足时减少P副本数(如从4P降至2P),释放资源优先拉起D副本(1D),服务以2P1D的降级形态恢复运行。 |
| P角色故障,资源不足以恢复(P降级恢复) | 4P1D分离部署服务中,部分P Pod异常退出,集群资源不足以恢复全部4个P副本。 | 开启P角色的降级开关并设置minSubGroups=2,Volcano调度器按最低2个P副本进行调度,服务以2P1D的降级形态运行,Prefill并行度降低。 |
约束限制
- 部署形态约束:仅适用于多角色分离部署场景,包括但不仅限于1D(如4P1D、2P1D等)。非分离部署场景(如单角色部署)设置了降级环境变量,推理平台管理面将记录错误日志并返回报错。
- 部署场景约束:降P补D功能仅适用于故障恢复场景。
- 模型镜像约束: 模型镜像需要支持xPyD的PD分离部署能力。模型镜像的恢复表现与服务部署时选择的恢复策略有关,也与模型镜像本身对Ranktable以及网络拓扑的感知有关。若镜像不具备正确的Ranktable和网络拓扑感知能力,可能出现因Pod重建或缩减导致的服务异常。若镜像本身对Ranktable和网络拓扑不敏感,则降级不会带来业务影响。
- 插件版本依赖:降P补D生效依赖专属资源池的Volcano版本和KubeInfer版本,需与指定版本保持一致。当Volcano版本 < 1.22.x 或 KubeInfer < 7.6.2时,平台将提示:Volcano plugin version: {实际版本} does not meet degradation requirements. Required volcano>=1.22.0”或者“Operator plugin version: {实际版本} does not meet degradation requirements. Required Operator>=7.6.2”,请前往页面升级插件版本。
- 资源池约束:降P补D仅支持如下资源池k8s版本 v1.29.*、 v1.30.*、 v1.31.*、 v1.32.*、 v1.33.*、 v1.34.*、 v1.35.*。若低于v1.29.*,则无法升级Volcano至1.22.x及以上版本。
- 降级行为限制:
- 降级仅支持配置minSubGroups的值,不会修改subGroupSize的值。
- 当P和D同时配置minSubGroups时,Volcano的调度结果可能不可预测。例如5P3D可能降级为4P3D,也可能降级为5P2D,具体缩减哪个角色由Volcano调度决定。建议仅配置P角色的minSubGroups来实现降P补D,避免P和D同时配置导致结果不可控。
- 重建策略限制:降级支持各级重建策略,但降P补D依赖部署副本级重建。
- 环境变量保留字约束:ENV_MODELARTS_DEGRADATION_ENABLE和ENV_MODELARTS_DEGRADATION_MIN_SUB_GROUPS 为系统保留环境变量key,用户不应自定义使用相同key的环境变量。若用户已存在同名环境变量,推理任务将报错。
- 降级后的性能影响:降级运行时,P副本数减少会导致Prefill并行处理能力降低,推理服务的首Token延迟(TTFT)和吞吐量可能下降。降级后的性能下降属于预期行为,用户应关注降级状态并及时扩容恢复。
特性配置
配置方式:仅支持通过推理平台控制台的环境变量进行配置。
在创建部署或升级部署页面,在“单元配置”中添加“环境变量”,在“更多配置”中开启“自动重建”,并选择“部署副本重建”,P和D角色的具体配置请参考配置示例。
| 环境变量Key | 取值范围 | 默认值 | 说明 |
|---|---|---|---|
| ENV_MODELARTS_DEGRADATION_ENABLE | true或者false | false | 降级开关。 枚举值:true/false,大小写不敏感,若非枚举值推理平台将记录错误日志并返回报错。 设置为true时开启该角色的降级能力, 设置为false或不设置时降级不生效。 |
| ENV_MODELARTS_DEGRADATION_MIN_SUB_GROUPS | [1, 单元副本数] 的整数 | 1 | 降级最低副本分组数。指定该角色在资源不足时最少需要多少个SubGroup分组才能触发调度。
|
特性配置原理:
降P补D特性通过环境变量方式传递降级配置:
- 用户设置环境变量,推理平台管理面在创建部署或更新部署时,解析用户设置的环境变量,获取降级开关和minSubGroups值,并将配置写入对应kubeinfer定义中。
- 推理平台业务面:从kubeinfer CR的annotation中读取降级配置,在创建PodGroup时根据配置设置对应角色的minSubGroups字段。
- 推理平台调度面(Volcano):根据PodGroup的subGroupPolicy中minSubGroups的值,在资源不足时按最低副本分组数进行弹性调度。
典型配置:
为实现降P补D(减少P副本优先满足D副本),建议仅配置P角色的降级开关:
P节点:开启P降级,最低保留1个P副本
ENV_MODELARTS_DEGRADATION_ENABLE = true ENV_MODELARTS_DEGRADATION_MIN_SUB_GROUPS = 1
D节点:不设置,D不降级,保证D副本数不变
不建议:同时为P和D设置minSubGroups=1,因为Volcano调度可能不可预测地选择缩减P或D。
配置示例
示例一:4P1D降P补D配置
场景:4P1D分离部署服务,配置降P补D能力,P角色最低保留1个副本。
P角色环境变量配置:
ENV_MODELARTS_DEGRADATION_ENABLE = true ENV_MODELARTS_DEGRADATION_MIN_SUB_GROUPS = 1
D角色环境变量配置:不设置。
D角色开启自动重建并选择:部署副本重建。
降级效果:
- 正常运行:4P1D,资源充足,全量调度。
- 降级运行(D故障恢复):2P1D,资源不足时,P降至2副本,D恢复1副本。
- 最低降级运行:1P1D,资源极度不足时,P降至1副本,D恢复1副本。
示例二:2P1D降P补D配置
场景:2P1D分离部署服务,P角色最低保留1个副本。
P角色环境变量配置:
ENV_MODELARTS_DEGRADATION_ENABLE = true ENV_MODELARTS_DEGRADATION_MIN_SUB_GROUPS = 1
D角色环境变量配置:不设置。
D角色开启自动重建并选择:部署副本重建。
降级效果:
- 正常运行:2P1D,资源充足,全量调度。
- 降级运行:1P1D,资源不足时,P降至1副本,D保持1副本。
示例三:P和D独立降级控制
场景:5P3D分离部署服务,P角色最低保留2副本,D角色最低保留1副本。
P角色环境变量配置:
ENV_MODELARTS_DEGRADATION_ENABLE = true ENV_MODELARTS_DEGRADATION_MIN_SUB_GROUPS = 2
P角色开启自动重建并选择:部署副本重建。
D角色环境变量配置:
ENV_MODELARTS_DEGRADATION_ENABLE = true ENV_MODELARTS_DEGRADATION_MIN_SUB_GROUPS = 1
D角色开启自动重建并选择:部署副本重建。
降级效果:
P和D同时配置minSubGroups时,Volcano调度器决定具体缩减哪个角色的副本,结果可能不可预测。例如可能降级为4P3D或5P2D。如需确保降P补D效果(优先缩减P),建议仅配置P角色的降级开关。
示例四:通过API配置环境变量
场景:通过ModelArts推理部署API创建部署时,在环境变量中配置降P补D。推理部署API请参见ModelArtsAPI参考。
API请求示例(简化):
POST /v2/{project_id}/services
Content-Type: application/json
{
"service": {
"name": "llm-pd-separated-service",
"deployment": {
"replicas": 1,
"roles": [
{
"name": "Prefill",
"replicas": 4,
"envs": [
{
"key": "ENV_MODELARTS_DEGRADATION_ENABLE",
"value": "true"
},
{
"key": "ENV_MODELARTS_DEGRADATION_MIN_SUB_GROUPS",
"value": "1"
}
]
},
{
"name": "Decode",
"replicas": 1,
"envs": [],
"recovery":"Instance"
}
]
}
}
} 结果验证
配置完成后,查看环境变量配置项操作如下:
- 登录ModelArts管理控制台,在左侧菜单栏中选择“模型推理 > 在线推理”,进入在线服务管理页面。
- 单击目标服务名称,进入服务详情页面,切换到“部署”页签。选择部署卡片,在“单元配置”版块查看“环境变量”。确认P角色的ENV_MODELARTS_DEGRADATION_ENABLE为true,ENV_MODELARTS_DEGRADATION_MIN_SUB_GROUPS为预期值。
在“单元配置”版块查看“自动重建”,确认重建策略为“已开启 | 部署副本重建”。
配置完成后,查看降级详情操作如下:
- 登录ModelArts管理控制台,在左侧菜单栏中选择“模型推理 > 在线推理”,进入在线服务管理页面。
- 单击目标服务名称,进入服务详情页面,切换到“部署”页签。选择部署卡片,单击“查看详情”,进入部署副本列表页面,可通过查看副本的Pod数量,查看实例降级的详情,也可单击Pod列表进行查看。
常见问题
- 降P补D和普通的Gang调度有什么区别?
普通Gang调度要求一组负载全部满足资源要求才统一调度,否则不调度。在资源不足时服务持续中断无法恢复。降P补D是弹性Gang调度,通过配置 minSubGroups字段指定角色的最低副本分组数,允许Volcano在资源不足时按最低规格进行部分调度,服务以降级形态运行,保障业务连续性。
- 降P补D配置后,资源充足时是否仍然降级运行?
不会。降P补D特性在资源充足时不生效,服务按照既定的全量副本数正常运行。降级仅在资源不足以满足全量调度需求时触发。当集群资源恢复充足后,自动恢复部分或者全量副本。
- P和D同时配置minSubGroups时结果为什么不可预测?
当P和D同时配置minSubGroups时,Volcano调度器在资源不足时会根据PodGroup的调度策略决定缩减哪个角色的副本。例如5P3D可能降级为4P3D,也可能降级为5P2D,具体结果由Volcano调度策略决定,本特性不做控制。建议仅配置P角色的minSubGroups来实现降P补D效果,确保D副本数不被缩减。
- 降级后如何恢复到全量副本?
降级后会持续稳定运行,如果可用资源恢复,会逐步恢复剩余的副本。可以选择扩容集群资源(增加节点、释放其他服务资源等),使资源满足全量调度需求。
- minSubGroups设置为0和设置为副本数有什么区别?
- minSubGroups=0:分组数量的检查被跳过,降级功能无效。当前不支持配置minSubGroups=0。
- minSubGroups=副本数:在role层级等同于全量Gang调度,要求所有副本都满足才调度,无降级空间,降级功能无效。
建议设置为1或以上但小于副本数的值,如4P场景设置minSubGroups=1或minSubGroups=2。
- 非分离部署场景设置降级环境变量会怎样?
推理平台业务面在创建PodGroup时会判断当前是否为多角色分离部署场景。非分离部署场景(如单角色部署)设置了降级环境变量,推理平台管理面将记录错误日志并返回报错。
- 环境变量配置错误(如负数、非数字)会怎样?
推理平台管理面在解析环境变量时会对取值进行严格校验。对于非法值(负数、0值、非数字、超过副本数),管理面将记录错误日志并返回报错,部署/更新请求将失败。
- 降P补D对推理服务性能有什么影响?
降P补D在资源充足时不生效,服务按全量规格运行,性能不受影响。降级触发后,P副本数减少会导致Prefill并行处理能力降低:
- 首token延迟(TTFT)可能增加
- 推理吞吐量可能下降
- 但Decode能力(D副本数)保持不变,后续token生成速度不受影响
降级后的性能下降属于预期行为,用户应通过监控感知降级状态并及时扩容恢复。
- 如何关闭降P补D功能?
- 将ENV_MODELARTS_DEGRADATION_ENABLE设置为false或移除该环境变量
- 移除ENV_MODELARTS_DEGRADATION_MIN_SUB_GROUPS环境变量
- 更新部署后,推理平台业务面将不再设置minSubGroups,PodGroup恢复为默认Gang调度行为。
- Volcano版本不满足要求时怎么办?
当Volcano版本 < 1.22.x 或 KubeInfer < 7.6.2时,平台将提示“Volcano plugin version: {实际版本} does not meet degradation requirements. Required volcano>=1.22.0”或者“Operator plugin version: {实际版本} does not meet degradation requirements. Required Operator>=7.6.2”。用户需前往资源池的插件中心升级Volcano插件版本至要求版本后,降P补D功能方可正常生效。
- 降P补D与故障恢复策略有什么关系?
降级功能与故障恢复策略有关联,不同的故障恢复策略会导致不同的降级预期:
- 部署副本重建:如果异常后正常运行的副本数量仍满足降级要求,不会新建部署副本,会继续进行降级,直到异常副本数量低于minSubGroups的值,才会触发重建
- 单元重建:会新建单元,遵循故障恢复的策略,只有Pod重启时才会重建单元,重建过程会进行降级
- 单元副本重建:会新建单元副本,会进行降级
- Pod重建:会新建Pod,会进行降级
降级在各级重建策略下均可发生,但降P补D依赖部署副本级恢复策略。
- 降级功能是否支持首次部署?
不支持。首次部署允许设置minSubGroups参数,但如果此时全量推理单元需要的资源已经大于集群剩余资源,推理平台将记录错误日志并返回报错。