🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI

HomeBlogs1. index_file_size

1. index_file_size

  • Engineering
February 26, 2020
milvus

في أفضل الممارسات لتكوين 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 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 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: يجب إجراء مفاضلة بين الأداء والدقة.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

استمر في القراءة