已关闭
[Feature]: 使能LayerwiseDisaggregated边云协同推理特性前提下,支持配置使能2P1D穿插调度 #140
chuwenjie创建于  1月16日关闭于  3月9日
chuwenjie
1月16日 创建

提交提案之前,请先检索仓库内是否已有相同的提案,如已有请在同一提案中进行讨论。

💻 需求背景、当前现状、期望实现的功能内容、具体的设计方案、以及测试方案

需求背景:
25年Q4版本已支持配置使能LayerwiseDisaggregated特性,通过模型切分+边云分布式部署形态,实现企业数据不出园的高安全分布式协同推理。当前版本支持拉远500km、10G带宽下,较集中式部署,吞吐劣化<5%;当前存在客户需求支持1000km拉远,当前方案在更远拉远距离下暂无法支持达成吞吐劣化<5%目标,因此需要新的性能优化方案。
当前现状:
LayerwiseDisaggregated特性下,模型首尾层部署在边侧,中间层部署在云侧,配合P/D混布推理模式运行。为减少跨广域边云拉远引入的通信时延,对推理服务吞吐造成影响,计算任务的编排当前采用了1P1D穿插计算调度模式:云侧模型计算图横切为N段,每段M层,每执行Prefill的1段(M层)后,插入Decode的所有中间层(NxM层),如此交替执行。则边侧Decode首层向云侧Decode中间层的hidden传输,以及云侧Decode中间层向边侧Decode尾层的hidden传输,均可被插入的Prefill段计算掩盖。
但是当前方案下,仍限制下发Prefill batch数量最多为1,这导致在Prefill衔接处,存在以下调度过程:(1)云侧向边侧进行Prefill Hidden传输,(2)执行Prefill尾层计算并返回调度器,(3)获取到下一个Prefill batch,(4)调度下一个Prefill首层计算,(5)边侧向云侧进行Prefill Hidden传输。在该过程中,云侧在发送Prefill Hidden,和再接受到边侧发回的Prefill Hidden中间,无法执行任何Prefill任务,只能执行Decode任务,而在边云协同模式下,连续Decode任务的hidden传输时延无法被掩盖,导致空泡,影响系统吞吐,且拉远距离越大,空泡占比越高, 难以支持拉远1000km下性能达标。
期望实现的功能内容:
Scheduler放开Prefill batch下发数量限制为2, TG侧相应适配支持2P1D穿插调度。通过将P2首层计算调度到P1尾层计算之前,使得云侧提前获取P2的中间层计算任务,使用P中间层分段计算,填充2P衔接中间位置的气泡,避免仅连续执行Decode造成云侧计算空泡,浪费算力,支持拉远1000km部署,10G带宽下, 吞吐较集中式劣化<5%。
image.png
具体的设计方案&测试方案:
当前SR/AR分解见下表,设计&测试方案详情待上会评审展开
重点一:添加新的外部配置项,动态控制2P调度是否开启
在config.json内的ScheduleConfig域内增加layerwiseDisaggregated边云特性子域,并在子域内增加使能2P1D调度行为的控制开关
"ScheduleConfig" :
{
"layerwiseDisaggregated":
{
"nextPHeadPrior" : True, # nextPHeadPrior表示优先调度下一个P的P首在当前P的P尾之前执行,配置True即表示2p1d调度,配置False表示1p1d调度
}
}

重点二:连续下发2个Prefill batch与资源管理关系
与资源管理相关配置项:maxPrefillBatchSize、maxPrefillTokens、maxSeqLen
maxPrefillBatchSize、maxPrefillTokens、maxSeqLen共同决定当对prefill请求执行batching操作时,允许下发的一个Prefill batch上限,即累加Prefill prompt length < max(maxPrefillTokens, maxSeqLen), 并且Prefill batchsize < maxPrefillBatchSize。系统基于这三个参数进行提前资源预留,然后执行batching操作。
本FR修改的为外部engine调度循环计数,与内部scheduler batching loop的资源预留无关。即修改的为SchedulerThreadEntry入口函数内,控制调度轮次的asyncScheduleRound值:
当使能layerwiseDisaggregated边云特性,但不使能2P1D调度时,asyncScheduleRound=2用于无阻塞的连续执行1P、1D两个batching过程并下发;当进一步使能2P1D调度时,asyncScheduleRound=3,用于无阻塞的连续执行2P、1D三个batching过程并下发。每个Prefill batching过程中仍遵循maxPrefillBatchSize、maxPrefillTokens参数设置的资源约束,控制每个batch的数据范围。若在batching过程中出现资源不足,无法生成相应batch,则不会下发。

