Membuat pipeline RAG lokal yang responsif itu gampang sampai korpus dokumen kamu membengkak dan memori server menjerit. Bayangkan harus menampung 10 juta dokumen yang memakan 31 GB RAM cuma untuk data float32. Di sinilah TurboVec masuk dan merusak tatanan lama. Engine pencarian vektor berbasis Rust dengan binding Python ini sanggup memangkas ukuran gigantis itu menjadi cuma 4 GB, lalu tanpa pusing langsung menyalip kecepatan library standar industri seperti FAISS.
Solusi dari Google Research bernama algoritma TurboQuant ini diterapkan secara pragmatis oleh TurboVec. Tanpa butuh tahap training terpisah, tanpa perlu pusing setel parameter berjam-jam, data langsung siap diindeks saat masuk. Ini adalah berita buruk bagi setup lama yang masih mengandalkan arsitektur indexing konvensional.
Kenapa Indexing Lama Sering Bikin Bottleneck?
Selama ini, kita dipaksa memilih antara dua hal yang sama-sama tidak enak: membiarkan vektor utuh dalam format float32 yang memakan RAM tidak ngotak, atau menggunakan Product Quantization (PQ) tradisional yang mewajibkan proses training data terlebih dahulu. Kalau korpus data kamu terus tumbuh secara dinamis, metode lama bakal memaksa kamu melakukan rebuild index dari nol. Itu jelas membuang waktu CPU dan membikin latency melonjak.
TurboVec membuang semua keribetan itu. Melalui pendekatan data-oblivious quantizer, TurboVec melakukan online ingest. Kamu bisa menambah vektor kapan saja, data langsung diindeks secara instan. Tidak ada lagi fase pembentukan codebook k-means++ yang memakan waktu sebelum pencarian bisa dijalankan.
Rahasia Dapur: Bagaimana TurboQuant Mengompresi Tanpa Mengorbankan Recall?
Secara matematis, setiap vektor adalah penunjuk arah di ruang dimensi tinggi (hypersphere). TurboVec mengecilkan ukuran data ini lewat enam tahapan krusial yang berjalan sangat presisi:
- Normalize: Vektor dicabut panjangnya (norm) dan disimpan sebagai satu nilai float terpisah. Vektor kini murni menjadi petunjuk arah unit.
- Random Rotation: Seluruh vektor dikalikan dengan matriks ortogonal acak yang sama. Rotasi acak ini secara ajaib mengubah distribusi koordinat data apa pun menjadi terdistribusi Beta, yang pada dimensi tinggi memusat ke distribusi Gaussian N(0, 1/d).
- Per-coordinate Calibration (TQ+): Pada dimensi tertentu atau model word vector, distribusi koordinat bisa sedikit melenceng dari kurva teoretis. Fitur TQ+ mencocokkan dua skalar per koordinat untuk memetakan kuantil empiris ke centroid codebook. Cukup jalankan fungsi
index.calibrate(sample)sekali dengan sekitar 1024 sampel acak, dan keakuratan recall langsung naik hingga 2,2 poin pada dataset rumit seperti GloVe. - Lloyd-Max Scalar Quantization: Karena distribusi data sudah dipaksa menjadi terprediksi, pembagian bucket (4 bucket untuk 2-bit, 16 bucket untuk 4-bit) dihitung langsung dari rumus matematika tanpa perlu melihat sampel data lapangan.
- Bit-pack: Angka hasil kuantisasi dikemas rapat dalam hitungan bit. Vektor 1536 dimensi yang tadinya makan 6.144 byte dalam format float32, mendadak menciut jadi cuma 384 byte pada mode 2-bit. Itu artinya ada kompresi hingga 16 kali lipat.
- Length-renormalized Scoring: Mengadaptasi teknik dari RaBitQ, skalar koreksi dihitung saat encoding untuk menghilangkan efek penyusutan nilai hasil kuantisasi. Saat search berlangsung, kernel SIMD mengalikan skor dengan skalar ini tanpa menambah beban komputasi di waktu pencarian.
Performa Di Atas Kertas vs Lapangan
Keunggulan terbesar TurboVec ada pada integrasi kernel SIMD buatan tangan. Untuk arsitektur ARM (seperti Google Axion), TurboVec memanfaatkan instruksi NEON SDOT dan SMMLA. Sementara di x86 (seperti Intel Xeon Platinum Sapphire Rapids), TurboVec mengamuk memakai AVX-512 VNNI dan vpermb, lengkap dengan fallback ke AVX2 dan eksekusi skalar jika dijalankan di CPU lama.
Berikut adalah gambaran performa pencarian TurboVec dibanding FAISS IndexPQFastScan berdasarkan data pengujian pada 100 ribu vektor dan 1000 query (k=64):
| Arsitektur Hardware | Mode Bit | Rata-rata Kecepatan dibanding FAISS | Mekanisme Utama Kernel SIMD |
|---|---|---|---|
| ARM (Google Axion c4a-standard-8) | 4-bit | 3,5× Lebih Cepat | NEON SDOT / SMMLA dot-product |
| ARM (Google Axion c4a-standard-8) | 2-bit | 26% Lebih Cepat | Direct vector-major scoring |
| x86 (Intel Sapphire Rapids) | 4-bit | 3,4× Lebih Cepat | AVX-512 VNNI dot-product |
| x86 (Intel Sapphire Rapids) | 2-bit | 20% Lebih Cepat | AVX-512 vpermb LUT scan |
Tidak hanya urusan pencarian, waktu untuk menyisipkan data (insertion latency) tunggal hanya memakan 6,3 hingga 19,7 mikrodetik, alias 7,6 sampai 13,9 kali lebih ngebut daripada FAISS. Bahkan untuk penghapusan data via IdMapIndex.remove(id), operasi berjalan pada kompleksitas O(1) dalam rentang 0,44 hingga 1,22 mikrodetik. FAISS harus menyusun ulang code yang tersimpan sehingga butuh waktu hingga berdetik-detik hanya untuk menghapus satu ID.
Fitur Praktis untuk Pipeline Production
Sebagai developer, kamu pasti malas kalau harus mengurus infrastruktur pencarian yang rewel. TurboVec dirancang sangat pragmatis dengan fitur-fitur yang langsung menyelesaikan masalah di lapangan.
Filter Langsung di Kernel SIMD
Pernah mengalami masalah latency melonjak gara-gara melakukan pencarian vektor lalu menyaring hasilnya belakangan pakai database SQL? TurboVec menyediakan filtered search. Kamu cukup mengirimkan daftar ID yang diizinkan (allowlist) langsung ke fungsi search().
Proses pemfilteran ini dieksekusi di dalam kernel SIMD pada blok 32-vektor. Jika satu blok tidak berisi ID yang diizinkan, kernel akan melakukan short-circuit sebelum membuang siklus CPU untuk kalkulasi skor.
Incremental Save yang Aman dari Crash
Lewat fungsi sync(path), TurboVec cuma menyimpan perubahan data yang terjadi sejak eksekusi sync terakhir. Menggunakan satu panggillan fsync per operasi, penambahan data kecil atau penghapusan ID cuma memakan waktu beberapa milidetik saja, seberapa pun besarnya ukuran indeks kamu.
Drop-in Replacement untuk Framework AI
Kamu tidak perlu merombak total codebase Python yang sudah ada. TurboVec sudah menyediakan integrasi siap pakai untuk berbagai framework populer:
- LangChain: Menggantikan
langchain_core.vectorstores.InMemoryVectorStore - LlamaIndex: Menggantikan
llama_index.core.vector_stores.SimpleVectorStore - Haystack: Menggantikan
haystack.document_stores.in_memory.InMemoryDocumentStore - Agno: Menggantikan
agno.vectordb.lancedb.LanceDb
Cara Penggunaan di Python dan Rust
Menggunakan TurboVec sangat lugas. Di Python, kamu bisa memasangnya langsung via pip:
bashpip install turbovec
Berikut contoh penggunaan dasar Python menggunakan IdMapIndex untuk manipulasi data dengan ID kustom:
pythonimport numpy as np from turbovec import IdMapIndex # Inisialisasi indeks 1536 dimensi pada kuantisasi 4-bit index = IdMapIndex(dim=1536, bit_width=4) # Tambah vektor beserta ID uint64 vectors = np.array([...], dtype=np.float32) ids = np.array([1001, 1002, 1003], dtype=np.uint64) index.add_with_ids(vectors, ids) # Filtered search: Hanya cari dari candidate IDs tertentu allowed = np.array([1001, 1003], dtype=np.uint64) scores, result_ids = index.search(query_vectors, k=10, allowlist=allowed) # Hapus data secara O(1) dan simpan incremental index.remove(1002) index.sync("my_index.tvim")
Bagi yang membangun sistem berkinerja tinggi menggunakan Rust, kamu cukup menambahkan crate ini ke dalam proyek:
rustuse turbovec::IdMapIndex; fn main() -> Result<(), Box<dyn std::error::error>> { let mut index = IdMapIndex::new(1536, 4)?; // Tambah vektor dengan ID index.add_with_ids(&vectors, &[1001, 1002, 1003])?; // Cari vektor terdekat let (scores, ids) = index.search(&queries, 10); // Simpan snapshot ke file index.write("index.tvim")?; Ok(()) }
Kebangkitan Local-First dan Air-Gapped RAG
Kehadiran TurboVec mempertegas arah industri software saat ini: efisiensi memori lokal. Dengan kemampuan berjalan secara pure local tanpa butuh managed service dari pihak ketiga, tidak ada lagi isu data sensitif bocor keluar jaringan internal perusahaan.
Dipadukan dengan embedding model sumber terbuka, TurboVec adalah fondasi sempurna untuk membangun arsitektur RAG yang benar-benar air-gapped, hemat RAM, dan memiliki latency luar biasa kencang. Bagi engineer yang sudah muak melihat tagihan cloud membludak cuma buat menampung vector database raksasa, TurboVec adalah jawaban paling konkret saat ini.
