Turbovec – Thư viện vector search mã nguồn mở trên Rust giúp giảm 8 lần bộ nhớ và tăng tốc tìm kiếm so với FAISS

Công nghệ18 tháng 8, 2026·8 phút đọc

Turbovec là thư viện vector index mã nguồn mở được viết bằng Rust, áp dụng thuật toán TurboQuant của Google Research để nén vector float32 xuống chỉ còn 2-4 bit, giúp giảm dung lượng từ 31 GB xuống 4 GB cho 10 triệu tài liệu mà vẫn tăng tốc tìm kiếm trung bình 3,4 lần so với FAISS. Với các kernel SIMD được tối ưu thủ công cho cả ARM và x86, hỗ trợ ingest dữ liệu trực tuyến, lưu trữ gia tăng và lọc kết quả ngay trong kernel, Turbovec là lựa chọn lý tưởng cho các hệ thống RAG cần bảo mật dữ liệu, tiết kiệm bộ nhớ và độ trễ thấp.

Turbovec – Thư viện vector search mã nguồn mở trên Rust giúp giảm 8 lần bộ nhớ và tăng tốc tìm kiếm so với FAISS

Turbovec: Thư viện vector search trên Rust giúp nén 8 lần bộ nhớ và tăng tốc tìm kiếm vượt trội so với FAISS

Trong bối cảnh các ứng dụng AI tạo sinh và hệ thống RAG (Retrieval-Augmented Generation) ngày càng phổ biến, việc lưu trữ và tìm kiếm trên hàng triệu vector nhúng (embeddings) luôn là bài toán nan giải về bộ nhớ và hiệu năng. Turbovec – một thư viện vector index mã nguồn mở viết bằng Rust, vừa xuất hiện với giải pháp đột phá: áp dụng thuật toán TurboQuant của Google Research để nén vector từ float32 (32-bit) xuống chỉ còn 2–4 bit, giúp giảm dung lượng từ 31 GB xuống chỉ còn 4 GB cho bộ dữ liệu 10 triệu tài liệu, đồng thời tăng tốc độ tìm kiếm trung bình 3,4 lần so với FAISS – thư viện vector search nổi tiếng của Meta.

Bước đột phá về nén dữ liệu: Từ float32 xuống 2-bit

Ý tưởng cốt lõi của Turbovec dựa trên nghiên cứu TurboQuant của Google Research (đăng tại ICLR 2026), một bộ lượng tử hóa (quantizer) không cần dữ liệu huấn luyện (data-oblivious) với độ méo dữ liệu gần tối ưu theo lý thuyết. Thay vì lưu trữ mỗi vector dưới dạng 32-bit floating-point, Turbovec nén mỗi tọa độ (coordinate) xuống chỉ còn 2 hoặc 4 bit.

Quá trình nén diễn ra qua 6 bước:

  1. Chuẩn hóa (Normalize): Tách riêng độ dài (norm) của vector và lưu dưới dạng một số float, biến mỗi vector thành một hướng đơn vị trên siêu cầu (hypersphere).

  2. Xoay ngẫu nhiên (Random rotation): Nhân tất cả vector với cùng một ma trận trực giao ngẫu nhiên. Sau khi xoay, mỗi tọa độ tuân theo phân phối Beta hội tụ về Gaussian N(0, 1/d) ở chiều cao – bất kể dữ liệu đầu vào là gì.

  3. Hiệu chuẩn tọa độ (TQ+ Calibration): Vì phân phối Beta chỉ là tiệm cận, Turbovec cho phép gọi index.calibrate(sample) với khoảng 1024 vector đại diện để tinh chỉnh hai hệ số shift và scale cho từng tọa độ, giúp cải thiện độ chính xác lên tới +2.2 điểm phần trăm ở top-1.

  4. Lượng tử hóa Lloyd-Max: Dựa trên phân phối đã biết, mã Lloyd-Max tối ưu được tính toán sẵn để chia mỗi tọa độ thành 4 nhóm (2-bit) hoặc 16 nhóm (4-bit) sao cho sai số bình phương trung bình là nhỏ nhất.

  5. Đóng gói bit (Bit-pack): Nén các số nguyên nhỏ thành chuỗi bytes liên tục. Một vector 1536 chiều từ 6.144 bytes (FP32) giảm xuống còn 384 bytes (2-bit) – tức nén 16 lần.

  6. Điều chỉnh độ dài khi tính điểm: Lưu trữ một scalar bổ sung mỗi vector để bù lại độ co rút do lượng tử hóa, giúp ước lượng inner product trở nên không thiên lệch (unbiased) mà không tốn thêm chi phí tìm kiếm.

