8月份了,趁着开学之前,抽时间整理一下暑假做的Reasearch Assistant的工作内容整理。
研究内容
现状
项目主要是基于博士后做的SWEEP-LLM runtime 调度器的进一步扩展。这个调度器尝试解决的问题是在PD分离的异构GPU混合集群上,调度传入请求,使请求能够在满足TTFT/TPOT SLO的前提下尽可能降低能耗。
调度器本身是一个model-driven scheduler,它是基于L4和L40s采集的真实测试数据benchmark,训练了一个模型。模型可以分为三类,首先预测Capacity,判断输入的request对当前系统的压力;之后是Feasibility classifier判断,分别判断Prefill阶段是否会违反TTFT,Decode阶段是否会违反TPOT;最后则是Latency/Power Regression,判断P99 TTFT和P99 TPOT,来选择最优的配置。
在实际测试调度器的时候,我们发现几个问题:
模型的训练数据,主体并不是在真实 PD(Prefill/Decode)跨池分离运行状态下采集的,而是基于单个 GPU pool 的 profiling 数据训练的。且模型没有对KV-cache传输做测试计算。
模型对于系统的压力是做了一个Capacity的预测计算,
而这种预测模型是可解释的物理先验,如果出现误差,错误就会传递到\rho,这样就会放大误差,而预测本身对系统的实时状态反应不是很灵敏,相比之下,我们可以使用vllm server自身的/metrics接口,它可以提供更准确更灵敏的实时系统压力状态。
调度器本身的策略处理,如果有时候因为RPS过高,系统请求积压,那么我们已经无法在原有的系统上通过调整频率来满足SLO,这个时候我们可以考虑预先启用几个备用的PD GPU pool,或者有需求时临时启用。当然,这也带来的额外的能耗。
对于这些问题,考虑到我们要实现的主要目标是在满足SLO的情况下提供功耗更低的选择,而系统饱和导致的预测错误的惩罚会很大,因此,首先我尝试添加一个新的gate,通过gate来更加灵敏的反应系统的饱和状态。这个gate会更保守的估算当前系统的饱和状态,从而使用更保守的策略调整GPU的频率。
在原始模型中,Capacity使用GradientBoostingRegressor训练,TTFT和TPOT则采用HistGradientBoostingRegressor,而SLO分类器则采用GradientBoostingClassifier。预测饱和的Saturation Gate则也是采用GradientBoostingClassifier。
总结来说:Capacity 是“容量回归模型+公式计算”,Saturation Gate是“以实际吞吐是否达标为标签、并把 作为输入之一的成本敏感梯度提升二分类器”。
实验结果
在离线GroupKFold OOF评估中,我们对比:
原策略:Guard + latency;
新策略:Guard + latency + Saturation Gate;
Gate阈值:。
得到的结果如下:
这可以看出来,加上Saturation Gate之后,对于问题的检测更加灵敏,当然这也带来了功耗提升,因为处理的机制更加保守了。
评论