MemPool
这个算是一个huawei的横向。但是也有颇多值得研究的地方。最后可以产出个文章试试。
背景
简单来说,是TP场景下的内存池动态调度问题。
大体上是一个一个预测任务,预测内存池分配的策略。
目前希望用LLM的方法做。
使用gaussdb。
目标和指标
-
目标:
落盘降低90%,性能提高x10.
低规格内存,瞬间注入大量慢SQL,TPS抖动控制到10%。 -
指标
预测准确率:预测与真实workload的内存开销。
推理速度:低延迟。
TPS抖动:每秒钟事务数,这个要保持在一个相对稳定范围。
内存总开销:这里是泛化考量,要不要像索引一样处理不同内存池大小?
随笔
-
Bert vs LLM?
对于TP动态场景,要求很 低的响应延迟。所以要对比bert或者llm的表现。llm选qwen2.5 0.5b或者qwen3 0.6b. -
架构?
直接微调一个裸llm,可能不会好用。
现在有几个考量:首先,考虑能不能做召回,有点像LLMidx,做一个workload池,一个模型来路由,直接模糊召回一个workload模板与它对应的参数。其次,考虑要不要做RL,RL怎么做?泛化呢?或者直接就直接微调一个llm做预测,这个很轻量,可以先试试。 -
有一些工作提到了AP和TP分离,这里也提到了会瞬间注入大量慢SQL,可以考虑一下这个思路。
-
怎么划分workload?
workload的组的大小怎么找?这个重要,必须先想清楚,或者在小模型先试试。如果用0.5以下的小模型,这里一个workload就不能大。 -
测试构建。tpcc/tpch/tpcds。
想办法监测TPS,推理延迟。预测的性能可以在训练时解决。 -
已知的未知:
内存池的调度也是分层的。在gaussdb而言,有ResourcePool级别,有seesion/SQL级别。以及与内存池紧耦合的shared-buffer/workmem/max_connections。这些可能要考虑一下怎么处理。
算子级别的优化要不要实现?