turbovec: ایندکس برداری سریعتر و سبکتر از FAISS
خلاصهٔ کاملتر
turbovec یه ایندکس برداریه که به زبان Rust نوشته شده و برای پایتون هم باندینگ داره. این پروژه رو الگوریتم TurboQuant تیم گوگلریسرچ ساخته که یه روش کوانتایز کردن وکتورهاست و بدون نیاز به فاز جداگونهی آموزش (train) کار میکنه. نتیجه اینه که یه کتابخونهی ۱۰ میلیون سندی که معمولاً بهصورت float32 حدود ۳۱ گیگابایت رم میخواد، تو turbovec فقط ۴ گیگابایت جا میشه؛ اونم درحالیکه جستجوش از FAISS هم سریعتره.
مکانیزم کارش اینطوریه که اول طول هر وکتور جدا ذخیره میشه و خودش تبدیل به یه جهت روی ابرکره میشه، بعد همهی وکتورها با یه چرخش تصادفی یکسان میچرخن؛ این چرخش باعث میشه توزیع مختصات هر وکتور، صرفنظر از دادهی ورودی، قابلپیشبینی بشه (شبیه توزیع گاوسی). با این پیشفرض، یه کوانتایزر بهینه به اسم Lloyd-Max از قبل محاسبه میشه که هر مختصات رو به ۴ یا ۱۶ سطل (برای ۲ یا ۴ بیت) میریزه؛ یعنی یه وکتور ۱۵۳۶بعدی از ۶۱۴۴ بایت به ۳۸۴ بایت میرسه، یعنی ۱۶ برابر فشردهسازی.
از نظر سرعت جستجو، turbovec روی معماری ARM بهطور میانگین ۳.۵ برابر تو حالت ۴بیتی و ۲۶٪ تو حالت ۲بیتی از FAISS FastScan جلوتره؛ روی x86 هم اعداد مشابهی داره (۳.۴ برابر و ۲۰٪). اضافه و حذف کردن وکتور هم خیلی سریعتر از FAISS انجام میشه، چون بهجای ریایندکس کامل، ذخیرهسازی افزایشی (incremental) داره. یه قابلیت جالب دیگه هم فیلتر کردن هنگام جستجوئه: میشه یه لیست از آیدیهای مجاز داد و کرنل جستجو مستقیم همونها رو در نظر میگیره، بدون افت دقت روی فیلترهای محدود.
turbovec جایگزین مستقیم storeهای برداری پیشفرض LangChain، LlamaIndex، Haystack و Agno هم هست، یعنی فقط با عوض کردن ایمپورت میشه جاش گذاشت. همهچیز هم کاملاً لوکال اجرا میشه و هیچ دادهای بیرون از دستگاه یا شبکهی خودتون نمیره؛ برای پایپلاینهای RAG که حریم خصوصی یا تأخیر شبکه براشون مهمه، این نکته میتونه تعیینکننده باشه.
نکات کلیدی:
- کتابخونهی ۱۰ میلیون سندی از ۳۱ گیگ (float32) به ۴ گیگ میرسه
- روی ARM تا ۳.۵ برابر و روی x86 تا ۳.۴ برابر از FAISS FastScan سریعتره (حالت ۴بیتی)
- بدون فاز جداگونهی آموزش، وکتور اضافهشده بلافاصله ایندکس میشه
- فیلتر هنگام جستجو مستقیم تو کرنل SIMD انجام میشه، بدون افت دقت
- جایگزین آماده برای LangChain، LlamaIndex، Haystack و Agno




