عن المشروع
turbovec هو فهرس متجهي مطبق بلغة Rust ومُعرض لـ Python عبر روابط. يعتمد على خوارزمية TurboQuant من Google Research، وهي طريقة قياس كمي غير معتمدة على البيانات تستخدم التطبيع، دوران عشوائي ثابت، قياس كمي من نوع لويد-ماكس المعتمد على التوزيع، حزم البتات، وتقييم الضرب الداخلي المعاد تطبيعه. يستهدف المشروع البحث المتجهي المحلي منخفض الكمون والمقيد بالذاكرة، ولا يتطلب خدمة مُدارة.
يتم إنشاء TurboQuantIndex الرئيسي ببعد وعرض بت، مع توثيق الفهرسة ثنائية ورباعية البت. تُضاف المتجهات بشكل تزايدي دون خطوة تدريب منفصلة أو مرحلة ضبط معلمات أو إعادة بناء الفهرس. تستخدم مدخلات Python مصفوفات NumPy من نوع float32؛ ويتم رفض الأنواع الأخرى بدلاً من تحويلها بصمت. توفر واجهة البرمجة عمليات الإضافة، البحث، الكتابة، التحميل، والمزامنة. يُرجع البحث النتائج والمؤشرات لأقرب k نتيجة مطلوبة.
يضيف IdMapIndex معرفات خارجية ثابتة من نوع uint64، وadd_with_ids، وإزالة O(1) حسب المعرف وفقًا للتوثيق. يدعم نفس سير عمل الكتابة/التحميل الكامل للملف والحفظ التزايدي للمزامنة. تُوصف طريقة المزامنة بأنها تحفظ فقط التغييرات منذ المزامنة السابقة، باستخدام fsync واحد لكل استدعاء وتسمح بإلحاقات أو إزالات صغيرة دون إعادة كتابة الفهرس بأكمله. تظل write وload متاحة للقطات الكاملة.
يتم دعم الاسترجاع المُصفَّى أو الهجين من خلال قائمة سماح للمعرفات أو قناع بت للفتحة يتم تمريره إلى البحث. يمكن أن تأتي قائمة السماح من نظام خارجي مثل 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 المختبرة، وقياسات كمون الإدراج والإزالة، ومخططات الاستدعاء، ونتائج الضغط، وتوقيتات الحفظ/التحميل. هذه نتائج مقاييس مُقدمة وليست قياسات مستقلة من طرف ثالث. يتم تضمين نصوص لتنزيل مجموعات بيانات تضمين GloVe وOpenAI، وتشغيل مجموعات اختبار الاستدعاء/السرعة/الضغط، وحفظ نتائج JSON، وإعادة إنشاء المخططات في دليل benchmarks.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.