DiskANN يحتفظ بنسخة صغيرة مضغوطة بتنسيقPQ من كل متجه في RAM والمتجهات الكاملة + الرسم البياني على SSD. يقوم البحث بالتنقل عبر الرسم البياني باستخدام مقارنات RAM منخفضة التكلفة، ثم يعيد ترتيب المرشحين الأوائل باستخدام عدد قليل من عمليات قراءة القرص المكلفة.
يمكن لـ« SSD » (محرك أقراص صلبة) واحد استيعاب جانب القرص بسهولة. أما جانب « RAM » (الذاكرة) فيتناسب مع أي كمبيوتر محمول. وبدون حيلة « PQ » (التخزين المؤقت)، ستحتاج إلى خادم بسعة مئات الجيجابايت من « RAM » (الذاكرة) لمجرد تحميل مجموعة البيانات.
PQ ≈ 1 µs، SSD ≈ 100 µs. تعتمد الأرقام الحقيقية على الأجهزة.R) مُحسَّن لتخطيط القرص التسلسلي. لا توجد هرمية — مجرد رسم بياني واحد كبير.L. اختر الأفضل، وقم بتوسيع جيرانه، وقم بتقدير المسافات باستخدام رموز «in-RAM » و« PQ » فقط. لا توجد عمليات إدخال/إخراج للقرص أثناء عملية «walk».النموذج الذهني: « PQ » هو الاختبار البسيط «هل هذا الحي واعد؟». عمليات قراءة القرص هي الفحص المكلف «دعني أتحقق فعليًّا». يقوم « DiskANN » بإنجاز معظم عمله باستخدام الاختبار البسيط.
DiskANN هو فهرس تقريبي لأقرب الجيران قائم على الرسم البياني ومصمم لمجموعات البيانات التي لا تتناسب مع RAM. يقوم ببناء رسم بياني أحادي الطبقة Vamana مصمم للوصول الفعال إلى القرص، ويحتفظ برمز صغير مُكمَّل (PQ) لكل متجه في الذاكرة، ويخزن المتجهات ذات الدقة الكاملة وحواف الرسم البياني على SSD. تتنقل عمليات البحث في الرسم البياني باستخدام مقارنات منخفضة التكلفة داخلRAM PQ ولا تلمس القرص إلا لإعادة ترتيب عدد قليل من المرشحين النهائيين.
في « Milvus »، تعمل « DiskANN » على تشغيل خيار الفهرس على القرص: تصبح المجموعات التي تبلغ حجمها المليارات قابلة للبحث على أجهزة ذات سعة تصل إلى عشرات — وليس مئات — الجيجابايت من « RAM »، بينما تحافظ خطوة إعادة الترتيب على القرص على دقة الاسترجاع قريبة من فهارس الرسوم البيانية الموجودة في الذاكرة.
R (درجة الرسم البياني، وقت الإنشاء): العدد الأقصى للحواف لكل عقدة في الرسم البياني « Vamana ». كلما زادت قيمة R، تحسنت الاتصال ودقة الاسترجاع، على حساب حجم أكبر للرسم البياني على القرص وبطء في عملية الإنشاء.L / search_list (وقت الاستعلام): مجموعة المرشحين التي يتم الاحتفاظ بها أثناء البحث الشعاعي — مفتاح التحكم الرئيسي في الاسترجاع/الكمون، وهو ما يعادل ef في HNSW. يجب أن يكون على الأقل top-K الخاص بك.اختر « DiskANN » عندما تتجاوز مجموعة البيانات (أو استهلاك الذاكرة) سعة « RAM »: فهي تخدم الاستعلامات ذات الاسترجاع العالي باستخدام جزء بسيط من الذاكرة، مقابل زمن انتقال على مستوى الميلي ثانية يهيمن عليه قراءات « SSD ». إذا كان كل شيء يتسع بسهولة في الذاكرة، فإن « HNSW » يقدم إجابات أسرع. إذا كنت بحاجة إلى إنشاء فهارس سريع أو توفير معتدل في الذاكرة دون استخدام القرص، فإن متغيرات « IVF » تقع في الوسط.
عندما لا تتسع متجهاتك في RAM — أو عندما تكون تكلفة RAM لتخزينها أعلى مما ترغب في دفعه. يحتاج مليار متجه عائم ذي 768 بُعدًا إلى ~3 تيرابايت في الذاكرة لـ HNSW ، ولكنه لا يحتاج سوى عشرات الجيجابايت من RAM بالإضافة إلى SSD مع DiskANN. إذا كانت مجموعة البيانات تتسع في الذاكرة بسهولة، فإن HNSW يظل الخيار الأقل تأخيرًا.
يُعد «البحث السريع عن المتجهات» ( NVMe ) SSD هو المطلب الرئيسي، حيث إن زمن استجابة الاستعلام يتأثر بشكل كبير بعدد قليل من عمليات القراءة العشوائية للقرص (تستغرق كل منها حوالي 100 ميكروثانية). متطلبات «الذاكرة المخصصة» ( RAM ) متواضعة: تقريبًا رموز «الذاكرة المخصصة» ( PQ ) (على سبيل المثال، 32–64 بايت لكل متجه) بالإضافة إلى المخازن المؤقتة العاملة.
لكل استعلام، نعم — عادةً ما تكون الميلي ثانية منخفضة من رقم واحد مقابل أقل من الميلي ثانية لـ « HNSW » داخل الذاكرة، لأن كل إعادة ترتيب على القرص تكون أبطأ بحوالي 100× من الوصول إلى « RAM ». المقايضة هي التكلفة: « DiskANN » يخدم نفس مجموعة البيانات بـ RAM أقل بمقدار عشرة أضعاف مع الحفاظ على دقة الاسترجاع فوق 90–95%.
PQ تُستخدم الرموز فقط لتوجيه مسار الرسم البياني، وليس لإنتاج النتائج النهائية. قبل إرجاع النتائج، يقرأ « DiskANN » المتجهات ذات الدقة الكاملة لأفضل المرشحين من « SSD » ويعيد ترتيبها بدقة، مصححًا خطأ التكمية الذي لا تستطيع الفهارس القائمة على « PQ » البحتة مثل « IVF_PQ » إصلاحه.
لمزيد من التفاصيل: اقرأ وثائق «DiskANN » لمعرفة متطلبات الإعداد، أو راجع «شرح الفهرس» للحصول على دليل القرار الكامل.
شاهد البحث في الرسم البياني متعدد الطبقات خطوة بخطوة — بدءًا من القفزات السريعة وصولًا إلى التنقلات المحلية.
مقارنة جنبًا إلى جنب بين البحث بالقوة الغاشمة والبحث المجمَّع. قم بضبط « nprobe » في الوقت الفعلي.
اسحب نقطة استعلام وقم بالتبديل بين « L2 » و«Cosine» و« IP » لترى كيف يتغير «الأقرب».