Giới thiệu
turbovec là một vector index viết bằng Rust, có Python bindings, dựa trên thuật toán TurboQuant của Google Research. Mục tiêu của dự án là giảm mạnh bộ nhớ cho retrieval cục bộ mà vẫn giữ tốc độ search đủ cao để dùng trong RAG.
Claim chính của README rất cụ thể: một corpus 10 triệu document cần khoảng 31 GB RAM nếu lưu embedding dạng float32, còn turbovec đưa xuống khoảng 4 GB. Dự án nhắm tới các hệ thống cần giữ dữ liệu trong máy hoặc trong VPC, thay vì gửi embedding sang dịch vụ managed bên ngoài.
Tính năng chính
- Online ingest: thêm vector là index luôn, không cần bước train riêng hay rebuild toàn bộ khi corpus tăng.
- SIMD search: kernel riêng cho ARM và x86, có fallback AVX2/scalar.
- Incremental save:
sync(path)chỉ ghi phần thay đổi, hữu ích khi index lớn nhưng mutation nhỏ. - Filtered search: truyền allowlist id hoặc bitmask để lọc ngay trong kernel, tránh over-fetch rồi bỏ kết quả.
- Python và Rust API: dùng được trực tiếp trong Python, hoặc nhúng ở tầng Rust.
- Integration: có drop-in store cho LangChain, LlamaIndex, Haystack và Agno.
Số benchmark cần nhớ
README so sánh với FAISS IndexPQFastScan trên benchmark 100K vectors, 1K queries, k=64. Với 4-bit, turbovec báo nhanh hơn trung bình khoảng 3.4x trên x86 và 3.5x trên ARM. Với 2-bit, mức thắng nhỏ hơn: khoảng 20% trên x86 và 26% trên ARM.
Về recall, TQ+ được báo thắng FAISS ở R@1 trên phần lớn cấu hình OpenAI d=1536 và d=3072, còn corpus GloVe d=200 là case khó hơn. Dự án cũng mô tả calibration một lần bằng mẫu đại diện khoảng 1024 vector để cải thiện recall trong những regime lệch phân phối.
Dev nên quan tâm vì
Nếu bạn đang build RAG nội bộ, giới hạn thật thường không phải model mà là RAM, latency và quyền đưa dữ liệu ra khỏi môi trường kiểm soát. turbovec đáng thử khi:
- Corpus đủ lớn để float32 trở thành chi phí đáng kể.
- Dữ liệu không được rời khỏi máy hoặc VPC.
- Bạn cần filter theo tenant, ACL, thời gian hoặc candidate set từ SQL/BM25.
- Workload có nhiều mutation nhỏ, nên incremental persistence có giá trị.
Điểm cần tự kiểm chứng là benchmark. Các số trong README là author-published và dùng harness riêng của repo. Trước khi thay vector store production, hãy đo trên embedding thật, truy vấn thật, pattern filter thật và phần cứng thật của bạn.