在我们实际测试的过程中,我们发现分离式架构受模型和负载的影响其实是非常大的。
不同的模型,不同的负载,收益大小很不一样
- 模型:模型大小,开不开 gqa,等
- 负载:输入长度、输出长度、请求的 qps,等
那我们怎么知道什么场景下适合用分离式架构呢?
这篇文章我们从 decode 阶段的理论计算上来尝试推导一下,看模型和负载是如何影响分离式架构的收益的
1. Decode 计算和访存需求
参考:FASTDECODE: High-Throughput GPU-Efficient LLM Serving using Heterogeneous
decode 时间理论计算(假设默认开启 GQA = 8,量化 int8,xx):
| batch 计算 | batch 访存量 | |
| S-part | 24bh² | (12h² + 10bh) * sizeof(int8) = 12h² + 10bh |
| R-part | 4bhs | 2bhs * sizeof(int8) = 2bhs |
注意:
- 12h² + 10bh,不管是大模型还是小模型,10bh耗时占比1/1000,所以10bh可以直接忽略
- R-part的计算耗时 4bhs/312,也是要远远小于其他3项,基本可忽略
所以整个 decode 阶段的耗时,可以按如下计算
TBT = \frac{24blh^2}{312} + \frac{12lh^2}{2} + \frac{2blhs}{2 * GQA} = b(\frac{24lh^2}{312} + \frac{2lhs}{2 * GQA}) + \frac{12lh^2}{2}因此:TBT 是一个bs的线性函数
2. 分离式架构的理论收益公式
2.1 干扰程度
分离收益的前提,取决于干扰的程度,干扰越大,分离后的收益越大假设一个模型:
- tbt:单token输出时间
- ttft:首token计算时间
- s:输入长度
- n:输出长度
- λ:请求进来的速率
单个请求端到端的时间:e2e = tbt * n + ttft
受干扰的时间比例: β= \frac{e2e * λ * ttft}{e2e} = λ * ttft