bytedance/InfiniStore
KV cache store for distributed LLM inference
InfiniStore – 大型语言模型推理用高性能KV存储
是什么
- 专为加速大规模语言模型(LLM)推理集群而构建的开源键值(KV)存储。
- 针对两种常见部署模式设计:
- 预填充-解码分离集群 – 分离节点分别处理繁重的预填充工作和快速的解码工作;InfiniStore 在它们之间移动并重用KV缓存。
- 非分离集群 – 每个节点同时执行预填充和解码;InfiniStore 作为共享的、超大容量的KV缓存池,与GPU和CPU缓存并行使用。
- 当前可通过 vLLM 推理引擎的 LMCache 集成使用;对 SGLang 及其他引擎的支持正在开发中。
为何重要
- LLM 推理依赖于存储中间注意力键/值的 KV 缓存。将此缓存保留在设备上速度快,但受限于GPU内存。InfiniStore 允许您在节点间溢出、传输和重用该缓存,从而在扩展至大量请求时降低GPU内存压力和延迟。
- 提供低延迟网络路径(TCP、RoCE、InfiniBand),可在配备GPU或仅CPU的机器上运行。
核心功能
| 功能 | 作用 |
|---|---|
| KV缓存传输 | 将预填充节点的缓存注意力数据传输到解码节点,使解码步骤可立即启动。 |
| KV缓存重用 | 允许后续请求重用先前存储的缓存(例如重复的提示),从而减少计算时间。 |
| 跨节点缓存池 | 作为中心化、大容量缓存,所有节点均可读写,将有效缓存扩展至单个GPU内存之外。 |
| 网络灵活性 | 支持普通TCP/IP,也支持高性能RDMA(RoCE或InfiniBand),实现亚微秒级延迟。 |
| 独立运行模式 | 可作为通用KV存储用于任何LLM训练或推理服务,不仅限于vLLM。 |
典型工作流程
- 启动服务器 在机器(GPU或CPU)上使用适当的网络标志运行,例如:
infinistore --service-port 12345 # TCP infinistore --service-port 12345 --dev-name mlx5_0 --link-type Ethernet # RoCE infinistore --service-port 12345 --dev-name mlx5_0 --link-type IB # InfiniBand - 运行客户端(
infinistore/example/中提供同步或异步示例)。 - 在 vLLM 集群中,每个节点安装 vLLM、LMCache 和 InfiniStore;推理引擎将自动调用 InfiniStore 来获取或存储 KV 缓存。
安装
- 快速安装(大多数用户):
pip install infinistore - 从源码安装(贡献者或自定义构建):
apt install libuv1-dev libflatbuffers-dev libspdlog-dev libfmt-dev \ ibverbs-utils libibverbs-dev libboost-dev libboost-stacktrace-dev pip install --no-build-isolation -e . pip install pre-commit && pre-commit install - 验证:
infinistore --manage-port 8088 curl http://127.0.0.1:8088/selftest
参与方式
- 运行测试套件:
pytest infinistore/test_infinistore.py。 - 提交PR前请遵循pre-commit风格检查。
- 欢迎代码、文档或其他改进贡献。
了解更多
- 文档网站: https://bytedance.github.io/InfiniStore/
- Slack 社区(README中提供邀请链接)。
- GitHub 上的源码和问题追踪。
InfiniStore 是 LLM 推理栈中的一个细分但至关重要的组件,负责高吞吐、低延迟的缓存共享,使大模型能够高效服务大量请求。
相关
- 项目
- 项目
- 项目
- 项目