IVF_RABITQCompatible with Milvus 2.6.x
إن فهرس IVF_RABITQ هو خوارزمية فهرسة ثنائية قائمة على التكميم الكمي تقوم بتحويل متجهات FP32 إلى تمثيلات ثنائية. يوفر هذا الفهرس كفاءة تخزين استثنائية مع نسبة ضغط من 1 إلى 32 مع الحفاظ على معدلات استرجاع جيدة نسبيًا. وهو يدعم التنقيح الاختياري لتحقيق استرجاع أعلى بتكلفة تخزين إضافي، مما يجعله بديلاً متعدد الاستخدامات ل IVF_SQ8 و IVF_FLAT في السيناريوهات ذات الذاكرة المحدودة.
نظرة عامة
يرمز IVF_RABITQ إلى الملف المقلوب مع تكميم RaBitQ، ويجمع بين تقنيتين قويتين للبحث والتخزين الفعال للمتجهات.
IVF
ينظّمالملف المقلوب (IVF) مساحة المتجه إلى مناطق يمكن التحكم فيها باستخدام تجميع k-means. يتم تمثيل كل مجموعة بنقطة مركزية تعمل كنقطة مرجعية للمتجهات داخل تلك المجموعة. يقلل نهج التجميع هذا من مساحة البحث من خلال السماح للخوارزمية بالتركيز فقط على المجموعات الأكثر صلة أثناء معالجة الاستعلام.
لمعرفة المزيد حول التفاصيل التقنية ل IVF، راجع IVF_FLAT.
RaBitQ
RaBitQ هي طريقة تكميم ثنائية متطورة مع ضمانات نظرية، تم تقديمها في الورقة البحثية "RaBitQ: تحديد كمية المتجهات عالية الأبعاد مع حد خطأ نظري للبحث التقريبي لأقرب جار" من قبل جيانيانغ غاو وتشنغ لونغ.
يقدم RaBitQ العديد من المفاهيم المبتكرة:
ترميز المعلومات الزاوي: على عكس التشفير المكاني التقليدي، يقوم RaBitQ بتشفير المعلومات الزاويّة من خلال تطبيع المتجه. في IVF_RABITQ، يتم تطبيع متجهات البيانات مقابل أقرب مركزية IVF لها، مما يعزز دقة عملية التكميم.
الأساس النظري: معادلة تقريب المسافة الأساسية هي
حيث
- o هو متجه بيانات من مجموعة البيانات
- q هو متجه استعلام
- ج هو أقرب متجه مركزي لـ o
- C , ) و , ) هي ثوابت محسوبة مسبقًا
- متشا يمثل عملية الضرب النقطي
الكفاءة الحسابية: إن الطبيعة الثنائية لـ AVX-512 VPOPCNTDQ المخصصة على معالجات Intel Ice Lake+ أو معالجات AMD Zen 4+.
التحسينات الخوارزمية: يتكامل RaBitQ بفعالية مع التقنيات الراسخة مثل نهجFastScan والتناوب العشوائي لتحسين الأداء.
IVF + RaBitQ
يجمع فهرس IVF_RABITQ بين التجميع الفعال لـ IVF والتجميع الفعال لـ RaBitQ مع التكميم الثنائي المتقدم لـ RaBitQ:
التصفية الخشنة: يقسم IVF مساحة المتجه إلى مجموعات، مما يقلل بشكل كبير من نطاق البحث من خلال التركيز على مناطق المجموعات الأكثر صلة.
التكميم الثنائي: داخل كل مجموعة، يقوم RaBitQ بضغط المتجهات إلى تمثيلات ثنائية مع الحفاظ على علاقات المسافة الأساسية من خلال الضمانات النظرية.
التنقيح الاختياري: عند التمكين، يخزّن الفهرس بيانات منقّحة إضافية باستخدام تنسيقات عالية الدقة (SQ6 أو SQ8 أو FP16 أو BF16 أو FP32) لتحسين معدلات الاسترجاع على حساب زيادة التخزين.
يقوم Milvus بتنفيذ IVF_RABITQ باستخدام سلاسل مصنع FAISS التالية:
- مع التنقيح:
"RR({dim}),IVF{nlist},RaBitQ,Refine({refine_index})" - بدون تنقيح:
"RR({dim}),IVF{nlist},RaBitQ"
بناء الفهرس
لبناء فهرس IVF_RABITQ على حقل متجه في ميلفوس، استخدم طريقة add_index() ، مع تحديد index_type و metric_type ومعلمات إضافية للفهرس.
from pymilvus import MilvusClient
# Prepare index building params
index_params = MilvusClient.prepare_index_params()
index_params.add_index(
field_name="your_vector_field_name", # Name of the vector field to be indexed
index_type="IVF_RABITQ", # Type of the index to create
index_name="vector_index", # Name of the index to create
metric_type="L2", # Metric type used to measure similarity
params={
"nlist": 1024, # Number of clusters for the index
"refine": True, # Enable refinement for higher recall
"refine_type": "SQ8" # Refinement data format
} # Index building params
)
في هذا التكوين
index_type: نوع الفهرس المراد إنشاؤه. في هذا المثال، اضبط القيمة علىIVF_RABITQ.metric_type: الطريقة المستخدمة لحساب المسافة بين المتجهات. تتضمن القيم المدعومةCOSINEوL2وIP. لمزيد من التفاصيل، راجع أنواع المقاييس.params: خيارات التكوين الإضافية لبناء الفهرس. لمزيد من التفاصيل، راجع بارامترات بناء الفهرس.
بمجرد تكوين معلمات الفهرس، يمكنك إنشاء الفهرس باستخدام الأسلوب create_index() مباشرةً أو تمرير بارامترات الفهرس في الأسلوب create_collection. لمزيد من التفاصيل، راجع إنشاء مجموعة.
البحث في الفهرس
بمجرد إنشاء الفهرس وإدراج الكيانات، يمكنك إجراء عمليات بحث عن التشابه على الفهرس.
search_params = {
"params": {
"nprobe": 128, # Number of clusters to search
"rbq_query_bits": 0, # Query vector quantization bits
"refine_k": 1 # Refinement magnification factor
}
}
res = MilvusClient.search(
collection_name="your_collection_name", # Collection name
anns_field="vector_field", # Vector field name
data=[[0.1, 0.2, 0.3, 0.4, 0.5]], # Query vector
limit=3, # TopK results to return
search_params=search_params
)
في هذا التكوين
params: خيارات تكوين إضافية للبحث على الفهرس. لمزيد من التفاصيل، راجع بارامترات البحث الخاصة بالفهرس.
يعتمد فهرس IVF_RABITQ بشكل كبير على تعليمات الأجهزة popcount لتحقيق الأداء الأمثل. توفر معماريات وحدات المعالجة المركزية الحديثة مثل Intel IceLake+ أو AMD Zen 4+ مع مجموعات التعليمات AVX512VPOPCNTDQ تحسينات كبيرة في الأداء لعمليات RaBitQ.
بارامترات الفهرس
يقدم هذا القسم نظرة عامة على المعلمات المستخدمة لبناء الفهرس وإجراء عمليات البحث على الفهرس.
معلمات بناء الفهرس
يسرد الجدول التالي المعلمات التي يمكن تكوينها في params عند إنشاء فهرس.
المعلمة |
الوصف |
نطاق القيمة |
اقتراح الضبط |
|
|---|---|---|---|---|
عامل التجميع |
|
عدد المجموعات المراد إنشاؤها باستخدام خوارزمية k-means أثناء بناء الفهرس. تخزن كل مجموعة، ممثلة بنقطة مركزية، قائمة من المتجهات. تؤدي زيادة هذه المعلمة إلى تقليل عدد المتجهات في كل مجموعة، مما يؤدي إلى إنشاء أقسام أصغر وأكثر تركيزًا. |
النوع: عدد صحيح |
تعمل القيم الأكبر |
RaBitQ |
|
تمكين عملية التنقيح وتخزين البيانات المكررة. |
النوع: منطقية |
تعيين إلى |
|
يحدد تمثيل البيانات المستخدم للتنقية عند تمكين |
النوع: سلسلة |
يتم تقديم القيم المدرجة بالترتيب حسب زيادة معدل الاستدعاء وتقليل QPS وزيادة حجم التخزين. |
بارامترات البحث الخاصة بالفهرس
يسرد الجدول التالي المعلمات التي يمكن تكوينها في search_params.params عند البحث في الفهرس.
المعلمة |
الوصف |
نطاق القيمة |
اقتراح الضبط |
|
|---|---|---|---|---|
عامل التهيئة |
|
عدد المجموعات للبحث عن المرشحين. تسمح القيم الأعلى بالبحث عن مجموعات أكثر، مما يحسّن التذكر من خلال توسيع نطاق البحث ولكن على حساب زيادة زمن انتقال الاستعلام. |
النوع: عدد صحيح |
تؤدي زيادة هذه القيمة إلى تحسين الاستدعاء ولكنها قد تبطئ البحث. اضبط |
RaBitQ |
|
يضبط ما إذا كان يتم تطبيق التكميم القياسي الإضافي لمتجه الاستعلام. إذا تم الضبط على |
النوع: عدد صحيح |
توفر القيمة الافتراضية |
|
تستخدم عملية التكرير قياسًا كميًا عالي الجودة لاختيار العدد المطلوب من أقرب الجيران من مجموعة أكبر |
النوع: عائم |
تقلل قيم |