除了vLLM,业界还有很多优秀的大模型推理加速框架,各有特点和适用场景。
NVIDIA FasterTransformer (FT) 是一个基于Transformer神经网络推理的加速引擎库,用C++/CUDA编写,依赖cuBLAS、cuBLASLt和cuSPARSELt库,专注于大模型分布式推理加速。
支持:
优点:
缺点:
纯Python开发的超轻量级高性能LLM推理框架,核心贡献是TokenAttention和Efficient Router,在很多场景下比vLLM和TGI吞吐量更高,部分场景提升可达4倍。
分配过程:
1# 预分配状态数组:1表示未使用,0表示已使用
2self.mem_state = torch.ones((size,), dtype=torch.bool, device="cuda")
3# 累加和筛选可用空间
4torch.cumsum(self.mem_state, dim=0, out=self._mem_cum_sum)
5select_index = torch.logical_and(
6 self._mem_cum_sum <= need_size, self.mem_state == 1
7)1# 简化判断逻辑
2left_out_len_array = np.array([e[1] for e in req_list])
3has_run_len_array = np.array([e[0] for e in req_list])
4cum_run_len_array = np.cumsum(has_run_len_array)
5size_array = np.arange(1, len(req_list) + 1)
6need_max_token_num = (left_out_len_array * size_array + cum_run_len_array).max()
7ok = need_max_token_num <= max_total_token_num优缺点:
优点:
缺点:
研究者观察到Attention Sink现象:文本最初几个token总是吸收了大量无用注意力。
StreamingLLM方法:
初始token: [S1, S2, S3, ...] 始终保留 ← Attention Sink
+ 最近K个token: [T1, T2, ..., TK] 滑动窗口
= 总窗口大小固定为 (初始N + 最近K),显存不变NVIDIA推出的专门针对LLM推理优化的框架:
特点:
适合: 生产环境部署,追求极致性能
HuggingFace推出的LLM推理服务框架:
特点:
缺点:
| 框架 | 开发语言 | 核心创新 | 吞吐量 | 易用性 | 分布式 | 适合场景 |
|---|---|---|---|---|---|---|
| vLLM | Python/CUDA | PagedAttention | 极高 | 非常易用 | 张量并行 | 研究、生产部署 |
| FasterTransformer | C++/CUDA | TP/PP优化 | 高 | 较难 | 完整支持 | NVIDIA硬件生产部署 |
| LightLLM | Python | TokenAttention+EfficientRouter | 更高(大并发) | 易用 | 支持 | 追求极致吞吐 |
| TensorRT-LLM | C++/Python | 编译器优化 | 极致 | 中等 | 完整支持 | 生产环境极致性能 |
| TGI | Rust/Python | 服务化 | 中等 | 非常易用 | 支持 | HuggingFace生态快速部署 |
| StreamingLLM | Python | Attention Sink | - | 易用 | - | 长对话无限生成 |
| SwiftInfer | C++/TensorRT | StreamingLLM优化 | +46% 比StreamingLLM | 中等 | - | TensorRT环境长对话 |
A: 主要包括:1) 张量并行和流水线并行分布式支持;2) KV缓存分块优化;3) 激活缓存重用减少内存占用;4) 通信优化减少归约次数;5) GEMM自动调优选择最优算法;6) 支持INT8/FP16量化。
A: PagedAttention是按块分页,块包含固定数量token;TokenAttention是以单个token为粒度管理,预分配整块缓冲,精确跟踪使用状态,可以做到零浪费,更细粒度管理。LightLLM的Efficient Router能更精确判断能否加入新请求,在变长请求并发下利用率更高。
A: 因为大模型在训练中就形成了模式,开头几个token总是会分配很高注意力权重。如果把它们踢出窗口,注意力分布会严重紊乱,生成质量迅速崩溃。只要保留开头几个sink token,即使踢出中间的,生成质量依然稳定。所以不需要重新训练就能支持无限长度。
A: 要看具体场景:追求易用性选vLLM,最快上手,吞吐也高;NVIDIA硬件追求极致性能选TensorRT-LLM;需要HuggingFace生态开箱即用选TGI;大并发追求极致吞吐可以试LightLLM;长对话场景需要结合StreamingLLM。
A: Continuous Batching是动态批处理,每次迭代完成后立即加入新请求,不需要等整个batch完成。vLLM、LightLLM、TGI都支持,比传统静态批处理提高GPU利用率和吞吐量。
A: SwiftInfer基于TensorRT重新实现了StreamingLLM,对KV缓存和注意力模块做了底层优化,充分利用TensorRT的编译器优化和硬件加速,所以在StreamingLLM基础上还能提升46%。