• نبذة عن ميلفوس
  • ابدأ الآن
  • المفاهيم
  • دليل المستخدم
  • استيراد البيانات
  • أدوات الذكاء الاصطناعي
  • دليل الإدارة
  • الأدوات
  • عمليات الدمج
  • البرامج التعليمية
  • الأسئلة الشائعة
  • API Reference

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 لها، مما يعزز دقة عملية التكميم.

الأساس النظري: معادلة تقريب المسافة الأساسية هي

orqr2orco2+qrco22C(or,co)o~,qrco+C1(or,co)\lVert \mathbf{o_r} - \mathbf{q_r} \rVert^2 \approx \lVert \mathbf{o_r} - \mathbf{c_o} \rVert^2 + \lVert \mathbf{q_r} - \mathbf{c_o} \rVert^2 - 2 \cdot C(\mathbf{o_r}, \mathbf{c_o}) \cdot \langle \tilde{\mathbf{o}}, \mathbf{q_r} - \mathbf{c_o} \rangle + C_1(\mathbf{o_r}, \mathbf{c_o})

حيث

  • أو\mathbf{o_r} o هو متجه بيانات من مجموعة البيانات
  • qr\mathbf{q_r} q هو متجه استعلام
  • co\mathbf{c_o} ج هو أقرب متجه مركزي لـ أو\mathbf{o_r} o
  • C( or,co)C(\mathbf{o_r}, \mathbf{c_o}) C , ) و C1(or,co)C_1(\mat , ) هي ثوابت محسوبة مسبقًا
  • o ~\tilde{\mathbf{o}}
  • ⟨o~،qr-co⟩\tilde{\mathbf{o}، \mathbf{q_r} - \mathbf{c_o} \r متشا يمثل عملية الضرب النقطي

الكفاءة الحسابية: إن الطبيعة الثنائية لـ o~\tilde{\mathbf{o}} AVX-512 VPOPCNTDQ المخصصة على معالجات Intel Ice Lake+ أو معالجات AMD Zen 4+.

التحسينات الخوارزمية: يتكامل RaBitQ بفعالية مع التقنيات الراسخة مثل نهجFastScan والتناوب العشوائي لتحسين الأداء.

IVF + RaBitQ

يجمع فهرس IVF_RABITQ بين التجميع الفعال لـ IVF والتجميع الفعال لـ RaBitQ مع التكميم الثنائي المتقدم لـ RaBitQ:

  1. التصفية الخشنة: يقسم IVF مساحة المتجه إلى مجموعات، مما يقلل بشكل كبير من نطاق البحث من خلال التركيز على مناطق المجموعات الأكثر صلة.

  2. التكميم الثنائي: داخل كل مجموعة، يقوم RaBitQ بضغط المتجهات إلى تمثيلات ثنائية مع الحفاظ على علاقات المسافة الأساسية من خلال الضمانات النظرية.

  3. التنقيح الاختياري: عند التمكين، يخزّن الفهرس بيانات منقّحة إضافية باستخدام تنسيقات عالية الدقة (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
)

في هذا التكوين

يعتمد فهرس IVF_RABITQ بشكل كبير على تعليمات الأجهزة popcount لتحقيق الأداء الأمثل. توفر معماريات وحدات المعالجة المركزية الحديثة مثل Intel IceLake+ أو AMD Zen 4+ مع مجموعات التعليمات AVX512VPOPCNTDQ تحسينات كبيرة في الأداء لعمليات RaBitQ.

بارامترات الفهرس

يقدم هذا القسم نظرة عامة على المعلمات المستخدمة لبناء الفهرس وإجراء عمليات البحث على الفهرس.

معلمات بناء الفهرس

يسرد الجدول التالي المعلمات التي يمكن تكوينها في params عند إنشاء فهرس.

المعلمة

الوصف

نطاق القيمة

اقتراح الضبط

عامل التجميع

nlist

عدد المجموعات المراد إنشاؤها باستخدام خوارزمية k-means أثناء بناء الفهرس. تخزن كل مجموعة، ممثلة بنقطة مركزية، قائمة من المتجهات. تؤدي زيادة هذه المعلمة إلى تقليل عدد المتجهات في كل مجموعة، مما يؤدي إلى إنشاء أقسام أصغر وأكثر تركيزًا.

النوع: عدد صحيح
المدى: [1, 65536]
القيمة الافتراضية: 128

تعمل القيم الأكبر nlist على تحسين الاستدعاء من خلال إنشاء مجموعات أكثر دقة ولكنها تزيد من وقت بناء الفهرس. قم بالتحسين بناءً على حجم مجموعة البيانات والموارد المتاحة. في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [32, 4096].

RaBitQ

refine

تمكين عملية التنقيح وتخزين البيانات المكررة.

النوع: منطقية
النطاق: [true ، false]
القيمة الافتراضية: false

تعيين إلى true إذا كانت هناك حاجة إلى معدل استدعاء 0.9+. يؤدي تمكين التنقيح إلى تحسين الدقة ولكنه يزيد من متطلبات التخزين ووقت بناء الفهرس.

refine_type

يحدد تمثيل البيانات المستخدم للتنقية عند تمكين refine.

النوع: سلسلة
النطاق: [SQ6, SQ8, , FP16, BF16, FP32]
القيمة الافتراضية: لا يوجد

يتم تقديم القيم المدرجة بالترتيب حسب زيادة معدل الاستدعاء وتقليل QPS وزيادة حجم التخزين. SQ8 كنقطة بداية، مما يوفر توازنًا جيدًا بين الدقة واستخدام الموارد.

بارامترات البحث الخاصة بالفهرس

يسرد الجدول التالي المعلمات التي يمكن تكوينها في search_params.params عند البحث في الفهرس.

المعلمة

الوصف

نطاق القيمة

اقتراح الضبط

عامل التهيئة

nprobe

عدد المجموعات للبحث عن المرشحين. تسمح القيم الأعلى بالبحث عن مجموعات أكثر، مما يحسّن التذكر من خلال توسيع نطاق البحث ولكن على حساب زيادة زمن انتقال الاستعلام.

النوع: عدد صحيح
المدى: [1, nlist]
القيمة الافتراضية: 8

تؤدي زيادة هذه القيمة إلى تحسين الاستدعاء ولكنها قد تبطئ البحث. اضبط nprobe بشكل متناسب مع nlist لتحقيق التوازن بين السرعة والدقة. في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [1, nlist].

RaBitQ

rbq_query_bits

يضبط ما إذا كان يتم تطبيق التكميم القياسي الإضافي لمتجه الاستعلام. إذا تم الضبط على 0 ، يتم استخدام الاستعلام بدون تكميم. إذا تم التعيين إلى قيمة ضمن [1، 8]، تتم معالجة الاستعلام مسبقًا باستخدام التكميم الكمي القياسي n بت.

النوع: عدد صحيح
النطاق: [0, 8]
القيمة الافتراضية: 0

توفر القيمة الافتراضية 0 أقصى معدل استدعاء ولكن أبطأ أداء. نوصي باختبار القيم 0 و 8 و 6 ، لأنها توفر معدلات استدعاء متشابهة مع كون 6 الأسرع. استخدم قيمًا أصغر لمتطلبات الاستدعاء الأعلى.

refine_k

تستخدم عملية التكرير قياسًا كميًا عالي الجودة لاختيار العدد المطلوب من أقرب الجيران من مجموعة أكبر refine_k من المرشحين المختارين باستخدام IVF_RABITQ.

النوع: عائم
المدى: [1, float_max)
القيمة الافتراضية: 1

تقلل قيم refine_k الأعلى من QPS ولكنها تزيد من معدل الاستدعاء. ابدأ ب 1 واختبر القيم 2 و 3 و 4 و 5 للعثور على المفاضلة المثلى بين QPS والاستدعاء لمجموعة بياناتك.

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