FAISS: Pencarian Kemiripan Vektor yang Efisien dalam Skala Besar
FAISS (Facebook AI Similarity Search) adalah library C++ dengan binding Python untuk mengindeks dan mencari vektor dense. Ketika aplikasi Anda perlu menemukan tetangga terdekat dari sebuah embedding di antara jutaan atau miliaran vektor, FAISS memberi kendali rinci atas trade-off kecepatan, memori, dan recall yang biasanya disembunyikan vector database terkelola di balik API. Tutorial ini berfokus pada library-nya sendiri: tipe-tipe index, cara kerja internalnya, dan cara menggunakannya di produksi.
Untuk siapa tutorial ini
Ini bukan sekadar panduan generik "membangun mesin pencari semantik". Kami berasumsi Anda sudah memahami embedding dan cosine similarity secara umum. Sebagai gantinya kita membahas mendalam ragam index FAISS: index flat eksak, index inverted-file (IVF), product quantization (PQ), graph HNSW, pemetaan ID, persistensi, dan offload ke GPU. Di akhir tutorial Anda akan mampu memilih index yang tepat sesuai ukuran dataset dan anggaran latensi, serta menyetelnya secara sengaja, bukan menebak-nebak.
Apa itu FAISS dan apa yang bukan
FAISS menyelesaikan satu masalah dengan sangat baik: diberikan sebuah vektor query, kembalikan k vektor paling mirip dari koleksi, menggunakan jarak L2 (Euclidean) atau inner product. Ini adalah library, bukan service. Tidak ada lapisan jaringan, autentikasi, mesin filter metadata, maupun persistensi bawaan selain membaca dan menulis satu file index.
Minimalisme itulah intinya. FAISS memungkinkan Anda:
- Menentukan dengan tepat cara vektor disimpan (presisi penuh, terkuantisasi, di disk).
- Menukar recall demi kecepatan dengan mengubah satu parameter saat query.
- Menjalankan index yang sama di CPU atau GPU dengan satu baris pemindahan.
- Menanamkan index langsung di dalam proses Anda sendiri, menghindari round-trip jaringan.
Kapan memakai FAISS vs vector database terkelola
Gunakan FAISS ketika:
- Anda ingin satu library tertanam di service tanpa infrastruktur tambahan.
- Anda butuh kendali presisi atas struktur index dan jejak memori.
- Vektor Anda sebagian besar statis, atau index dibangun ulang secara terjadwal.
- Anda melakukan riset atau komputasi kemiripan secara batch.
Gunakan vector database terkelola (Qdrant, Milvus, Weaviate, pgvector, Pinecone) ketika:
- Anda butuh filter metadata yang kaya dikombinasikan dengan pencarian vektor.
- Anda memerlukan insert, update, dan delete yang sering dengan jaminan durabilitas.
- Anda ingin penskalaan horizontal, replikasi, dan API HTTP/gRPC langsung pakai.
- Mengoperasikan service stateful dapat diterima dan Anda tidak ingin membangunnya sendiri.
Banyak database tersebut sebenarnya memakai algoritma mirip FAISS (IVF, HNSW, PQ) di belakang layar, jadi memahami FAISS membuat Anda lebih mahir menyetelnya juga.
Instalasi
FAISS hadir sebagai dua paket yang saling eksklusif. Pasang persis satu.
# Build CPU-only (jalan di mana saja, default yang baik)
pip install faiss-cpu
Build GPU (butuh GPU berkemampuan CUDA dan runtime CUDA yang cocok)
pip install faiss-gpu
Untuk contoh-contoh ini kita juga memakai sentence-transformers untuk menghasilkan embedding dan numpy untuk penanganan array.
pip install sentence-transformers numpy
Pemeriksaan cepat:
import faiss
import numpy as np
print("Versi FAISS:", faiss.version)
print("Jumlah GPU yang terlihat FAISS:", faiss.getnumgpus())
Jika getnumgpus() mengembalikan 0, Anda memakai build CPU, yang baik-baik saja untuk semuanya kecuali bagian GPU di akhir.
Membuat embedding
FAISS bekerja dengan array NumPy float32 berbentuk (nvektor, dimensi). FAISS tidak menghasilkan embedding sendiri; Anda membawa milik Anda. Di sini kita memakai model sentence-transformer kecil.
from sentencetransformers import SentenceTransformer
import numpy as np
model = SentenceTransformer("all-MiniLM-L6-v2") # output 384 dimensi
documents = [
"FAISS melakukan pencarian nearest-neighbour atas vektor dense.",
"Product quantization memampatkan vektor untuk menghemat memori.",
"Index inverted file mempartisi ruang vektor menjadi sel-sel.",
"HNSW membangun graph small-world yang mudah dinavigasi untuk pencarian cepat.",