{"id":47406827,"url":"https://github.com/thustorage/PipeANN","last_synced_at":"2026-07-12T13:00:49.100Z","repository":{"id":289696247,"uuid":"970525346","full_name":"thustorage/PipeANN","owner":"thustorage","description":"A low-latency, billion-scale, and updatable graph-based vector store on SSD.","archived":false,"fork":false,"pushed_at":"2026-07-06T04:06:17.000Z","size":6374,"stargazers_count":142,"open_issues_count":0,"forks_count":43,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-07-06T06:07:05.693Z","etag":null,"topics":["anns","approximate-nearest-neighbor-search","billion-scale","diskann","fast","odinann","osdi","pipeann","vector-database","vector-search","vector-store","vector-update"],"latest_commit_sha":null,"homepage":"https://thustorage.github.io/PipeANN/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thustorage.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE.txt","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-22T06:31:56.000Z","updated_at":"2026-07-06T04:06:23.000Z","dependencies_parsed_at":"2025-11-12T12:02:35.092Z","dependency_job_id":null,"html_url":"https://github.com/thustorage/PipeANN","commit_stats":null,"previous_names":["thustorage/pipeann"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/thustorage/PipeANN","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thustorage%2FPipeANN","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thustorage%2FPipeANN/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thustorage%2FPipeANN/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thustorage%2FPipeANN/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thustorage","download_url":"https://codeload.github.com/thustorage/PipeANN/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thustorage%2FPipeANN/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35392296,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-12T02:00:06.386Z","response_time":87,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anns","approximate-nearest-neighbor-search","billion-scale","diskann","fast","odinann","osdi","pipeann","vector-database","vector-search","vector-store","vector-update"],"created_at":"2026-03-20T19:00:20.226Z","updated_at":"2026-07-12T13:00:49.093Z","avatar_url":"https://github.com/thustorage.png","language":"C++","funding_links":[],"categories":["Sdks \u0026 Libraries"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/logo-wordmark.svg\" alt=\"PipeANN\" width=\"55%\"\u003e\n\u003c/p\u003e\n\n\u003ch3 align=\"center\"\u003e\nA low-latency, billion-scale, and updatable graph-based vector store on SSD.\n\u003c/h3\u003e\n\n## ✨ Key Features\n\n| Feature | Description |\n|---------|-------------|\n| ⚡ **Ultra-Low Latency** | \u003c1ms for 1 billion vectors (top-10, 90% recall), only 1.14x-2.02x of in-memory index |\n| 📈 **High Throughput** | 20K QPS for 1 billion vectors, outperforming DiskANN and SPANN |\n| 🔄 **Efficient Updates** | Insert/delete with minimal search interference (1.07x fluctuation) |\n| 🎯 **Speculative Filtering** | 3K QPS \u0026 6ms latency for attribute-filtered ANNS on 100 million vectors |\n| 💾 **Memory Efficient** | \u003e10x less memory than in-memory indexes (~40GB for 1B vectors) |\n| 🐍 **Easy-to-Use** | Both Python (`faiss`-like) and C++ interfaces supported |\n| 🔌 **Seamless Integration** | Milvus-compatible API (drop-in MilvusClient + gRPC server) |\n| 🗄️ **Multi-SSD Scaling** | Scales to 70K QPS \u0026 2ms tail latency on 1B vectors (4 SSDs, SPDK backend) |\n\n## 📊 Performance Comparison\n\nPipeANN is suitable for both **large-scale** and **memory-constraint** scenarios.\n\n\n| Dataset | Dimension | Memory | Latency | QPS | PipeANN | HNSW | DiskANN |\n|---------|-----|--------|---------|-----|---------|-------------| -------- |\n| 1B (SPACEV) | 100 | 40GB | 2ms | 5K | ✅ | ❌ 1TB mem | ❌ 6ms |\n| 80M (Wiki) | 768 | 10GB | 1.5ms | 5K | ✅ | ❌ 300GB mem | ❌ 4ms |\n| 10M (SIFT) | 128 | 550MB | \u003c1ms | 10K | ✅ | ❌ 4GB mem | ❌ 3ms |\n\n\u003e Recall@10 = 0.99, Samsung PM9A3 SSD, 32B PQ-compressed vectors (128B for Wiki).\n\n## 🔌 Already on Milvus? Switch in one line\n\nPipeANN speaks the **Milvus API**. Point your existing code at PipeANN and keep everything else the same — no rewrite, no new SDK.\n\n```python\n# In-process, drop-in for pymilvus.MilvusClient (URI is a directory):\nfrom pipeann import MilvusClient\nclient = MilvusClient(uri=\"./pipeann-data\")\n\n# Or talk to the PipeANN gRPC server with the stock pymilvus client:\nfrom pymilvus import MilvusClient\nclient = MilvusClient(uri=\"http://localhost:19530\")   # PipeANN server, same wire protocol\n\nclient.create_collection(\"demo\", dimension=128, metric_type=\"L2\")\nclient.insert(\"demo\", [{\"id\": 1, \"vector\": [0.1] * 128, \"color\": \"red\"}])\nclient.create_index(\"demo\")   # builds the SSD graph; lazy/no-op for the in-process client\nclient.search(\"demo\", data=[[0.1] * 128], filter=\"color == 'red'\", limit=5)\n```\n\nYou get PipeANN's on-disk, larger-than-RAM index and speculative filtering behind the API you already use. See [Application Integrations](docs/application-integrations.md) for the full guide and Milvus-vs-PipeANN benchmarks.\n\n---\n\n## 🚀 Quick Start\n\nFor **best performance**, we recommend Linux with `io_uring` support (e.g., Ubuntu 22.04 with Kernel 6.8). \n\n### 🏗️ Build\n\nInstall dependencies:\n\n```bash\n# Ubuntu \u003e= 22.04\n# libmkl could be replaced by other BLAS libraries (e.g., openblas).\nsudo apt install make cmake g++ libaio-dev libgoogle-perftools-dev \\\n                 clang-format libmkl-full-dev libeigen3-dev\n\n# gRPC, Protobuf, and RocksDB — required by the Milvus-compatible layer\n# (the gRPC server *and* the in-process MilvusClient, which share the same\n# RocksDB-backed collection engine). The Python module links RocksDB, so\n# these are needed even if you only use the Python interface.\nsudo apt install libgrpc++-dev protobuf-compiler-grpc libprotobuf-dev \\\n                 protobuf-compiler librocksdb-dev\n\n# For Python interface\npip install \"pybind11[global]\"\n\n# Build liburing\ncd third_party/liburing\n./configure \u0026\u0026 make -j\ncd ../..\n```\n\nBuild PipeANN:\n\n```bash\n# For C++ users: build C++ binaries under build/\nbash ./build.sh\n\n# For Python users: build and install the Python interface.\n# This also builds and bundles the Milvus-compatible gRPC server binary,\n# so `pipeann-server` is available straight after install.\npip install -e .\n```\n\n#### Milvus-compatible gRPC server\n\n`pip install -e .` already builds and bundles the `pipeann_milvus_server`\nbinary into the package (`pipeann/_bin/`), so you can launch it directly:\n\n```bash\npipeann-server --data_dir ./data --port 19530 --threads 8\n```\n\nTo build just the C++ server target on its own (without the Python interface):\n\n```bash\ncmake -B build -DBUILD_MILVUS_SERVER=ON . \u0026\u0026 cmake --build build --target pipeann_milvus_server\n```\n\nSee [Application Integrations](docs/application-integrations.md) for running and connecting to the server.\n\n### ⚡ C++\n\n```bash\n# Search an existing on-disk index with PipeANN pipelined search\nbuild/tests/search_disk_index uint8 index_prefix 1 32 query.bin gt.bin 10 l2 pq 2 10 10 20 30 40\n```\n\nSee [C++ Interface](docs/cpp-interface.md) for index building, index updates, and filtered / OOD search, \nand [SPDK Backend](docs/cpp-interface-spdk.md) to use SPDK as I/O engine (fastest).\n\n### 🐍 Python\n\n```python\nfrom pipeann import IndexPipeANN, Metric\n\nidx = IndexPipeANN(data_dim=128, data_type='float32', metric=Metric.L2)\nidx.omp_set_num_threads(32)\nidx.set_index_prefix(index_prefix)\nidx.add(vectors, tags)                          # insert (auto disk-convert at 100K)\nids, dists = idx.search(queries, topk=10, L=50) # search\nidx.save(index_prefix)                          # persist\n```\n\nSee [Python Interface](docs/python-interface.md#python-interface) for the full API, including filtered / OOD search and example output.\n\nSee [Application Integrations](docs/application-integrations.md) for the Milvus-compatible API (in-process and gRPC server).\n\n## 📰 Updates\n\n- **May 26, 2026**: Filter config unified around SQL-like expressions with `$$var` placeholders for batch binding; legacy selector-config loader removed\n- **May 18, 2026**: SPDK backend supported, stable tail latency with better multi-SSD scalability\n- **May 18, 2026**: Filtered Search (Speculative Filtering), OOD search ([NGFix](https://dl.acm.org/doi/abs/10.1145/3769783)) \u0026 range search supported\n- **May 18, 2026**: PipeANN is integrated into OdinANN (search + insert), higher performance with less threads\n- **Mar 27, 2026**: [PiPNN](http://arxiv.org/abs/2602.21247) indexing algorithm supported\n- **Dec 4, 2025**: Inner product and filtered ANNS (*arbitrary filter*) supported\n- **Oct 14, 2025**: [RaBitQ](https://github.com/VectorDB-NTU/RaBitQ-Library) (1-bit and multi-bit quantization) supported\n- **Sep 29, 2025**: Python interface released\n- **Jul 16, 2025**: Vector update (insert/delete) supported\n\n---\n\n## 📖 Citation\n\nIf you use PipeANN in your research, please cite our papers:\n\n```bibtex\n@misc{arxiv26pipeannfilter,\n      title={PipeANN-Filter: An Efficient Filtered Vector Search System on SSD}, \n      author={Hao Guo and Jiwu Shu and Youyou Lu},\n      year={2026},\n      eprint={2605.17992},\n      archivePrefix={arXiv},\n      primaryClass={cs.OS},\n      url={https://arxiv.org/abs/2605.17992}, \n}\n\n@inproceedings{fast26odinann,\n  author    = {Hao Guo and Youyou Lu},\n  title     = {OdinANN: Direct Insert for Consistently Stable Performance \n               in Billion-Scale Graph-Based Vector Search},\n  booktitle = {24th USENIX Conference on File and Storage Technologies (FAST 26)},\n  year      = {2026},\n  address   = {Santa Clara, CA},\n  pages     = {133--147},\n  publisher = {USENIX Association}\n}\n\n@inproceedings{osdi25pipeann,\n  author    = {Hao Guo and Youyou Lu},\n  title     = {Achieving Low-Latency Graph-Based Vector Search via \n               Aligning Best-First Search Algorithm with SSD},\n  booktitle = {19th USENIX Symposium on Operating Systems Design and Implementation (OSDI 25)},\n  year      = {2025},\n  address   = {Boston, MA},\n  pages     = {171--186},\n  publisher = {USENIX Association}\n}\n```\nSee [Repository Layout](docs/repository-layout.md) for code layout and scripts.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthustorage%2FPipeANN","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthustorage%2FPipeANN","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthustorage%2FPipeANN/lists"}