1. index_file_size
في أفضل الممارسات لتكوين Milvus، تم تقديم بعض أفضل الممارسات لتكوين Milvus 0.6.0. في هذه المقالة، سنقدم أيضًا بعض أفضل الممارسات لتعيين المعلمات الرئيسية في عملاء Milvus للعمليات بما في ذلك إنشاء جدول وإنشاء الفهارس والبحث. يمكن أن تؤثر هذه المعلمات على أداء البحث.
1. index_file_size
عند إنشاء جدول، تُستخدم معلمة index_file_size لتحديد حجم ملف واحد لتخزين البيانات بالميجابايت. الافتراضي هو 1024. عندما يتم استيراد البيانات المتجهة، يقوم ميلفوس بتجميع البيانات بشكل تدريجي في ملفات. عندما يصل حجم الملف إلى حجم_ملف_المفهرس_الحجم، لا يقبل هذا الملف بيانات جديدة ويقوم Milvus بحفظ البيانات الجديدة في ملف آخر. هذه كلها ملفات بيانات خام. عند إنشاء فهرس، يقوم Milvus بإنشاء ملف فهرس لكل ملف بيانات خام. بالنسبة لنوع فهرس IVFLAT، فإن حجم ملف الفهرس يساوي تقريباً حجم ملف البيانات الخام المقابل. بالنسبة لفهرس SQ8، يبلغ حجم ملف الفهرس حوالي 30 بالمائة من ملف البيانات الخام المقابل.
أثناء البحث، يبحث Milvus في كل ملف فهرس واحدًا تلو الآخر. وفقًا لتجربتنا، عندما يتغير حجم_ملف_الفهرس من 1024 إلى 2048، يتحسن أداء البحث بنسبة 30 بالمائة إلى 50 بالمائة. ومع ذلك، إذا كانت القيمة كبيرة جدًا، فقد يفشل تحميل الملفات الكبيرة إلى ذاكرة وحدة معالجة الرسومات (أو حتى ذاكرة وحدة المعالجة المركزية). على سبيل المثال، إذا كانت ذاكرة وحدة معالجة الرسومات 2 غيغابايت وكان حجم_ملف_الفهرس 3 غيغابايت، فلا يمكن تحميل ملف الفهرس إلى ذاكرة وحدة معالجة الرسومات. عادةً، نقوم بتعيين index_file_size على 1024 ميجابايت أو 2048 ميجابايت.
يعرض الجدول التالي اختبارًا باستخدام sift50m للفهرس_ملف_الحجم. نوع الفهرس هو SQ8.
1- sift50m-test-results-milvus.png
يمكننا أن نرى أنه في وضع وحدة المعالجة المركزية ووضع وحدة معالجة الرسومات، عندما يكون حجم_ملف_الفهرس 2048 ميغابايت بدلاً من 1024 ميغابايت، يتحسن أداء البحث بشكل ملحوظ.
2. nlist
و nprobe
تُستخدم المعلمة nlist
لإنشاء الفهرس وتُستخدم المعلمة nprobe
للبحث. يستخدم كل من IVFLAT و SQ8 خوارزميات التجميع لتقسيم عدد كبير من المتجهات إلى مجموعات أو دلاء. nlist
هو عدد الدلاء أثناء التجميع.
عند البحث باستخدام الفهارس، تتمثل الخطوة الأولى في العثور على عدد معين من الدلاء الأقرب إلى المتجه الهدف، والخطوة الثانية هي العثور على أكثر المتجهات k تشابهًا من الدلاء حسب المسافة بين المتجهات. nprobe
هو عدد الدلاء في الخطوة الأولى.
بشكل عام، تؤدي زيادة nlist
إلى زيادة عدد الدلاء وعدد أقل من المتجهات في الدلو أثناء التجميع. ونتيجة لذلك، ينخفض حمل الحساب ويتحسن أداء البحث. ومع ذلك، مع وجود عدد أقل من المتجهات لمقارنة التشابه، قد تضيع النتيجة الصحيحة.
تؤدي زيادة nprobe
إلى مزيد من الدلاء للبحث. نتيجة لذلك، يزداد حمل الحساب ويتدهور أداء البحث، لكن دقة البحث تتحسن. قد يختلف الوضع باختلاف مجموعات البيانات ذات التوزيعات المختلفة. يجب أيضًا مراعاة حجم مجموعة البيانات عند تعيين nlist
و nprobe
. بشكل عام، من المستحسن أن يكون nlist
4 * sqrt(n)
، حيث n هو العدد الإجمالي للمتجهات. بالنسبة إلى nprobe
، يجب عليك إجراء مفاضلة بين الدقة والكفاءة وأفضل طريقة هي تحديد القيمة من خلال التجربة والخطأ.
يوضح الجدول التالي اختبارًا باستخدام sift50m لـ nlist
و nprobe
. نوع الفهرس هو SQ8.
sq8-index-test-sift50m.png
يقارن الجدول أداء البحث ودقته باستخدام قيم مختلفة لـ nlist
/nprobe
. يتم عرض نتائج وحدة معالجة الرسومات فقط لأن اختبارات وحدة المعالجة المركزية ووحدة معالجة الرسومات لها نتائج مماثلة. في هذا الاختبار، مع زيادة قيم nlist
/nprobe
بنفس النسبة المئوية، تزداد دقة البحث أيضًا. عندما يكون nlist
= 4096 و nprobe
128، يكون لدى Milvus أفضل أداء بحث. في الختام، عند تحديد قيم nlist
و nprobe
، يجب إجراء مفاضلة بين الأداء والدقة مع مراعاة مجموعات البيانات والمتطلبات المختلفة.
الملخص
index_file_size
: عندما يكون حجم البيانات أكبر من index_file_size
، كلما كانت قيمة index_file_size
أكبر، كان أداء البحث أفضل.nlist
و nprobe
: يجب إجراء مفاضلة بين الأداء والدقة.
- 2. nlist و nprobe
- الملخص
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word