इस प्रोजेक्ट के बारे में
turbovec एक वेक्टर इंडेक्स है जिसे Rust में लागू किया गया है और Python को बाइंडिंग्स के माध्यम से उजागर किया गया है। यह Google Research के TurboQuant एल्गोरिथ्म के चारों ओर बनाया गया है, जो एक डेटा-ओब्लिवियस क्वांटाइजेशन दृष्टिकोण है जो नॉर्मलाइजेशन, एक निश्चित रैंडम रोटेशन, वितरण-आधारित Lloyd-Max स्केलर क्वांटाइजेशन, बिट-पैकिंग और लंबाई-पुनर्नॉर्मलाइज्ड इनर-प्रोडक्ट स्कोरिंग का उपयोग करता है। यह प्रोजेक्ट मेमोरी-सीमित, कम-विलंबता वाले लोकल वेक्टर सर्च को लक्षित करता है और इसके लिए किसी मैनेज्ड सेवा की आवश्यकता नहीं होती है।
मुख्य TurboQuantIndex को एक डाइमेंशन और बिट चौड़ाई के साथ बनाया जाता है, जिसमें 2-बिट और 4-बिट इंडेक्सिंग दस्तावेजित है। वेक्टर को बिना किसी अलग ट्रेनिंग चरण, पैरामीटर-ट्यूनिंग चरण या इंडेक्स रीबिल्ड के इंक्रीमेंटल रूप से जोड़ा जाता है। Python इनपुट float32 NumPy एरे का उपयोग करते हैं; अन्य dtypes को चुपचाप कन्वर्ट करने के बजाय अस्वीकार कर दिया जाता है। API add, search, write, load और sync ऑपरेशन प्रदान करता है। Search अनुरोधित k निकटतम परिणामों के लिए स्कोर और इंडेक्स लौटाता है।
IdMapIndex स्थिर uint64 एक्सटर्नल IDs, add_with_ids और दस्तावेज़ीकरण के अनुसार ID द्वारा O(1) रिमूवल जोड़ता है। यह समान संपूर्ण-फ़ाइल write/load वर्कफ़्लो और इंक्रीमेंटल sync पर्सिस्टेंस का समर्थन करता है। sync विधि को पिछले sync के बाद से केवल परिवर्तनों को पर्सिस्ट करने के रूप में वर्णित किया गया है, जो प्रति कॉल एक fsync का उपयोग करती है और पूरे इंडेक्स को फिर से लिखे बिना छोटे एपेंड या रिमूवल की अनुमति देती है। write और load संपूर्ण स्नैपशॉट के लिए उपलब्ध रहते हैं।
फ़िल्टर्ड या हाइब्रिड रिट्रीवल को search में पास किए गए ID अलाउलिस्ट या स्लॉट बिटमास्क के माध्यम से समर्थित किया जाता है। अलाउलिस्ट किसी बाहरी सिस्टम जैसे SQL, BM25, एक्सेस-कंट्रोल लॉजिक या टाइम फ़िल्टर से आ सकती है। README बताता है कि फ़िल्टरिंग SIMD सर्च कर्नेल के अंदर लागू की जाती है, बिना अनुमत वेक्टर वाले ब्लॉक को छोड़ दिया जाता है, और परिणाम गणना min(k, विशिष्ट अनुमत वेक्टर की संख्या) होती है।
Search रनटाइम फीचर चयन के साथ हाथ से लिखे गए 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 परिणाम सहेजने और चार्ट पुनर्जीवित करने के लिए स्क्रिप्ट बेंचमार्क डायरेक्टरी में शामिल हैं।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.