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

GPU_CAGRA

مؤشر GPU_CAGRA هو مؤشر قائم على الرسوم البيانية ومُحسّن للاستخدام مع وحدات معالجة الرسومات (GPU). قد يكون استخدام وحدات معالجة الرسومات المخصصة للاستدلال لتشغيل إصدار Milvus المخصص لوحدات معالجة الرسومات أكثر فعالية من حيث التكلفة مقارنة باستخدام وحدات معالجة الرسومات المخصصة للتدريب والتي تكون باهظة الثمن.

إنشاء الفهرس

لبناء فهرس " GPU_CAGRA " على حقل متجه في Milvus، استخدم طريقة " 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_CAGRA", # 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={
        "intermediate_graph_degree": 64, # Affects recall and build time by determining the graph’s degree before pruning
        "graph_degree": 32, # Affets search performance and recall by setting the graph’s degree after pruning
        "build_algo": "IVF_PQ", # Selects the graph generation algorithm before pruning
        "cache_dataset_on_device": "true", # Decides whether to cache the original dataset in GPU memory
        "adapt_for_cpu": "false", # Decides whether to use GPU for index-building and CPU for search
    } # Index building params
)

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

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

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

  • params: خيارات تكوين إضافية لإنشاء الفهرس. لمعرفة المزيد عن معلمات الإنشاء المتاحة لفهرس GPU_CAGRA ، راجع معلمات إنشاء الفهرس.

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

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

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

search_params = {
    "params": {
        "itopk_size": 16, # Determines the size of intermediate results kept during the search
        "search_width": 8, # Specifies the number of entry points into the CAGRA graph during the 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
)

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

تمكين البحث باستخدام وحدة المعالجة المركزية (CPU) عند التحميلCompatible with Milvus 2.6.4+

لتمكين البحث باستخدام وحدة المعالجة المركزية (CPU) ديناميكيًا عند التحميل، قم بتحرير التكوين التالي في milvus.yaml:

# milvus.yaml
knowhere:
  GPU_CAGRA:
    load: 
      adapt_for_cpu: true

السلوك

  • عندما يتم تعيين load.adapt_for_cpu على true ، يقوم Milvus بتحويل فهرس GPU_CAGRA إلى تنسيق قابل للتنفيذ على وحدة المعالجة المركزية (CPU) (شبيه بـ HNSW) أثناء التحميل.

  • يتم تنفيذ عمليات البحث اللاحقة على وحدة المعالجة المركزية (CPU)، حتى لو كان الفهرس قد تم إنشاؤه في الأصل لوحدة معالجة الرسومات (GPU).

  • إذا تم حذفه أو تم تعيينه على "false"، يبقى الفهرس على وحدة معالجة الرسومات (GPU) ويتم تشغيل عمليات البحث على وحدة معالجة الرسومات (GPU).

استخدم التكييف مع وحدة المعالجة المركزية (CPU) في وقت التحميل في البيئات المختلطة أو الحساسة من حيث التكلفة، حيث يتم حجز موارد وحدة معالجة الرسومات (GPU) لإنشاء الفهرس، لكن عمليات البحث تُجرى على وحدة المعالجة المركزية (CPU).

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

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

معلمات إنشاء الفهرس

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

المعلمة

الوصف

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

intermediate_graph_degree

يؤثر على معدل الاسترجاع ووقت الإنشاء من خلال تحديد درجة الرسم البياني قبل عملية التقليم. القيم الموصى بها هي 32 أو 64.

128

graph_degree

يؤثر على أداء البحث ومعدل الاسترجاع من خلال تعيين درجة الرسم البياني بعد عملية التقليم. ويؤدي الفرق الكبير بين هاتين الدرجتين إلى زيادة وقت الإنشاء. ويجب أن تكون قيمته أصغر من قيمة intermediate_graph_degree.

64

build_algo

يحدد خوارزمية إنشاء الرسم البياني قبل عملية التقليم. القيم الممكنة:

  • IVF_PQ: يوفر جودة أعلى ولكن وقت بناء أبطأ.

  • NN_DESCENT: يوفر إنشاءً أسرع مع احتمال انخفاض معدل الاسترجاع.

IVF_PQ

cache_dataset_on_device

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

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

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

"false"

adapt_for_cpu

يحدد ما إذا كان سيتم استخدام وحدة معالجة الرسومات (GPU) لإنشاء الفهرس ووحدة المعالجة المركزية (CPU) للبحث.

يتطلب تعيين هذه المعلمة إلى " "true" " وجود المعلمة " ef " في طلبات البحث.

"false"

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

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

المعلمة

الوصف

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

itopk_size

يحدد حجم النتائج الوسيطة التي يتم الاحتفاظ بها أثناء البحث. قد تؤدي القيمة الأكبر إلى تحسين معدل الاسترجاع على حساب أداء البحث. يجب أن تكون القيمة مساوية على الأقل للقيمة النهائية لـ top-k (الحد)، وعادةً ما تكون من قوى العدد 2 (على سبيل المثال، 16، 32، 64، 128).

فارغ

search_width

يحدد عدد نقاط الدخول إلى مخطط CAGRA أثناء البحث. يمكن أن تؤدي زيادة هذه القيمة إلى تحسين معدل الاسترجاع، ولكنها قد تؤثر على أداء البحث (على سبيل المثال: 1، 2، 4، 8، 16، 32).

فارغ

num_random_samplings

يتحكم في مقدار العينات العشوائية التي يقوم بها CAGRA عند اختيار نقاط الدخول الأولية للبحث في الرسم البياني. تمنح القيمة الأكبر CAGRA فرصًا أكثر للبدء من نقاط أفضل، مما يحسن الاسترجاع على حساب زيادة زمن استجابة البحث. يجب أن تكون القيمة على الأقل 1. متاح في Milvus 2.6.20+.

1

min_iterations / max_iterations

يتحكم في عملية تكرار البحث. بشكل افتراضي، يتم تعيينها على 0 ، ويحدد CAGRA تلقائيًا عدد التكرارات بناءً على itopk_size و search_width. يمكن أن يساعد تعديل هذه القيم يدويًّا في تحقيق التوازن بين الأداء والدقة.

0

team_size

يحدد عدد خيوط CUDA المستخدمة لحساب المسافة المترية على وحدة معالجة الرسومات (GPU). القيم الشائعة هي قوى العدد 2 حتى 32 (على سبيل المثال: 2، 4، 8، 16، 32). وله تأثير طفيف على أداء البحث. القيمة الافتراضية هي 0 ، حيث يختار Milvus تلقائيًا team_size بناءً على بُعد المتجه.

0

ef

يحدد التوازن بين وقت الاستعلام ودقته. تؤدي القيمة الأعلى لـ ef إلى بحث أكثر دقة ولكنه أبطأ.

هذه المعلمة إلزامية إذا قمت بتعيين adapt_for_cpu إلى true عند إنشاء الفهرس.

[top_k, int_max]

ترجمة بواسطةDeepL

جرب Managed Milvus مجاناً

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

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

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