TT Lab
开始
学习 学习路径 课程

LLM 服务

连续批处理调度器的模拟

在 TT Lab 中继续学习

目标

分别通过模拟实现静态配对和连续配对,以数字确认处理量差异,并掌握探索满足TTFT SLO的最大同步性的方法。

为什么重要

LLM生成每次请求的输出长度各不相同。有些请求是10个令牌,有些请求是1000个令牌。通过静态分配将32个绑定在一起,即使31个提前结束,直到最长的结束,这些槽位都会空着。GPU会占用32个资源并处理一个。连续分配会在每次解码重复中用结束的槽位填充待命队列的请求。代码上只差一行,但处理量会变化2~5倍。这个练习只通过模拟来重现没有GPU的那个机制。最后8个步骤的顺序是实际工作的核心——从处理量开始最大化,如果延迟在后面看的话,通常无法满足SLO。首先确定TTFT目标,然后找到满足该目标的最大同步性才是正确的顺序。

阶段

  1. /root/lb2/static.py模拟静态配对。请求是/opt/fixtures/llms/requests.json使用(100个,每个都有prompt_tokens和output_tokens),布局大小为16。
  2. /root/lb2/static.txt在total_steps=<n> throughput_tps=<수> slot_util=<0~1 소수>写。slot_util必须小于0.7。
  3. /root/lb2/continuous.py模拟连续配对。每次重复时,除掉结束的序列,在等待队列中填充。
  4. /root/lb2/compare.txt在static_tps=<수> continuous_tps=<수> speedup=<수>写。speedup必须是1.8以上。
  5. max_num_seqs=32适用上限。/root/lb2/maxseqs.txt在max_num_seqs=32 peak_running=<n>写peak_running必须在32岁以下。
  6. 将流入率改为每秒5、10、20、40件/root/lb2/queue.csv在rps,avg_queue,p99_wait_ms写标题和4行。rps越高p99_wait_ms必须增加单调性。
  7. /root/lb2/cost.py是prefill_ms = prompt_tokens * 0.05哇decode_ms = output_tokens * 8.0将费用分开。/root/lb2/cost.txt在total_prefill_ms=<수> total_decode_ms=<수> decode_share=<0~1 소수>写。
  8. /root/lb2/tune.txt在target_ttft_ms=200 max_concurrency=<n> throughput_at_target=<수>写。在那个同时性中,p99 TTFT必须在200以下。

参考

制作静态配对模拟器

/root/lb2/static.py模拟静态配对。请求是/opt/fixtures/llms/requests.json使用(100个,每个都有prompt_tokens和output_tokens),布局大小为16。

填充配置,直到全部完成为止。关键是每个请求的输出长度都不一样。

静态配对指标复兴

/root/lb2/static.txt在total_steps=<n> throughput_tps=<수> slot_util=<0~1 소수>写。slot_util必须小于0.7。

一起看看处理量和老虎机的利用率。玩的老虎机有多少是问题的规模。

创建连续配对时间表

/root/lb2/continuous.py模拟连续配对。每次重复时,除掉结束的序列,在等待队列中填充。

每次重复时,除了结束的序列外,在等待队列中填充。这一行就是区别所在。

比较两种方式的处理量

/root/lb2/compare.txt在static_tps=<수> continuous_tps=<수> speedup=<수>写。speedup必须是1.8以上。

只有将同一请求集合进行比较才有意义。请计算改善排泄量。

应用同时性上限

max_num_seqs=32适用上限。/root/lb2/maxseqs.txt在max_num_seqs=32 peak_running=<n>写peak_running必须在32岁以下。

不能无限输入。KV缓存设定上限。

查看库深度和p99大气层的关系

将流入率改为每秒5、10、20、40件/root/lb2/queue.csv在rps,avg_queue,p99_wait_ms写标题和4行。rps越高p99_wait_ms必须增加单调性。

随着流入率的提高,可以看到在某个地点p99崩溃。平均值一段时间内还不错。

分开建模prefill和decode的成本

/root/lb2/cost.py是prefill_ms = prompt_tokens * 0.05哇decode_ms = output_tokens * 8.0将费用分开。/root/lb2/cost.txt在total_prefill_ms=<수> total_decode_ms=<수> decode_share=<0~1 소수>写。

两个的成本函数不同。请将与提示长度成正比的和与令牌数量成正比的除以。

找到满足TTFT目标的最大同步性

/root/lb2/tune.txt在target_ttft_ms=200 max_concurrency=<n> throughput_at_target=<수>写。在那个同时性中,p99 TTFT必须在200以下。

首先确定目标,找到满足该目标的最大值。如果从处理量开始最大化,就无法维持SLO。