Manticore Search 13.2.3 अपनी K-nearest-neighbour ( KNN ) इंजन में वेक्टर क्वांटाइज़ेशन (VQ) का परिचय देता है। यह नई विशेषता RAM उपयोग को एक क्रम के गुणांक से कम करती है, इंडेक्सिंग को तेजी से करती है, और फिर भी पूर्ण-सटीकता वेक्टर्स की खोज थ्रूपुट के साथ मेल खाती है (या यहां तक कि उसे मात देती है)।
नीचे आप VQ पर एक संक्षिप्त प्रारंभिक जानकारी, व्यावहारिक उदाहरण और बेंचमार्क पाएंगे जो हमने manticore-load - Manticore Search के आधिकारिक लोड-टेस्टिंग टूल के साथ चलाए।
वेक्टर क्वांटाइज़ेशन क्या है
विक्री सामान्यतः 32-बिट फ़्लोट्स के रूप में संग्रहीत होती हैं।
VQ के साथ प्रत्येक घटक को 8 बिट या 1 बिट में संकुचित किया जाता है। इससे इंडेक्स का आकार (और इस प्रकार RAM) 4x - 32x घट जाता है, जबकि SIMD निर्देश दूरी गणनाओं को तेज़ रखते हैं। व्यापार में एक छोटी सी संघटन त्रुटि होती है, जिसे आप ओवरसैम्पलिंग और रिस्कोरिंग के साथ समाप्त कर सकते हैं (देखें नीचे)।
VQ सक्षम करना
Manticore Search में वेक्टर क्वांटाइज़ेशन (VQ) सक्षम करने के लिए, आपको अपनी तालिका निर्माण कथन में quantization
विशेषता जोड़ने की आवश्यकता है। यह विशेषता उस क्वांटाइज़ेशन के स्तर को निर्दिष्ट करती है जिसे आप अपने वेक्टर पर लागू करना चाहते हैं। निम्न उदाहरण दर्शाता है कि VQ सक्षम करने के साथ तालिका कैसे बनाई जाती है:
create table products (
title text,
vec float_vector knn_type='hnsw' knn_dims='512' hnsw_similarity='l2' quantization='1bit'
);
इस उदाहरण में, quantization='1bit'
विशेषता प्रत्येक वектор घटक को 1 बिट में संकुचित करती है, जिससे इंडेक्स का आकार और RAM उपयोग काफी कम हो जाता है। इंडेक्सिंग के दौरान वेक्टर स्वचालित रूप से क्वांटाइज़ किए जाते हैं, जिसमें कोई अतिरिक्त फ़ाइलें, प्रशिक्षण या पृष्ठभूमि कार्य की आवश्यकता नहीं होती है।
कॉन्फ़िगरेशन विकल्प
यहां तालिका बनाते समय उपलब्ध विकल्प दिए गए हैं:
Setting | Purpose |
---|---|
quantization='8bit' | 4× छोटे वेक्टर, लगभग-शून्य पुनः स्मरण हानि |
quantization='1bit' | 32× छोटे वेक्टर, असममित क्वांटाइज़ेशन (नीचे देखें) बेहतर सटीकता के लिए |
quantization='1bitsimple' | 32× छोटे, सबसे तेज़ लेकिन थोड़े कम सटीक |
असमान क्वांटाइज़ेशन व्याख्या:
असमान क्वांटाइज़ेशन का अर्थ है कि क्वेरी वेक्टर और संग्रहीत वेक्टर अलग-अलग क्वांटाइज़ेशन स्तरों का उपयोग करते हैं। विशेष रूप से, क्वेरी वेक्टर को 4 बिट्स में क्वांटाइज़ किया जाता है जबकि HNSW इंडेक्स में संग्रहीत वेक्टर को 1 बिट में क्वांटाइज़ किया जाता है। खोज के दौरान, 4-बिट क्वेरी वेक्टर्स और 1-बिट संग्रहीत वेक्टर्स के बीच दूरी की गणना की जाती है। यह दृष्टिकोण सरल तरीकों की तुलना में अधिक सटीकता प्रदान करता है, हालांकि इसके साथ कुछ प्रदर्शन व्यापार-बंद होते हैं।
क्वेरी विकल्प
आप क्वेरी चलाते समय ओवरसैम्पलिंग और रिस्कोरिंग को भी समायोजित कर सकते हैं:
Setting | Purpose |
---|---|
oversampling=<float> | क्वांटाइज़्ड वेक्टर्स का उपयोग करके k × फैक्टर उम्मीदवारों को लाने के लिए |
rescore=1 | पूर्ण-सटीकता वेक्टर का उपयोग करके दूरियों की पुनः गणना करें और उन्हें पुनः रैंक करें |
ओवरसैम्पलिंग + रिस्कोरिंग का महत्व
क्वांटाइज़ेशन खोज को वектор दूरी की अनुमानित करके गति प्रदान करता है। यहtinyerrors को पेश कर सकता है, विशेष रूप से 1-बिट संकुचन के साथ, जो पुनः स्मरण पर थोड़ा प्रभाव डाल सकता है। इसे ठीक करने के लिए, आप कर सकते हैं:
- क्वांटाइज़्ड इंडेक्स से अधिक उम्मीदवार लाने के लिए ओवरसैम्पलिंग का उपयोग करें
- मूल पूर्ण-सटीकता वेक्टर का उपयोग करते हुए दूरियों को दोबारा जांचने और उन्हें पुनः रैंक करने के लिए रिस्कोर का उपयोग करें
एक साथ मिलकर, ये आपको क्वांटाइज़्ड वेक्टर्स की गति और मेमोरी लाभ के साथ पूर्ण-सटीकता प्रदान करते हैं।
यह एक क्वेरी में कैसे काम करता है:
select *
from products
where knn(vec, 20, (<your 512-dim vector>), {oversampling = 3.0, rescore = 1});
💡 नोट: ओवरसैम्पलिंग और रिस्कोर क्वांटाइज्ड वेक्टर्स के साथ ज्यादातर उपयोगी हैं। बिना क्वांटाइजेशन के, वे संभवतः गुणवत्ता में सुधार नहीं करेंगे, लेकिन चीजों को धीमा कर देंगे।
बेंचमार्क
टेस्ट बेड:
- 16 भौतिक CPU कोर वाला सर्वर (32 आभासी कोर)
- 1 M दस्तावेज़
- 512-आयामी L2 वectors
- बैच-आकार = 10 000
- इंडेक्सिंग के लिए समवर्तीता = 5
- खोज के लिए परिवर्तनशील थ्रेड्स।
1. इंडेक्सिंग गति
वेक्टर क्वांटाइज़ेशन इंडेक्सिंग प्रक्रिया को तेजी से करता है, HNSW ग्राफ निर्माण के दौरान दूरी गणनाओं की कंप्यूटेशनल अधिकता को घटा कर। हमारे बेंचमार्क थ्रूपुट और विलंबता में महत्वपूर्ण सुधार दिखाते हैं।
Metric | Quantized | Full-precision | Improvement |
---|---|---|---|
Docs/s | 3,890 | 1,776 | 2.2× |
Avg latency | 13.5s | 29.6s | 2.2× |
root@perf3 ~ # manticore-load --drop --wait --batch-size=10000 --threads=5 --total=1000000 --init="create table vq1 ( title text, vec float_vector knn_type='hnsw' knn_dims='512' hnsw_similarity='l2' quantization='1bit' )" --load="insert into vq1 values ( <increment>, '<text/1/2>', (<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>) )"
...
Total time: 04:17
Total queries: 100
Threads: 5
Batch size: 10000
Total docs: 1000000
Docs per sec avg: 3890
QPS avg: 5
QPS 1p: 0
QPS 5p: 0
QPS 95p: 7
QPS 99p: 7
Latency avg: 13460.8 ms
Latency 50p: 915.0 ms
Latency 95p: 99500.0 ms
Latency 99p: 99500.0 ms
root@perf3 ~ # manticore-load --drop --wait --batch-size=10000 --threads=5 --total=1000000 --init="create table v ( title text, vec float_vector knn_type='hnsw' knn_dims='512' hnsw_similarity='l2' )" --load="insert into v values ( <increment>, '<text/1/2>', (<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>) )"
...
Total time: 09:22
Total queries: 100
Threads: 5
Batch size: 10000
Total docs: 1000000
Docs per sec avg: 1776
QPS avg: 5
QPS 1p: 0
QPS 5p: 0
QPS 95p: 8
QPS 99p: 8
Latency avg: 29572.0 ms
Latency 50p: 885.0 ms
Latency 95p: 99500.0 ms
Latency 99p: 99500.0 ms
मुख्य निष्कर्ष:
- थ्रूपुट सुधार: क्वांटाइज्ड इंडेक्सिंग प्रति सेकंड 3,890 दस्तावेज़ों को 1,776 पूर्ण-सटीकता की तुलना में प्रक्रिया करती है, जो 2.2× गति में सुधार को दर्शाता है
- विलंबता कमी: औसत इंडेक्सिंग समय 29.6 सेकंड से गिरकर 13.5 सेकंड हो जाता है (2.2× तेजी)
- सतत स्केलिंग: दोनों मैट्रिक्स समान सुधार अनुपात दिखाते हैं, जो विभिन्न कार्यभार विशेषताओं के बीच स्थिर प्रदर्शन लाभ को इंगित करता है
2. RAM फुटप्रिंट
क्वांटाइजेशन का सबसे महत्वपूर्ण लाभों में से एक मेमोरी उपयोग में नाटकीय कमी है। जब बड़े पैमाने पर वेक्टर खोज अनुप्रयोगों से निपटते हैं, RAM खपत एक महत्वपूर्ण बाधा हो सकती है, विशेषकर क्लाउड वातावरण में जहां मेमोरी लागत उपयोग के साथ रेखीय रूप से बढ़ती है।
उपर्युक्त चार्ट 1-बिट क्वांटाइजेशन के माध्यम से प्राप्त उल्लेखनीय मेमोरी दक्षता को दर्शाता है। क्वांटाइज्ड इंडेक्स को केवल 216 MB RAM की आवश्यकता होती है जबकि गैर-क्वांटाइज्ड संस्करण के लिए 2,097 MB आवश्यक है। यह मेमोरी उपयोग में 90% कमी का प्रतिनिधित्व करता है, जिससे समान हार्डवेयर पर बहुत बड़े डेटासेट को संभालना या बुनियादी ढांचे की लागत को महत्वपूर्ण रूप से कम करना संभव होता है।
root@perf3 ~ # ls -lah /var/lib/manticore/v/*.spknn /var/lib/manticore/vq1/*.spknn
-rw------- 1 manticore manticore 11M Jul 11 16:52 /var/lib/manticore/vq1/vq1.0.spknn
-rw------- 1 manticore manticore 6.5M Jul 11 16:51 /var/lib/manticore/vq1/vq1.1.spknn
-rw------- 1 manticore manticore 69M Jul 11 16:55 /var/lib/manticore/vq1/vq1.2.spknn
-rw------- 1 manticore manticore 11M Jul 11 16:52 /var/lib/manticore/vq1/vq1.3.spknn
-rw------- 1 manticore manticore 69M Jul 11 16:59 /var/lib/manticore/vq1/vq1.4.spknn
-rw------- 1 manticore manticore 11M Jul 11 16:56 /var/lib/manticore/vq1/vq1.5.spknn
-rw------- 1 manticore manticore 39M Jul 11 17:01 /var/lib/manticore/vq1/vq1.6.spknn
=11+6.5+69+11+69+11+39=216.5
-rw------- 1 manticore manticore 105M Jul 11 17:15 /var/lib/manticore/v/v.0.spknn
-rw------- 1 manticore manticore 21M Jul 11 17:14 /var/lib/manticore/v/v.1.spknn
-rw------- 1 manticore manticore 671M Jul 11 17:23 /var/lib/manticore/v/v.2.spknn
-rw------- 1 manticore manticore 105M Jul 11 17:15 /var/lib/manticore/v/v.3.spknn
-rw------- 1 manticore manticore 671M Jul 11 17:31 /var/lib/manticore/v/v.4.spknn
-rw------- 1 manticore manticore 105M Jul 11 17:24 /var/lib/manticore/v/v.5.spknn
-rw------- 1 manticore manticore 419M Jul 11 17:36 /var/lib/manticore/v/v.6.spknn