Điểm mấu chốt của TurboQuant là: chỉ cần một phép xoay ngẫu nhiên, phân phối dữ liệu trở nên có thể dự đoán được, từ đó tối ưu được bảng mã (codebook) từ toán học thuần túy, không cần giai đoạn huấn luyện riêng.

Hiệu năng vượt trội so với FAISS

Turbovec được đánh giá benchmark trên cả hai kiến trúc ARM (Google Axion, 8 vCPU) và x86 (Intel Xeon Platinum 8481C / Sapphire Rapids, 8 vCPU) với bộ dữ liệu 100K vector và 1K truy vấn:

Kiến trúcTốc độ tìm kiếm 4-bitTốc độ tìm kiếm 2-bit
ARMNhanh hơn 3.5×Nhanh hơn 26%
x86Nhanh hơn 3.4×Nhanh hơn 20%

Sở dĩ đạt được con số ấn tượng này là nhờ các kernel SIMD được viết tay, tận dụng tối đa các tập lệnh đặc thù của từng kiến trúc:

  • ARM: NEON SDOT/SMMLA
  • x86: AVX-512 VNNI với vpermb, fallback xuống AVX2 rồi scalar

Các kernel này cho phép so khớp (matching) trực tiếp với bảng mã (LUT – Look-Up Table) 16-bit, giúp tăng tốc đáng kể so với giải pháp FAISS IndexPQFastScan vốn dùng bảng LUT 32-bit.

Độ chính xác (recall) cũng không hề thua kém: với vector OpenAI d=1536 và d=3072, Turbovec (đã hiệu chuẩn TQ+) đạt R@1 cao hơn FAISS từ 0,9–2,9 điểm phần trăm trên hầu hết các cấu hình. Ngay cả ở chiều thấp (GloVe d=200) – trường hợp khó khăn nhất – hiệu chuẩn TQ+ giúp vượt FAISS nhẹ ở R@1.

Thiết kế hướng tới ứng dụng thực tế

Không chỉ mạnh về lý thuyết, Turbovec chú trọng đến trải nghiệm triển khai thực tế với những tính năng đáng chú ý:

  • Online ingest: Thêm vector bất kỳ lúc nào, không cần huấn luyện trước, không cần chỉnh tham số, không phải rebuild khi dữ liệu tăng.

  • Lưu trữ gia tăng (Incremental saves): Hàm sync(path) chỉ ghi phần dữ liệu thay đổi kể từ lần đồng bộ cuối, đảm bảo an toàn crash ở mọi byte. Xóa một phần tử hoặc thêm một lượng nhỏ mất vài mili giây, bất kể kích thước chỉ mục lớn đến đâu.

  • Lọc kết quả ngay trong kernel: Truyền danh sách id được phép (allowlist) vào search(), kernel SIMD sẽ bỏ qua ngay các block không có vector hợp lệ trước khi thực hiện tra cứu. Kết quả trả về luôn nằm trong tập được phép, không cần over-fetching.

  • Hoàn toàn local: Không có dịch vụ quản lý bên ngoài, dữ liệu không rời khỏi máy hay VPC của bạn. Kết hợp với bất kỳ mô hình embedding mã nguồn mở nào để tạo stack RAG hoàn toàn tách mạng (air-gapped).

  • Hỗ trợ đa ngôn ngữ: Có Python bindings (dùng pip install turbovec) và thư viện Rust gốc (cargo add turbovec). Tích hợp sẵn với các framework phổ biến như LangChain, LlamaIndex, HaystackAgno thông qua các package thay thế trực tiếp (drop-in replacements).

Hiệu suất thao tác dữ liệu

