فهرس وحدة معالجة الرسومات
يدعم Milvus أنواع فهرس GPU المختلفة لتسريع أداء البحث وكفاءته، خاصةً في سيناريوهات الإنتاجية العالية والاستدعاء العالي. يقدم هذا الموضوع نظرة عامة على أنواع فهارس GPU التي تدعمها Milvus، وحالات الاستخدام المناسبة لها، وخصائص الأداء. للحصول على معلومات حول إنشاء الفهارس باستخدام وحدة معالجة الرسومات، راجع الفهرسة باستخدام وحدة معالجة الرسومات.
من المهم ملاحظة أن استخدام فهرس GPU قد لا يقلل بالضرورة من زمن الاستجابة مقارنة باستخدام فهرس وحدة المعالجة المركزية. إذا كنت ترغب في زيادة الإنتاجية إلى أقصى حد، فستحتاج إلى ضغط طلب مرتفع للغاية أو عدد كبير من ناقلات الاستعلام.
الأداء
يساهم فريق Nvidia RAPIDS في دعم وحدة معالجة الرسومات في ميلفوس. فيما يلي أنواع فهرس GPU المدعومة حاليًا من قبل Milvus.
GPU_CAGRA
GPU_CAGRA هو فهرس قائم على الرسم البياني مُحسَّن لوحدات معالجة الرسوم البيانية، ويمكن أن يكون استخدام وحدات معالجة الرسومات الاستدلالية لتشغيل إصدار Milvus GPU أكثر فعالية من حيث التكلفة مقارنةً باستخدام وحدات معالجة الرسومات باهظة الثمن من فئة التدريب.
معلمات بناء الفهرس
المعلمة الوصف القيمة الافتراضية intermediate_graph_degree
تؤثر على الاستدعاء ووقت الإنشاء من خلال تحديد درجة الرسم البياني قبل التقليم. القيم الموصى بها هي 32
أو64
.128
graph_degree
تؤثر على أداء البحث والاستدعاء من خلال تحديد درجة الرسم البياني بعد التقليم. ينتج عن الفرق الأكبر بين هاتين الدرجتين وقت بناء أطول. يجب أن تكون قيمته أصغر من قيمة intermediate_graph_degree. 64
build_algo
يحدد خوارزمية إنشاء الرسم البياني قبل التقليم. القيم الممكنة: IVF_PQ
: توفر جودة أعلى ولكن وقت بناء أبطأ.NN_DESCENT
: يوفر إنشاء أسرع مع احتمال استرجاع أقل.IVF_PQ
cache_dataset_on_device
يقرر ما إذا كان سيتم تخزين مجموعة البيانات الأصلية مؤقتًا في ذاكرة وحدة معالجة الرسومات. القيم الممكنة: “true”
: تخزين مجموعة البيانات الأصلية مؤقتًا لتحسين الاستدعاء من خلال تحسين نتائج البحث.“false”
: عدم تخزين مجموعة البيانات الأصلية مؤقتًا لحفظ ذاكرة وحدة معالجة الرسومات.“false”
adapt_for_cpu
يقرر ما إذا كان سيتم استخدام وحدة معالجة الرسومات لإنشاء الفهرس ووحدة المعالجة المركزية للبحث.
يتطلب ضبط هذه المعلمة علىtrue
وجود المعلمةef
في طلبات البحث.“false”
معلمات البحث
المعلمة الوصف القيمة الافتراضية itopk_size
تحدد حجم النتائج الوسيطة التي يتم الاحتفاظ بها أثناء البحث. قد تؤدي القيمة الأكبر إلى تحسين الاستدعاء على حساب أداء البحث. يجب أن تكون مساوية على الأقل للقيمة النهائية لأعلى k (الحد الأعلى) وعادةً ما تكون قوة 2 (على سبيل المثال، 16، 32، 64، 128). فارغة search_width
يحدد عدد نقاط الدخول إلى الرسم البياني CAGRA أثناء البحث. يمكن أن تؤدي زيادة هذه القيمة إلى تحسين الاستدعاء ولكنها قد تؤثر على أداء البحث (على سبيل المثال 1، 2، 4، 8، 16، 32). فارغة min_iterations
/max_iterations
يتحكم في عملية تكرار البحث. بشكل افتراضي، يتم ضبطها على 0
، وتحدد CAGRA تلقائيًا عدد التكرارات بناءً علىitopk_size
وsearch_width
. يمكن أن يساعد ضبط هذه القيم يدويًا في تحقيق التوازن بين الأداء والدقة.0
team_size
يحدد عدد خيوط CUDA المستخدمة لحساب المسافة المترية على وحدة معالجة الرسومات. القيم الشائعة هي قوة 2 حتى 32 (على سبيل المثال 2، 4، 8، 16، 32). لها تأثير طفيف على أداء البحث. القيمة الافتراضية هي 0
، حيث يقوم Milvus تلقائيًا بتحديدteam_size
بناءً على بُعد المتجه.0
ef
يحدد مفاضلة وقت/دقة الاستعلام. تؤدي القيمة الأعلى ef
إلى بحث أكثر دقة ولكن أبطأ.
هذه المعلمة إلزامية إذا قمت بتعيينadapt_for_cpu
علىtrue
عند إنشاء الفهرس.[top_k, int_max]
حدود البحث
المعلمة النطاق limit
(أعلى-ك)<= 1024 limit
(أعلى-ك)<=ماكس(( itopk_size
+ 31)// 32،search_width
) * 32
GPU_IVF_FLAT
على غرار IVF_FLAT، يقسم GPU_IVF_FLAT أيضًا بيانات المتجه إلى nlist
وحدة عنقودية، ثم يقارن المسافات بين متجه الإدخال الهدف ومركز كل مجموعة. اعتمادًا على عدد المجموعات التي تم تعيين النظام للاستعلام عنها (nprobe
)، يتم إرجاع نتائج بحث التشابه بناءً على المقارنات بين المدخلات المستهدفة والمتجهات في المجموعة (المجموعات) الأكثر تشابهًا فقط - مما يقلل وقت الاستعلام بشكل كبير.
من خلال ضبط nprobe
، يمكن إيجاد توازن مثالي بين الدقة والسرعة لسيناريو معين. توضح نتائج اختبار أداء IVF_FLAT أن وقت الاستعلام يزداد بشكل حاد مع زيادة عدد متجهات الإدخال المستهدفة (nq
)، وعدد المجموعات المطلوب البحث عنها (nprobe
).
يعد GPU_IVF_FLAT هو فهرس IVF الأساسي، وتكون البيانات المشفرة المخزنة في كل وحدة متسقة مع البيانات الأصلية.
عند إجراء عمليات البحث، لاحظ أنه يمكنك تعيين أعلى K حتى 256 لأي بحث مقابل مجموعة مفهرسة GPU_IVF_FLAT.
معلمات بناء الفهرس
المعلمة الوصف النطاق القيمة الافتراضية nlist
عدد وحدات المجموعة [1, 65536] 128
cache_dataset_on_device
يقرر ما إذا كان سيتم تخزين مجموعة البيانات الأصلية مؤقتًا في ذاكرة وحدة معالجة الرسومات. القيم الممكنة: “true”
: تخزين مجموعة البيانات الأصلية مؤقتًا لتحسين الاستدعاء من خلال تحسين نتائج البحث.“false”
: عدم تخزين مجموعة البيانات الأصلية مؤقتًا لحفظ ذاكرة وحدة معالجة الرسومات."true"
"flase"
"false"
معلمات البحث
بحث شائع
المعلمة الوصف النطاق القيمة الافتراضية nprobe
عدد الوحدات المطلوب الاستعلام عنها [1، ن ليست] 8
حدود البحث
المعلمة النطاق limit
(أعلى-ك)<= 2048
GPU_IVF_PQ
PQ
(التكميم الكمي للمنتج) تحلل بشكل موحد الفضاء المتجه الأصلي عالي الأبعاد إلى نواتج ديكارتية من m
مساحات متجهة منخفضة الأبعاد، ثم تقوم بتكميم المساحات المتجهة منخفضة الأبعاد المتحللة. وبدلاً من حساب المسافات بين المتجه الهدف ومركز جميع الوحدات، يتيح التكميم الكمي للمنتج حساب المسافات بين المتجه الهدف ومركز التجميع لكل فضاء منخفض الأبعاد ويقلل بشكل كبير من تعقيد الوقت وتعقيد المساحة للخوارزمية.
يقوم IVF_PQ بإجراء تجميع فهرس IVF قبل تكميم حاصل ضرب المتجهات. ملف الفهرس الخاص به أصغر من IVF_SQ8، لكنه يتسبب أيضًا في فقدان الدقة أثناء البحث عن المتجهات.
تختلف معلمات بناء الفهرس ومعلمات البحث باختلاف توزيع Milvus. حدد توزيع ميلفوس الخاص بك أولاً.
عند إجراء عمليات البحث، لاحظ أنه يمكنك تعيين أعلى K حتى 8192 لأي بحث مقابل مجموعة مفهرسة GPU_IVF_FLAT.
معلمات بناء الفهرس
المعلمة الوصف النطاق القيمة الافتراضية nlist
عدد وحدات المجموعة [1, 65536] 128
m
عدد عوامل تكميم المنتج, dim mod m or = 0
0
nbits
[اختياري] عدد البتات التي يتم تخزين كل متجه منخفض الأبعاد فيها. [1, 16] 8
cache_dataset_on_device
يقرر ما إذا كان سيتم تخزين مجموعة البيانات الأصلية مؤقتًا في ذاكرة وحدة معالجة الرسومات. القيم الممكنة: “true”
: تخزين مجموعة البيانات الأصلية مؤقتًا لتحسين الاستدعاء من خلال تحسين نتائج البحث.“false”
: عدم تخزين مجموعة البيانات الأصلية مؤقتًا لحفظ ذاكرة وحدة معالجة الرسومات."true"
"false"
"false"
معلمات البحث
بحث شائع
المعلمة الوصف النطاق القيمة الافتراضية nprobe
عدد الوحدات المطلوب الاستعلام عنها [1، ن ليست] 8
حدود البحث
المعلمة النطاق limit
(أعلى-ك)<= 1024
gpu_brute_FORCE
تم تصميم GPU_BRUTE_FORCE للحالات التي يكون فيها الاستدعاء العالي للغاية أمرًا بالغ الأهمية، مما يضمن استدعاء 1 من خلال مقارنة كل استعلام مع جميع المتجهات في مجموعة البيانات. يتطلب فقط نوع المقياس (metric_type
) و top-k (limit
) كمعلمات بناء الفهرس والبحث.
بالنسبة إلى GPU_BRUTE_FORCE، لا يلزم إضافة معلمات بناء الفهرس أو معلمات البحث.
الخلاصة
في الوقت الحالي، يقوم Milvus بتحميل جميع الفهارس في ذاكرة وحدة معالجة الرسومات لعمليات بحث فعالة. يعتمد مقدار البيانات التي يمكن تحميلها على حجم ذاكرة وحدة معالجة الرسومات:
- GPU_CAGRA: يبلغ استخدام الذاكرة حوالي 1.8 ضعف استخدام البيانات المتجهة الأصلية.
- GPU_IVF_FLAT و GPU_BRUTE_FORCE: يتطلب ذاكرة مساوية لحجم البيانات الأصلية.
- GPU_IVF_PQ: يستخدم بصمة ذاكرة أصغر، والتي تعتمد على إعدادات معلمة الضغط.