الفهرسة على القرص
تقدم هذه المقالة خوارزمية فهرسة على القرص باسم DiskANN. استنادًا إلى الرسوم البيانية Vamana، تعمل DiskANN على تشغيل عمليات بحث فعالة ضمن مجموعات البيانات الكبيرة.
لتحسين أداء الاستعلام، يمكنك تحديد نوع فهرس لكل حقل متجه.
المتطلبات الأساسية
لاستخدام DiskANN، لاحظ أن
- يتم تعطيل DiskANN افتراضيًا. إذا كنت تفضل الفهرس داخل الذاكرة على الفهرس على القرص، يُنصح بتعطيل هذه الميزة للحصول على أداء أفضل.
- لتعطيلها، يمكنك تغيير
queryNode.enableDisk
إلىfalse
في ملف تكوين ميلفوس الخاص بك. - لتمكينها مرة أخرى، يمكنك تعيين
queryNode.enableDisk
إلىtrue
.
- لتعطيلها، يمكنك تغيير
- يعمل مثيل Milvus على Ubuntu 18.04.6 أو إصدار أحدث.
- يجب تثبيت مسار بيانات Milvus على محرك أقراص NVMe SSD للحصول على أداء كامل:
- بالنسبة لمثيل Milvus Standalone، يجب أن يكون مسار البيانات هو /var/lib/milvus/data في الحاوية التي يعمل فيها المثيل.
- بالنسبة إلى مثيل Milvus Cluster، يجب أن يكون مسار البيانات /var/lib/milvus/data في الحاويات التي يتم فيها تشغيل QueryNodes و IndexNodes.
الحدود
لاستخدام DiskANN، تأكد من أنك
- استخدم فقط المتجهات العائمة ذات الأبعاد 1 على الأقل في بياناتك.
- استخدم فقط المسافة الإقليدية (L2) أو الضرب الداخلي (IP) أو COSINE لقياس المسافة بين المتجهات.
إعدادات الفهرس والبحث
معلمات بناء الفهرس
عند إنشاء فهرس DiskANN، استخدم
DISKANN
كنوع الفهرس. لا توجد معلمات فهرس ضرورية.معلمات البحث
المعلمة الوصف النطاق القيمة الافتراضية search_list
حجم القائمة المرشحة، الحجم الأكبر يوفر معدل استرجاع أعلى مع أداء متدهور. [topk, int32_max] 16
تكوينات ميلفوس ذات الصلة بـ DiskANN
DiskANN قابل للضبط. يمكنك تعديل المعلمات المتعلقة بـ DiskANN في ${MILVUS_ROOT_PATH}/configs/milvus.yaml
لتحسين أدائه.
...
DiskIndex:
MaxDegree: 56
SearchListSize: 100
PQCodeBugetGBRatio: 0.125
SearchCacheBudgetGBRatio: 0.125
BeamWidthRatio: 4.0
...
المعلمة | الوصف | نطاق القيمة | القيمة الافتراضية |
---|---|---|---|
MaxDegree | الدرجة القصوى للرسم البياني لفامانا. توفر القيمة الأكبر معدل استرجاع أعلى ولكنها تزيد من حجم الفهرس والوقت اللازم لبناء الفهرس. | [1, 512] | 56 |
SearchListSize | حجم القائمة المرشحة. تزيد القيمة الأكبر من الوقت المستغرق في بناء الفهرس ولكنها توفر معدل استدعاء أعلى. اضبطه على قيمة أصغر من MaxDegree إلا إذا كنت بحاجة إلى تقليل وقت بناء الفهرس. | [1, int32_max] | 100 |
PQCodeBugetGBRatio | الحد الأقصى لحجم رمز PQ. توفر القيمة الأكبر معدل استدعاء أعلى ولكنها تزيد من استخدام الذاكرة. | (0.0, 0.25] | 0.125 |
SearchCacheBudgetGBRatio | نسبة أرقام العقد المخزنة مؤقتاً إلى البيانات الأولية. تؤدي القيمة الأكبر إلى تحسين أداء بناء الفهرس مع زيادة استخدام الذاكرة. | [0.0, 0.3) | 0.10 |
BeamWidthRatio | النسبة بين الحد الأقصى لعدد طلبات الإدخال والإخراج لكل تكرار بحث ورقم وحدة المعالجة المركزية. | [1، الحد الأقصى (128 / رقم وحدة المعالجة المركزية، 16)] | 4.0 |
استكشاف الأخطاء وإصلاحها
كيفية التعامل مع الخطأ
io_setup() failed; returned -11, errno=11:Resource temporarily unavailable
؟يوفر Linux kernel ميزة الإدخال/الإخراج غير المتزامن غير المحظور (AIO) التي تسمح للعملية ببدء عمليات إدخال/إخراج متعددة في وقت واحد دون الحاجة إلى انتظار اكتمال أي منها. يساعد ذلك في تعزيز الأداء للتطبيقات التي يمكن أن تتداخل فيها المعالجة مع الإدخال/الإخراج.
يمكن ضبط الأداء باستخدام الملف الظاهري
/proc/sys/fs/aio-max-nr
في نظام الملفات proc. تحدد المعلمةaio-max-nr
الحد الأقصى لعدد الطلبات المتزامنة المسموح بها.يتم تعيين
aio-max-nr
افتراضيًا على65535
، ويمكنك ضبطه حتى10485760
.