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

GPU_IVF_PQ

يعتمد فهرس GPU_IVF_PQ على مفهوم IVF_PQ من خلال الجمع بين تجميع الملفات المقلوب مع تجميع المنتج الكمي (PQ)، والذي يقسم المتجهات عالية الأبعاد إلى مساحات فرعية أصغر ويحدد كميتها من أجل عمليات بحث فعالة عن التشابه. تم تصميم GPU_IVF_PQ حصريًا لبيئات وحدة معالجة الرسومات، ويستفيد من المعالجة المتوازية لتسريع العمليات الحسابية والتعامل مع البيانات المتجهة واسعة النطاق بفعالية. لمزيد من المعلومات حول المفاهيم التأسيسية، راجع IVF_IVF_PQ.

إنشاء فهرس

لإنشاء فهرس GPU_IVF_PQ على حقل متجه في ميلفوس، استخدم طريقة 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="GPU_IVF_PQ", # 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={
        "m": 4, # Number of sub-vectors to split eahc vector into
    } # Index building params
)

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

  • index_type: نوع الفهرس المراد إنشاؤه. في هذا المثال، اضبط القيمة على GPU_IVF_PQ.

  • metric_type: الطريقة المستخدمة لحساب المسافة بين المتجهات. تتضمن القيم المدعومة COSINE و L2 و IP. لمزيد من التفاصيل، راجع أنواع المقاييس.

  • params: : خيارات التكوين الإضافية لبناء الفهرس.

    • m: عدد المتجهات الفرعية المراد تقسيم المتجه إليها.

    لمعرفة المزيد من معلمات البناء المتوفرة للفهرس GPU_IVF_PQ ، راجع بارامترات بناء الفهرس.

بمجرد تكوين معلمات الفهرس، يمكنك إنشاء الفهرس باستخدام الأسلوب create_index() مباشرةً أو تمرير بارامترات الفهرس في الأسلوب create_collection. لمزيد من التفاصيل، راجع إنشاء مجموعة.

البحث في الفهرس

بمجرد إنشاء الفهرس وإدراج الكيانات، يمكنك إجراء عمليات بحث عن التشابه على الفهرس.

search_params = {
    "params": {
        "nprobe": 10, # Number of clusters to search
    }
}

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: خيارات التكوين الإضافية للبحث على الفهرس.

    • nprobe: عدد المجموعات المطلوب البحث عنها.

    لمعرفة المزيد من معلمات البحث المتوفرة للفهرس GPU_IVF_PQ ، راجع باراميات البحث الخاصة بالفهرس.

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

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

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

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

المعلمة

الوصف

نطاق القيمة

اقتراح الضبط

عامل التجميع

nlist

عدد المجموعات المراد إنشاؤها باستخدام خوارزمية k-means أثناء بناء الفهرس.

النوع: عدد صحيح المدى: [1, 65536]

القيمة الافتراضية: 128

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

PQ

m

عدد المتجهات الفرعية (المستخدمة في التكميم) لتقسيم كل متجه عالي الأبعاد إلى متجهات عالية الأبعاد أثناء عملية التكميم.

النوع: عدد صحيح المدى: [1, 65536]

القيمة الافتراضية: لا يوجد

يمكن لقيمة m الأعلى أن تحسن الدقة، لكنها تزيد أيضًا من التعقيد الحسابي واستخدام الذاكرة. m يجب أن تكون القيمة قاسماً على بُعد المتجه(D) لضمان التحلل الصحيح. القيمة الموصى بها عادةً هي m = D/2.

في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [D/8، D].

nbits

عدد البتات المستخدمة لتمثيل فهرس مركزية كل متجه فرعي في النموذج المضغوط. وهو يحدد مباشرةً حجم كل دفتر شفرات. سيحتوي كل دفتر شفرات على 2 بت من النقطتين المركزيتين. على سبيل المثال، إذا تم تعيين nbits على 8، فسيتم تمثيل كل متجه فرعي بفهرس مركزية مكون من 8 بت. وهذا يسمح بوجود28 (256) مركزاً محتملاً في دفتر الرموز لهذا المتجه الفرعي.

النوع: عدد صحيح المدى: [1, 24]

القيمة الافتراضية: 8

تسمح القيمة الأعلى nbits بوجود دفاتر رموز أكبر، مما قد يؤدي إلى تمثيل أكثر دقة للمتجهات الأصلية. ومع ذلك، فإن ذلك يعني أيضًا استخدام المزيد من البتات لتخزين كل فهرس، مما يؤدي إلى ضغط أقل. في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [1, 16].

cache_dataset_on_device

يقرر ما إذا كان سيتم تخزين مجموعة البيانات الأصلية مؤقتًا في ذاكرة وحدة معالجة الرسومات. القيم الممكنة:

  • "true": تخزين مجموعة البيانات الأصلية مؤقتًا لتحسين الاسترجاع من خلال تحسين نتائج البحث.

  • "false": لا يخزن مجموعة البيانات الأصلية مؤقتًا لحفظ ذاكرة وحدة معالجة الرسومات.

النوع: سلسلة النطاق: ["true" ، "false"]

القيمة الافتراضية: "false"

يعمل تعيينها على "true" على تحسين الاستدعاء من خلال تحسين نتائج البحث ولكنه يستخدم المزيد من ذاكرة وحدة معالجة الرسومات. ضبطه على "false" يحافظ على ذاكرة وحدة معالجة الرسومات.

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

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

المعلمة

الوصف

نطاق القيمة

اقتراح الضبط

عامل التهيئة

nprobe

عدد المجموعات للبحث عن المرشحين.

النوع: عدد صحيح المدى: [1, nlist]

القيمة الافتراضية: 8

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

في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [1, nlist].

جرب Managed Milvus مجاناً

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

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

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