Inference Optimization
Contents
对 Batch 的理解
batch 的概念总能听到,而我们能普遍接触到的就是普通用户使用网页端大模型的这个视角
- 训练阶段的 batch 是 dataloader 产生的,因为输入数据集自然包含了多个用户的输入
| |
由此自然就组合为了 batch 的输入
| |
- 推理阶段。从单个用户的视角来说,每个人的请求都只是一个 batch,例如下面三个用户的请求
| |
但是对于底层的推理引擎来说,从性能角度考虑,一定不会逐用户的处理三项请求,而是会产生如下的 batch 数据
| |
- MOE 阶段的 batch
MoE 中 expert 接收的 batch size 和 LLM serving 中的用户数量完全不是一个概念
如果从 Transformer 数据流来看,Attention 的输出为 $X \in \mathbb{R}^{B \times S \times H}$
进入 MOE FFN layer 后,X 会 从 [B, S, H] reshape 为 [T, H]。之后会将 T 个 token 分配给不同的 expert,每个 expert 拿到的 token 数量则是这个 expert 的 batch size。这一点其实是可以同 FFN 的计算公式对应上的
Inference & Serving
- LLM inference 研究模型怎么算得快
- LLM serving 研究很多人同时调用模型时,整个系统怎么服务得好。
Inference 侧重 kernel/parallelism; Serving 建立在 inference 之上,但增加了调度、资源管理和多用户场景。