الفهرسة على القرص
تقدم هذه المقالة خوارزمية الفهرسة على القرص DiskANN، وهي خوارزمية فهرسة على القرص لعمليات البحث المتجهة المحسّنة على القرص. استنادًا إلى الرسوم البيانية Vamana، يعمل DiskANN على تشغيل عمليات بحث متجهية فعالة على القرص ضمن مجموعات البيانات الكبيرة.
لتحسين أداء الاستعلام، يمكنك تحديد نوع فهرس لكل حقل متجه.
المتطلبات الأساسية
لاستخدام DiskANN في ملفوس، لاحظ ما يلي
- يعمل مثيل 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
PQCodeBudgetGBRatio: 0.125
SearchCacheBudgetGBRatio: 0.125
BeamWidthRatio: 4.0
...
| المعلمة | الوصف | نطاق القيمة | القيمة الافتراضية |
|---|---|---|---|
MaxDegree | الدرجة القصوى للرسم البياني لفامانا. توفر القيمة الأكبر معدل استرجاع أعلى ولكنها تزيد من حجم الفهرس والوقت اللازم لبناء الفهرس. | [1, 512] | 56 |
SearchListSize | حجم القائمة المرشحة. تزيد القيمة الأكبر من الوقت المستغرق في بناء الفهرس ولكنها توفر معدل استدعاء أعلى. اضبطه على قيمة أصغر من MaxDegree إلا إذا كنت بحاجة إلى تقليل وقت بناء الفهرس. | [1, int32_max] | 100 |
PQCodeBudgetGBRatio | الحد الأقصى لحجم رمز 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.