需求 子需求 子需求描述
支持稠密&稀疏模型边云协同单DP下2P短序列功能 请求调度下发2P 最大允许下发3个batch,P/D选择策略支持下发2P1D
支持稠密&稀疏模型边云协同单DP下2P短序列功能 计算调度适配(调度逻辑) 边侧支持连续prefill首层执行,使用队列进行缓存已完成P首执行的request,从而在P尾执行时获取对应的P首request
支持稠密&稀疏模型边云协同单DP下2P短序列功能 计算调度/计算图缓存数据适配(中间状态缓存) 2P下,需要对计算调度、TG、计算图的缓存数据使用队列进行存储,避免缓存被覆盖
支持稠密&稀疏模型边云协同单DP下2P短序列功能 TCP控制信号适配 边侧连续执行prefill,云侧采用计数缓存控制信号,用于触发云侧计算调度请求下发
支持稠密&稀疏模型边云协同单DP下2P短序列功能 RDMA时序适配(2P需要扩展通信域) 2p下必然存在双向传输hidden的情况,需要拓展通信域以支持双向传输
支持稠密&稀疏模型边云协同单DP下2P短序列功能 重计算适配 触发重计算后若触发2P下发逻辑,需额外判断当前重计算请求的原始请求是否已结束返回,未返回的暂不下发,避免同一请求的重计算前与重计算后副本同时下发TG
支持稠密&稀疏模型边云协同单DP下2P短序列功能 2P可配置使能 在ScheduleConfig中增加2P配置,通过ConfigManager和EngineConfig传递到SchedulerConfig,保存为SchedulerConfig的成员变量,控制Scheduler
支持稠密&稀疏模型边云协同单DP下2P长序列功能 计算调度适配(调度逻辑) 边侧支持连续prefill执行,支持不同长序列请求prefill边界处的穿插执行
支持稠密&稀疏模型边云协同单DP下2P长序列功能 计算调度/计算图缓存数据适配(中间状态缓存) 2P下,需要对计算调度、TG、计算图的缓存数据使用队列进行存储,避免缓存被覆盖
支持稀疏模型边云协同单DP下2P性能优化 显存优化(计算图) 稀疏模型计算图显存优化,支持2P下请求率提升、并发提升。已知可优化项:1)HCCL通信显存优化,根据配置文件申请合适的prefill接收显存空间
支持稀疏模型边云协同单DP下2P性能优化 重计算请求调度组batch限制优化 估计触发重计算的边界batch size,在一定批次内限制该边界batch size,防止下发更大的batch size一直触发重计算
支持DS双机2DP适配2P功能 适配边侧单卡发送其中一个DP下的所有D/P请求 适配边侧单卡负责发送其中一个DP下的所有D/P请求,需扩展为3通信域,分别支持2P1D下发

替代方案

补充说明

欢迎加入社区,感谢您对社区的贡献 🎉!

likedislike
gcw_1JrCgbzH
1月22日 评论:

手工点赞,边云分布式推理上线1000KM拉远 2P流水优化特性了

likedislike
ascend-robotascend-robot成员
1月22日 添加了label:feature
Cchuwenjie
1月23日 修改了issue 的描述
Cchuwenjie
1月23日 修改了issue 的描述
Cchuwenjie
1月29日 修改了issue 的描述
Cchuwenjie
1月29日 修改了issue 的描述
zeshengzongzeshengzong成员
1月29日 关联了看板:@zeshengzong的看板 20260129
K先生
K先生
1月30日 评论:

SIG例会 0123 纪要:
①2P外部配置接口,建议修改为scheduleConfig内增加layerwiseDisaggregated子域,并采用bool值使能,命名需体现功能含义。
②FR中描述清楚与Prefill max bs 、max token控制相关的配置项之间的数学关系,明确与最大Token、资源预留等功能相关的数学关系。
③FR修改后,具体设计建议与SE/commitor沟通评审

likedislike
K先生
K先生
1月30日 评论:

SIG意见闭环:已更新配置接口格式及命名并完成相关配置项分析,并完成讨论评审

likedislike
Cchuwenjie
1月31日 修改了issue 的描述
吴铭泾
吴铭泾成员
3月9日 评论:

收到反馈,感谢!ISSUE已完成,PR修复已合入~

likedislike
吴铭泾吴铭泾成员
3月9日 issue状态由 TODO 改变为 DONE
吴铭泾吴铭泾成员
3月9日 关闭了 issue
ascend-robotascend-robot成员
3月9日 添加了label:resolved