PipeANN
PipeANN is a low-latency, billion-scale, and updatable graph-based vector store on SSD.
✨ Key Features¶
| Feature | Description |
|---|---|
| ⚡ Ultra-Low Latency | <1ms for 1 billion vectors (top-10, 90% recall), only 1.14x-2.02x of in-memory index |
| 📈 High Throughput | 20K QPS for 1 billion vectors, outperforming DiskANN and SPANN |
| 🔄 Efficient Updates | Insert/delete with minimal search interference (1.07x fluctuation) |
| 🎯 Speculative Filtering | 3K QPS & 6ms latency for attribute-filtered ANNS on 100 million vectors |
| 💾 Memory Efficient | >10x less memory than in-memory indexes (~40GB for 1B vectors) |
| 🐍 Easy-to-Use | Both Python (faiss-like) and C++ interfaces supported |
| 🔌 Seamless Integration | LangChain- and Qdrant-compatible APIs for easy integration |
| 🗄️ Multi-SSD Scaling | Scales to 70K QPS & 2ms tail latency on 1B vectors (4 SSDs, SPDK backend) |
📊 Performance Comparison¶
PipeANN is suitable for both large-scale and memory-constraint scenarios.
| Dataset | Dimension | Memory | Latency | QPS | PipeANN | HNSW | DiskANN |
|---|---|---|---|---|---|---|---|
| 1B (SPACEV) | 100 | 40GB | 2ms | 5K | ✅ | ❌ 1TB mem | ❌ 6ms |
| 80M (Wiki) | 768 | 10GB | 1.5ms | 5K | ✅ | ❌ 300GB mem | ❌ 4ms |
| 10M (SIFT) | 128 | 550MB | <1ms | 10K | ✅ | ❌ 4GB mem | ❌ 3ms |
Recall@10 = 0.99, Samsung PM9A3 SSD, 32B PQ-compressed vectors (128B for Wiki).
🚀 Quick Start¶
Requirements¶
| Component | Requirement |
|---|---|
| CPU | x86 or ARM with SIMD (AVX2/AVX512 recommended) |
| DRAM | ~40GB (search) or ~90GB (search+update) per billion vectors |
| SSD | ~700GB for 1B SIFT, ~900GB for 1.4B SPACEV |
- OS: Linux with
io_uring(fast) orlibaio(compatible) support, Ubuntu 22.04 with Kernel 6.8 recommended - Compiler: C++17 support required
- Constraints: <2B vectors to avoid integer overflow
- RAID users: Use Kernel > 6.1 for better
io_uringperformance (liburing#792), or use SPDK backend.
Build¶
Install dependencies:
# Ubuntu >= 22.04
sudo apt install make cmake g++ libaio-dev libgoogle-perftools-dev \
clang-format libmkl-full-dev libeigen3-dev
# For Python interface
pip3 install "pybind11[global]"
libmkl could be replaced by other BLAS libraries (e.g., openblas).
Build liburing:
Build PipeANN:
# For Python users: editable install of the Python package
pip install -e .
# For C++ users: build binaries under build/
bash ./build.sh
C++ Interface¶
# Search an existing on-disk index with PipeANN pipelined search
build/tests/search_disk_index uint8 index_prefix 1 32 query.bin gt.bin 10 l2 pq 2 10 10 20 30 40
See C++ Interface for index building, updates, and filtered / OOD search, and SPDK Backend to use SPDK as I/O engine (fastest).
Python Interface¶
from pipeann import IndexPipeANN, Metric
idx = IndexPipeANN(data_dim=128, data_type='float32', metric=Metric.L2)
idx.omp_set_num_threads(32)
idx.set_index_prefix(index_prefix)
idx.add(vectors, tags) # insert (auto disk-convert at 100K)
ids, dists = idx.search(queries, topk=10, L=50) # search
idx.save(index_prefix) # persist
See Python Interface for the full API, including filtered / OOD search and example output.
Application Integrations¶
PipeANN provides LangChain-compatible vector store and Qdrant-compatible HTTP API for seamless integration with existing applications (e.g., Open WebUI).
See Application Integrations for details.
📰 Updates¶
- May 18, 2026: SPDK backend supported, stable tail latency with better multi-SSD scalability
- May 18, 2026: Filtered Search (Speculative Filtering), OOD search (NGFix) & range search supported
- May 18, 2026: PipeANN is integrated into OdinANN (search + insert), higher performance with less threads
- Mar 27, 2026: PiPNN indexing algorithm supported
- Dec 4, 2025: Inner product and filtered ANNS (arbitrary filter) supported
- Oct 14, 2025: RaBitQ (1-bit and multi-bit quantization) supported
- Sep 29, 2025: Python interface released
- Jul 16, 2025: Vector update (insert/delete) supported
📖 Citation¶
If you use PipeANN in your research, please cite our papers:
@inproceedings{fast26odinann,
author = {Hao Guo and Youyou Lu},
title = {OdinANN: Direct Insert for Consistently Stable Performance
in Billion-Scale Graph-Based Vector Search},
booktitle = {24th USENIX Conference on File and Storage Technologies (FAST 26)},
year = {2026},
address = {Santa Clara, CA},
pages = {133--147},
publisher = {USENIX Association}
}
@inproceedings{osdi25pipeann,
author = {Hao Guo and Youyou Lu},
title = {Achieving Low-Latency Graph-Based Vector Search via
Aligning Best-First Search Algorithm with SSD},
booktitle = {19th USENIX Symposium on Operating Systems Design and Implementation (OSDI 25)},
year = {2025},
address = {Boston, MA},
pages = {171--186},
publisher = {USENIX Association}
}
🙏 Acknowledgments¶
PipeANN is based on DiskANN and FreshDiskANN. We sincerely appreciate their excellent work.