技术深度解析
FlexLLMGen 本质上是一个编排引擎,它重新思考了 Transformer 模型在单 GPU 上的数据流。传统的批处理将请求堆叠成单个大张量,然后逐层处理。这在计算上是内存高效的,但受困于“掉队者问题”——单个长序列决定了整个批次的处理时间。FlexLLMGen 的架构采用了两种协同技术。
动态拆分(时间片执行): 这是该项目的旗舰创新。FlexLLMGen 并非加载整个模型并对批次执行完整的前向传播,而是将模型的计算图在垂直方向(跨层)和水平方向(注意力操作内部)拆分为细粒度、可调度的单元。对于具有不同序列长度的一批请求,调度器会动态分配这些计算单元。短请求可以快速通过早期层并退出,释放资源,而长请求则被渐进式处理。这类似于将 CPU 的时间片调度器应用于神经网络层。该实现利用了 PyTorch 的自定义操作和轻量级 CUDA 内核管理器,以最小化上下文切换开销。
支持抢占的连续批处理: 虽然连续批处理(见于 vLLM、TGI)并非新概念,但 FlexLLMGen 以实现了一个针对单 GPU 约束量身定制的、支持抢占意识的调度器。当新请求到达时,系统可以抢占先前批次中低优先级、部分处理的请求,将其中间 KV 缓存状态保存到受管理的 CPU RAM 缓冲区中,并插入新请求。这最大限度地提高了 GPU 利用率并最小化了空闲时间,对于在请求到达不规则时维持高吞吐量至关重要。
其工程重点在于最小化关键路径。关键组件包括:用于 KV 缓存的统一内存管理器(结合了分页到 CPU RAM 和选择性卸载技术),以及一个即时内核融合编译器(针对队列中特定请求混合优化执行计划)。
基准测试性能:
下表比较了在运行 Llama 3 8B Instruct 模型(混合 512 和 2048 token 提示的工作负载)时,FlexLLMGen 在 NVIDIA A100(80GB)上与其他流行单 GPU 服务系统的吞吐量。
| 服务系统 | 平均 Token/秒 | 平均 请求/秒 | P99 延迟(毫秒) | 最大并发请求数 |
|---|---|---|---|---|
| FlexLLMGen | 12,850 | 42 | 310 | 64 |
| vLLM | 8,200 | 28 | 450 | 32 |
| Hugging Face TGI | 6,500 | 22 | 520 | 24 |
| 基础 Hugging Face Pipeline | 3,100 | 8 | 1200 | 8 |
*数据要点:* 在此受限的单 GPU 场景中,FlexLLMGen 展现出明显的吞吐量优势,其 token/秒比 vLLM 高出约 57%,请求/秒高出 50%。它能够以更低的尾部延迟处理更多并发请求,突显了其动态调度的高效性。
主要参与者与案例研究
该项目由 fminference 团队主导,这是一个专注于高效推理的研究人员和工程师团体,其中 notably 包括具有 Google TPU 软件栈和 NVIDIA CUDA 库背景的贡献者。虽然并非商业实体,但他们的工作直接与多个关键参与者的产品竞争并产生影响。
商业竞争者与替代方案:
* vLLM(来自 UC Berkeley & LMSYS): 当前高吞吐量服务的事实标准,以其 PagedAttention 算法闻名。它更通用,在多 GPU 设置中表现出色,但在严格的单 GPU 环境下开销较高。
* Hugging Face 的 Text Generation Inference(TGI): 与 Hugging Face 生态系统深度集成,提供简单性和广泛的模型支持。它通常是快速部署的选择,但在原始吞吐量上通常不及 vLLM 和 FlexLLMGen。
* NVIDIA TensorRT-LLM: 一个闭源的、硬件优化的工具包,可在 NVIDIA GPU 上提供绝对峰值性能,但需要针对特定模型进行编译,并且对于高度可变的工作负载,缺乏 FlexLLMGen 的动态灵活性。
* SambaNova Systems & Groq: 这些公司提供专用硬件(分别是可重构数据流单元和 LPU),可实现极高的吞吐量,但需要购买专有系统,代表了完全不同的成本和部署模式。
案例研究:批量内容生成初创公司
设想一家为电商客户生成个性化营销文案的初创公司。他们的工作负载涉及每晚处理 10,000 条产品描述。使用配备 4 块 A100 GPU 的云实例和 vLLM,他们的成本约为 32 美元/小时,工作需 2 小时完成(64 美元)。如果切换到在单块 A100 实例(8 美元/小时)上运行 FlexLLMGen,由于峰值吞吐量较低但持续利用率更高,工作需 3.5 小时完成,成本为 28 美元——