Đối với các ứng dụng RAG cần cập nhật dữ liệu thường xuyên, Turbovec cho thấy lợi thế rõ rệt:

  • Thêm vector: 6,3–19,7 µs cho một vector đơn lẻ (nhanh 7,6–13,9 lần so với FAISS), và 4,6–16,3 µs/vector khi thêm theo batch 100 vector.

  • Xóa vector: 0,44–1,37 µs mỗi thao tác – gần như tức thời do tối ưu O(1) swap-and-pop. Trong khi đó, FAISS mất tới 0,19–1,02 giây cho mỗi lần xóa một vector ở quy mô 100K, do phải đóng gói lại toàn bộ mã lưu trữ.

Header TurbovecHeader Turbovec

Cách sử dụng

Python cơ bản

import numpy as np
from turbovec import TurboQuantIndex

index = TurboQuantIndex(dim=1536, bit_width=4)
index.add(vectors)               # vectors: mảng float32 2-D (n, dim)
index.add(more_vectors)          # thêm trực tiếp, không cần huấn luyện

scores, indices = index.search(query, k=10)
index.write("my_index.tv")       # lưu snapshot toàn bộ
loaded = TurboQuantIndex.load("my_index.tv")

# Sau khi thêm dữ liệu mới, đồng bộ gia tăng:
index.sync("my_index.tv")

Tìm kiếm lai (Hybrid retrieval) với lọc kết quả

from turbovec import IdMapIndex
idx = IdMapIndex(dim=1536, bit_width=4)
idx.add_with_ids(vectors, np.array([1001, 1002, 1003], dtype=np.uint64))

# Bước 1: Hệ thống bên ngoài (SQL, BM25, ACL...) thu hẹp tập ứng viên
allowed = np.array(db.execute("SELECT id FROM docs WHERE tenant=?", (t,)).fetchall(),
                   dtype=np.uint64)
# Bước 2: Tìm kiếm vector chỉ trong tập ứng viên
scores, ids = idx.search(query, k=10, allowlist=allowed)

Phương pháp lọc ngay trong kernel này đặc biệt hữu ích cho các hệ thống cần phân chia theo tenant, kiểm soát quyền truy cập, hoặc kết hợp tìm kiếm từ khóa (BM25) với re-rank bằng vector.

Ai nên dùng Turbovec?

Nếu bạn đang xây dựng hệ thống RAG với các yêu cầu về quyền riêng tư dữ liệu, giới hạn bộ nhớ, hoặc độ trễ khắt khe, Turbovec là một lựa chọn đáng cân nhắc. Trước đây, để lưu trữ 10 triệu tài liệu dưới dạng vector float32, bạn cần 31 GB RAM – mức chi phí không hề nhỏ. Với Turbovec, con số này giảm xuống còn 4 GB, đồng thời tìm kiếm còn nhanh hơn cả FAISS – điều chưa từng có trước đây.

Đặc biệt, vì dữ liệu không bao giờ rời khỏi máy chủ, bạn có thể triển khai toàn bộ hệ thống RAG trên hạ tầng on-premises hoặc VPC riêng, đáp ứng các yêu cầu nghiêm ngặt về tuân thủ dữ liệu tại thị trường Việt Nam – nơi Luật Bảo vệ dữ liệu cá nhân (Nghị định 13/2023/NĐ-CP) đang được thực thi ngày càng chặt chẽ.

Thư viện hiện tại chưa có tài liệu chính thức bằng tiếng Việt, nhưng API khá đơn giản và dễ làm quen. Cộng đồng nguồn mở vẫn đang tích cực phát triển, hứa hẹn sẽ sớm có thêm nhiều tính năng mới.

Badge phiên bản PyPIBadge phiên bản PyPI Badge ArXivBadge ArXiv

Kết luận

Turbovec không chỉ là một bản cài đặt lại của TurboQuant, mà còn mang những cải tiến đáng kể như hiệu chuẩn TQ+ để cải thiện recall ở các chiều vector thấp, kernel SIMD được tối ưu sâu cho cả hai kiến trúc lớn, và thiết kế hướng tới hệ thống thực tế với lưu trữ gia tăng an toàn và lọc kết quả hiệu quả. Sự kết hợp giữa mức độ nén 8 lần, tốc độ tìm kiếm vượt trội và khả năng vận hành offline hoàn toàn khiến Turbovec trở thành một ứng viên sáng giá cho thế hệ tiếp theo của các hệ thống vector database – đặc biệt phù hợp với các startup Việt Nam đang xây dựng ứng dụng AI với nguồn lực hạn chế về hạ tầng.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