منصوبے کے بارے میں

turbovec ایک ویکٹر انڈیکس ہے جو Rust میں لاگو کیا گیا ہے اور بائنڈنگز کے ذریعے Python کو فراہم کیا جاتا ہے۔ یہ Google Research کے TurboQuant الگورتھم پر مبنی ہے، جو ایک ڈیٹا-اوبلیویئس کوانٹائزیشن اپروچ ہے جس میں نارملائزیشن، فکسڈ رینڈم روٹیشن، ڈسٹریبیوشن پر مبنی Lloyd-Max اسکیلر کوانٹائزیشن، بٹ-پیکنگ، اور لینتھ-رینارملائزڈ انر-پروڈکٹ اسکورنگ شامل ہیں۔ یہ پروجیکٹ میموری-محدود، کم-لیٹنسی لوکل ویکٹر سرچ کو نشانہ بناتا ہے اور اسے کسی مینیجڈ سروس کی ضرورت نہیں ہے۔ مرکزی TurboQuantIndex ایک ڈائمینشن اور بٹ وڈتھ کے ساتھ بنایا جاتا ہے، جس میں 2-بٹ اور 4-بٹ انڈیکسنگ دستاویزی ہے۔ ویکٹرز کو بغیر کسی علیحدہ ٹریننگ مرحلے، پیرامیٹر-ٹیوننگ مرحلے، یا انڈیکس ری بلڈ کے انکریمنٹل طور پر شامل کیا جاتا ہے۔ Python ان پٹ float32 NumPy اریز استعمال کرتے ہیں؛ دیگر ڈیٹا ٹائپس کو خاموشی سے تبدیل کرنے کے بجائے مسترد کر دیا جاتا ہے۔ API میں add، search، write، load، اور sync آپریشنز فراہم کیے گئے ہیں۔ سرچ مطلوبہ k قریب ترین نتائج کے لیے اسکورز اور انڈیکسز واپس کرتی ہے۔ IdMapIndex دستاویزات کے مطابق مستحکم uint64 ایکسٹرنل IDs، add_with_ids، اور ID کے ذریعے O(1) ریموول شامل کرتا ہے۔ یہ اسی پوری-فائل write/load ورک فلو اور انکریمنٹل sync پرسسٹنس کو سپورٹ کرتا ہے۔ sync طریقہ کو صرف پچھلی sync کے بعد کی تبدیلیوں کو محفوظ کرنے کے طور پر بیان کیا گیا ہے، جو ہر کال پر ایک fsync استعمال کرتا ہے اور پورے انڈیکس کو دوبارہ لکھے بغیر چھوٹے اضافے یا ریموول کی اجازت دیتا ہے۔ write اور load مکمل اسنیپ شاٹس کے لیے دستیاب رہتے ہیں۔ فلٹرڈ یا ہائبرڈ ریٹریول کو ID ایلاؤ لسٹ یا سلاٹ بٹ ماسک کے ذریعے سپورٹ کیا جاتا ہے جو سرچ کو پاس کیا جاتا ہے۔ ایلاؤ لسٹ کسی ایکسٹرنل سسٹم جیسے SQL، BM25، ایکسیس-کنٹرول لاجک، یا ٹائم فلٹر سے آ سکتی ہے۔ README بیان کرتا ہے کہ فلٹرنگ SIMD سرچ کرنل کے اندر لاگو کی جاتی ہے، بغیر اجازت والے ویکٹرز والے بلاکس کو چھوڑ دیا جاتا ہے، اور نتیجہ کی تعداد min(k، الگ اجازت یافتہ ویکٹرز کی تعداد) ہوتی ہے۔ سرچ رن ٹائم فیچر سلیکشن کے ساتھ ہاتھ سے لکھے گئے SIMD کرنلز استعمال کرتی ہے۔ دستاویزی اہداف میں ARM NEON SDOT/SMMLA، x86 AVX-512 VNNI اور vpermb، نیز AVX2 اور اسکیلر فال بیکس شامل ہیں۔ Rust بلڈ ایک x86-64-v2 بیس لائن استعمال کرتا ہے جبکہ سپورٹنگ ہارڈویئر پر نئے کرنلز کو فعال کرتا ہے۔ بیان کردہ بینچ مارک کنفیگریشن میں Rayon کے ذریعے ملٹی-تھریڈنگ فراہم کی جاتی ہے۔ ایک اختیاری TQ+ کیلیبریشن مرحلہ انڈیکسنگ سے پہلے ایک نمائندہ نمونے سے فی-کوآرڈینیٹ شفٹ اور اسکیل ویلیوز فٹ کر سکتا ہے۔ README اسے محدود-ڈائمینشنل یا کم-بٹ سیٹنگز میں ریکال بہتر بنانے کے طور پر بیان کرتا ہے، خاص طور پر GloVe-اسٹائل ایمبیڈنگز، جبکہ بعد کے اضافوں کے لیے دوبارہ قابل استعمال رہتا ہے۔ ایک غیر کیلیبریٹڈ انڈیکس سادہ TurboQuant استعمال کرتا ہے۔ Python انسٹالیشن pip کے ذریعے دستیاب ہے، اور Rust استعمال cargo add turbovec کے ذریعے۔ پروجیکٹ LangChain، LlamaIndex، Haystack، اور Agno کے لیے اختیاری انٹیگریشنز دستاویز کرتا ہے، جو ان کے ان-میموری یا ریفرنس ویکٹر اسٹورز کے لیے ڈراپ-ان متبادل کے طور پر پیش کیے گئے ہیں۔ یہ انٹیگریشنز اختیاری پیکیج ایکسٹراز کے ذریعے انسٹال کیے جاتے ہیں۔ ریپوزٹری میں پروجیکٹ کے ذریعے چلائے گئے بینچ مارکس شامل ہیں جو turbovec کا FAISS IndexPQFastScan اور IndexPQ کنفیگریشنز کے ساتھ موازنہ کرتے ہیں۔ README کم میموری استعمال، اس کی ٹیسٹ شدہ ARM اور x86 کنفیگریشنز میں تیز ماپا گیا سرچ، انسرشن اور ریموول لیٹنسی پیمائش، ریکال چارٹس، کمپریشن نتائج، اور save/load ٹائمنگز رپورٹ کرتا ہے۔ یہ فراہم کردہ بینچ مارک نتائج ہیں نہ کہ آزاد فریق ثالث پیمائش۔ GloVe اور OpenAI ایمبیڈنگ ڈیٹا سیٹس ڈاؤن لوڈ کرنے، ریکال/اسپیڈ/کمپریشن سوئٹ چلانے، JSON نتائج محفوظ کرنے، اور چارٹس دوبارہ تخلیق کرنے کے لیے اسکرپٹس بینچ مارکس ڈائریکٹری میں شامل ہیں۔