Milvus
Zilliz
  • Home
  • Blog
  • تحسين NVIDIA CAGRA في Milvus: نهج هجين بين وحدة معالجة الرسومات ووحدة المعالجة المركزية (GPU) لفهرسة أسرع واستعلامات أرخص

تحسين NVIDIA CAGRA في Milvus: نهج هجين بين وحدة معالجة الرسومات ووحدة المعالجة المركزية (GPU) لفهرسة أسرع واستعلامات أرخص

  • Engineering
December 10, 2025
Marcelo Chen

مع انتقال أنظمة الذكاء الاصطناعي من مرحلة التجارب إلى البنية التحتية للإنتاج، لم تعد قواعد البيانات المتجهة تتعامل مع ملايين التضمينات. أصبحت المليارات الآن روتينية، وعشرات المليارات شائعة بشكل متزايد. على هذا النطاق، لا تؤثر الخيارات الخوارزمية على الأداء والاسترجاع فحسب، بل تُترجم مباشرةً إلى تكلفة البنية التحتية.

وهذا يؤدي إلى سؤال أساسي لعمليات النشر على نطاق واسع: كيف تختار الفهرس المناسب لتقديم استدعاء وزمن استجابة مقبول دون السماح باستخدام موارد الحوسبة بشكل متصاعد خارج نطاق السيطرة؟

لقد أصبحت الفهارس القائمة على الرسوم البيانية مثل NSW وHNSW وCAGRA وVamana هي الإجابة الأكثر اعتماداً على نطاق واسع. من خلال التنقل في الرسوم البيانية للأحياء المبنية مسبقًا، تتيح هذه الفهارس إمكانية البحث السريع عن أقرب جار على نطاق مليار، وتجنب المسح الضوئي الغاشم ومقارنة كل متجه بالاستعلام.

ومع ذلك، فإن ملف تعريف التكلفة لهذا النهج غير متكافئ. فالاستعلام عن الرسم البياني رخيص نسبيًا؛ أما إنشاؤه فليس كذلك. يتطلب إنشاء رسم بياني عالي الجودة إجراء عمليات حسابية واسعة النطاق للمسافة وتنقيحًا متكررًا عبر مجموعة البيانات بأكملها - وهي أعباء عمل تكافح موارد وحدة المعالجة المركزية التقليدية للتعامل معها بكفاءة مع نمو البيانات.

تعالج CAGRA من NVIDIA هذا الاختناق من خلال استخدام وحدات معالجة الرسومات لتسريع بناء الرسم البياني من خلال التوازي الهائل. وعلى الرغم من أن هذا يقلل بشكل كبير من وقت الإنشاء، إلا أن الاعتماد على وحدات معالجة الرسومات في إنشاء الفهرس وخدمة الاستعلامات على حد سواء يفرض قيودًا أعلى من حيث التكلفة وقابلية التوسع في بيئات الإنتاج.

ولموازنة هذه المفاضلات، يتبنى Milvus 2.6.1 تصميمًا هجينًا لفهارس GPU_CAGRA: تُستخدم وحدات معالجة الرسوم البيانية فقط لبناء الرسم البياني، بينما يتم تنفيذ الاستعلام على وحدات المعالجة المركزية. يحافظ هذا على مزايا جودة الرسوم البيانية المبنية على وحدة معالجة الرسومات البيانية مع الحفاظ على قابلية التوسع في خدمة الاستعلام وفعالية التكلفة، مما يجعلها مناسبة بشكل خاص لأحمال العمل ذات التحديثات غير المتكررة للبيانات وأحجام الاستعلامات الكبيرة والحساسية الصارمة للتكلفة.

ما هي CAGRA وكيف تعمل؟

تنقسم فهارس المتجهات القائمة على الرسم البياني عمومًا إلى فئتين رئيسيتين:

  • بناء الرسم البياني التكراري، ويمثله CAGRA (مدعوم بالفعل في Milvus).

  • بناء الرسم البياني القائم على الإدراج، ويمثله Vamana (قيد التطوير حاليًا في Milvus).

يختلف هذان الأسلوبان اختلافًا كبيرًا في أهداف تصميمهما وأسسهما التقنية، مما يجعل كل منهما مناسبًا لمقاييس البيانات وأنماط أعباء العمل المختلفة.

إنNVIDIA CAGRA (القائمة على الرسم البياني لو حدة معالجة الرسوم البيانية لوحدة معالجة الرسوم البيانية) هي خوارزمية أصلية لوحدة معالجة الرسوم البيانية للبحث التقريبي عن أقرب جار (ANN)، وهي مصممة لبناء الرسوم البيانية المتقاربة واسعة النطاق والاستعلام عنها بكفاءة. ومن خلال الاستفادة من توازيية وحدة معالجة الرسوم البيانية، تعمل CAGRA على تسريع بناء الرسم البياني بشكل كبير وتوفر أداء استعلام عالي الإنتاجية مقارنةً بالنهج القائمة على وحدة المعالجة المركزية مثل HNSW.

تم بناء CAGRA على خوارزمية NN-Descent (أقرب جار منحدر) ، والتي تقوم ببناء رسم بياني لأقرب جار (kNN) من خلال التنقيح التكراري. في كل عملية تكرار، يتم تقييم وتحديث الجيران المرشحين وتحديثهم، بحيث يتقاربون تدريجيًا نحو علاقات جوار أعلى جودة عبر مجموعة البيانات.

بعد كل جولة تنقيح، تطبق CAGRA تقنيات تشذيب إضافية للرسم البياني - مثل تشذيب الالتفاف من قفزتين- لإزالة الحواف الزائدة عن الحاجة مع الحفاظ على جودة البحث. ينتج عن هذا المزيج من التنقيح والتشذيب التكراري رسم بياني مضغوط ومتصل جيدًا وفعال في وقت الاستعلام.

من خلال التنقيح والتشذيب المتكرر، تنتج CAGRA بنية رسم بياني تدعم الاستدعاء العالي والبحث القريب من الأقرب في زمن استجابة منخفض على نطاق واسع، مما يجعلها مناسبة بشكل خاص لمجموعات البيانات الثابتة أو التي يتم تحديثها بشكل غير متكرر.

الخطوة 1: بناء الرسم البياني الأولي باستخدام NN-Descent

يعتمد NN-Descent على ملاحظة بسيطة ولكنها قوية: إذا كانت العقدة u جارة للعقدة والعقدة w جارة للعقدة فمن المحتمل جدًا أن تكون w جارة للعقدة v أيضًا. تسمح هذه الخاصية المتعدية للخوارزمية باكتشاف الجيران الأقرب الحقيقيين بكفاءة، دون مقارنة كل زوج من المتجهات بشكل شامل.

تستخدم CAGRA خوارزمية NN-Descent كخوارزمية أساسية لبناء الرسم البياني. تعمل العملية على النحو التالي:

1. تهيئة عشوائية: تبدأ كل عقدة بمجموعة صغيرة من الجيران المختارين عشوائيًا، لتكوين رسم بياني أولي تقريبي.

2. توسيع الجيران: في كل تكرار، تجمع العقدة جيرانها الحاليين وجيرانهم لتشكيل قائمة مرشحين. تحسب الخوارزمية أوجه التشابه بين العقدة وجميع المرشحين. ولأن قائمة مرشحي كل عقدة مستقلة، يمكن تعيين هذه العمليات الحسابية إلى كتل خيطية منفصلة لوحدة معالجة الرسومات وتنفيذها بالتوازي على نطاق واسع.

3. تحديث قائمة المرشحين: إذا عثرت الخوارزمية على مرشحين أقرب من جيران العقدة الحاليين، فإنها تقوم بتبديل الجيران الأبعد وتحديث قائمة kNN للعقدة. على مدى عدة تكرارات، تُنتج هذه العملية رسمًا بيانيًا تقريبيًا أعلى جودة بكثير من kNN.

4. التحقق من التقارب: مع تقدم التكرارات، يحدث عدد أقل من تحديثات الجيران. بمجرد انخفاض عدد الاتصالات المحدثة إلى أقل من عتبة محددة، تتوقف الخوارزمية، مما يشير إلى أن الرسم البياني قد استقر بشكل فعال.

نظرًا لأن توسيع الجار وحساب التشابه للعقد المختلفة مستقلان تمامًا، تقوم CAGRA بتعيين عبء عمل NN-Descent لكل عقدة إلى كتلة خيطية مخصصة لوحدة معالجة الرسومات. يتيح هذا التصميم توازيًا هائلاً ويجعل بناء الرسم البياني أسرع بكثير من الطرق التقليدية القائمة على وحدة المعالجة المركزية.

الخطوة 2: تشذيب الرسم البياني باستخدام تحويلات القفزة 2

بعد اكتمال NN-Descent، يكون الرسم البياني الناتج دقيقًا ولكنه كثيف للغاية. يحتفظ NN-Descent عمدًا بجيران مرشحين إضافيين، وتُدخل مرحلة التهيئة العشوائية العديد من الحواف الضعيفة أو غير ذات الصلة. ونتيجة لذلك، غالبًا ما ينتهي الأمر بكل عقدة بدرجة أعلى مرتين - أو حتى عدة مرات - من الدرجة المستهدفة.

لإنتاج رسم بياني مضغوط وفعّال، تطبق CAGRA عملية تشذيب الحواف ذات القفزة الثنائية.

والفكرة واضحة ومباشرة: إذا كان بإمكان العقدة A الوصول إلى العقدة B بشكل غير مباشر من خلال جار مشترك C (تشكيل مسار A → C → B)، وكانت مسافة هذا المسار غير المباشر مماثلة للمسافة المباشرة بين A وB، فإن الحافة المباشرة A → B تعتبر زائدة عن الحاجة ويمكن إزالتها.

تتمثل الميزة الرئيسية لاستراتيجية التقليم هذه في أن التحقق من التكرار لكل حافة يعتمد فقط على المعلومات المحلية - المسافات بين نقطتي النهاية وجيرانهما المشتركين. ونظرًا لإمكانية تقييم كل حافة بشكل مستقل، فإن خطوة التقليم قابلة للتوازي بشكل كبير وتتناسب بشكل طبيعي مع تنفيذ دُفعات وحدة معالجة الرسومات.

نتيجةً لذلك، يمكن ل CAGRA تشذيب الرسم البياني بكفاءة على وحدات معالجة الرسومات، مما يقلل من نفقات التخزين بنسبة 40-50% مع الحفاظ على دقة البحث وتحسين سرعة اجتيازه أثناء تنفيذ الاستعلام.

GPU_CAGRA في Milvus: ما الذي يختلف؟

بينما توفر وحدات معالجة الرسومات مزايا أداء كبيرة لبناء الرسم البياني، تواجه بيئات الإنتاج تحديًا عمليًا: موارد وحدة معالجة الرسومات أكثر تكلفة بكثير ومحدودة من وحدات المعالجة المركزية. إذا كان كل من بناء الفهرس وتنفيذ الاستعلام يعتمد فقط على وحدات معالجة الرسوم البيانية، تظهر العديد من المشكلات التشغيلية بسرعة:

  • انخفاض استخدام الموارد: غالبًا ما تكون حركة الاستعلام غير منتظمة ومتفجرة، مما يترك وحدات معالجة الرسومات خاملة لفترات طويلة ويهدر سعة الحوسبة المكلفة.

  • ارتفاع تكلفة النشر: يؤدي تخصيص وحدة معالجة الرسومات لكل مثيل يخدم الاستعلام إلى زيادة تكاليف الأجهزة، على الرغم من أن معظم الاستعلامات لا تستخدم أداء وحدة معالجة الرسومات بشكل كامل.

  • قابلية التوسع المحدودة: يحد عدد وحدات معالجة الرسومات المتاحة مباشرةً من عدد النسخ المتماثلة للخدمة التي يمكنك تشغيلها، مما يحد من قدرتك على التوسع حسب الطلب.

  • مرونة منخفضة: عندما يعتمد كل من إنشاء الفهرس والاستعلام على وحدات معالجة الرسومات، يصبح النظام مرتبطاً بتوافر وحدة معالجة الرسومات، ولا يمكن تحويل أعباء العمل بسهولة إلى وحدات المعالجة المركزية.

لمعالجة هذه القيود، يقدم الإصدار Milvus 2.6.1 وضع نشر مرن لفهرس GPU_CAGRA من خلال المعلمة adapt_for_cpu. يتيح هذا الوضع سير عمل هجين: تستخدم CAGRA وحدة معالجة الرسوم البيانية لإنشاء فهرس رسم بياني عالي الجودة، بينما يتم تنفيذ الاستعلام على وحدة المعالجة المركزية - باستخدام HNSW كخوارزمية بحث.

في هذا الإعداد، يتم استخدام وحدات معالجة الرسومات حيث تقدم أكبر قيمة - إنشاء فهرس سريع وعالي الدقة - بينما تتعامل وحدات المعالجة المركزية مع أعباء عمل الاستعلامات واسعة النطاق بطريقة أكثر فعالية من حيث التكلفة وقابلة للتطوير.

ونتيجة لذلك، فإن هذا النهج الهجين مناسب بشكل خاص لأحمال العمل حيث:

  • تحديثات البيانات غير متكررة، لذا فإن عمليات إعادة بناء الفهرس نادرة

  • حجم الاستعلام مرتفع، مما يتطلب العديد من النسخ المتماثلة غير المكلفة

  • حساسية التكلفة عالية، ويجب التحكم في استخدام وحدة معالجة الرسومات بإحكام

الفهم adapt_for_cpu

في Milvus، تتحكم المعلمة adapt_for_cpu في كيفية تسلسل فهرس CAGRA إلى القرص أثناء إنشاء الفهرس وكيفية إعادة تسلسله إلى الذاكرة في وقت التحميل. من خلال تغيير هذا الإعداد في وقت الإنشاء ووقت التحميل، يمكن ل Milvus التبديل بمرونة بين بناء الفهرس القائم على وحدة معالجة الرسومات وتنفيذ الاستعلامات القائم على وحدة المعالجة المركزية.

تؤدي المجموعات المختلفة من adapt_for_cpu في وقت الإنشاء ووقت التحميل إلى أربعة أوضاع تنفيذ، كل منها مصمم لسيناريو تشغيلي محدد.

وقت الإنشاء (adapt_for_cpu)وقت التحميل (adapt_for_cpu)منطق التنفيذالسيناريو الموصى به
صحيحصحيحالإنشاء باستخدام GPU_CAGRA ← التسلسل على هيئة HNSW ← إلغاء التسلسل على هيئة HNSW ← الاستعلام بوحدة المعالجة المركزيةأعباء العمل الحساسة للتكلفة؛ خدمة الاستعلام على نطاق واسع
صوابخطأالإنشاء باستخدام GPU_CAGRA → التسلسل ك HNSW → إلغاء التسلسل ك HNSW → الاستعلام بوحدة المعالجة المركزيةتعود الاستعلامات المتتالية إلى وحدة المعالجة المركزية عند حدوث عدم تطابق في المعلمات
خطأصحيحالإنشاء باستخدام GPU_CAGRA → التسلسل على هيئة CAGRA → إلغاء التسلسل على هيئة HNSW → الاستعلام بوحدة المعالجة المركزيةالاحتفاظ بفهرس CAGRA الأصلي للتخزين مع تمكين البحث المؤقت لوحدة المعالجة المركزية
خطأخطأالإنشاء باستخدام GPU_CAGRA → التسلسل على هيئة CAGRA → إلغاء التسلسل على هيئة CAGRA → الاستعلام بوحدة معالجة الرسوماتأعباء العمل ذات الأداء الحرج حيث تكون التكلفة ثانوية

ملاحظة: تدعم آلية adapt_for_cpu التحويل في اتجاه واحد فقط. يمكن تحويل فهرس CAGRA إلى HNSW لأن بنية الرسم البياني CAGRA تحافظ على جميع العلاقات المجاورة التي يحتاجها HNSW. ومع ذلك، لا يمكن تحويل فهرس HNSW مرة أخرى إلى CAGRA، لأنه يفتقر إلى المعلومات الهيكلية الإضافية اللازمة للاستعلام المستند إلى وحدة معالجة الرسومات. ونتيجة لذلك، يجب اختيار إعدادات وقت الإنشاء بعناية، مع مراعاة متطلبات النشر والاستعلام على المدى الطويل.

وضع GPU_CAGRA تحت الاختبار

لتقييم فعالية نموذج التنفيذ الهجين - باستخدام وحدات معالجة الرسومات لإنشاء الفهرس ووحدات المعالجة المركزية لتنفيذ الاستعلام - أجرينا سلسلة من التجارب الخاضعة للرقابة في بيئة موحدة. يركز التقييم على ثلاثة أبعاد: أداء بناء الفهرس وأداء الاستعلام ودقة الاسترجاع.

الإعداد التجريبي

أُجريت التجارب على أجهزة معتمدة على نطاق واسع ومتوافقة مع معايير الصناعة لضمان بقاء النتائج موثوقة وقابلة للتطبيق على نطاق واسع.

  • وحدة المعالجة المركزية: معالج MD EPYC 7R13 (16 وحدة معالجة مركزية)

  • وحدة معالجة الرسومات: NVIDIA L4

1. أداء بناء الفهرس

نحن نقارن CAGRA المبني على وحدة معالجة الرسومات مع HNSW المبني على وحدة المعالجة المركزية، تحت نفس درجة الرسم البياني المستهدفة 64.

النتائج الرئيسية

  • تنشئ وحدة معالجة الرسومات CAGRA بوحدة معالجة الرسومات CAGRA فهارس أسرع بمعدل 12-15 مرة من HNSW بوحدة المعالجة المركزية. على كل من Cohere1M و Gist1M، تتفوق CAGRA القائمة على وحدة معالجة الرسومات على HNSW القائمة على وحدة المعالجة المركزية، مما يسلط الضوء على كفاءة التوازي بين وحدة معالجة الرسومات أثناء بناء الرسم البياني.

  • يزداد وقت الإنشاء خطيًا مع تكرارات NN-Descent. ومع ارتفاع عدد مرات التكرار، يزداد وقت البناء بطريقة شبه خطية، مما يعكس طبيعة التنقيح التكراري ل NN-Descent ويوفر مفاضلة يمكن التنبؤ بها بين تكلفة البناء وجودة الرسم البياني.

2. أداء الاستعلام

في هذه التجربة، يتم بناء الرسم البياني CAGRA مرة واحدة على وحدة معالجة الرسومات، ثم يتم الاستعلام عنه باستخدام مسارين مختلفين للتنفيذ:

  • الاستعلام بوحدةالمعالجة المركزية: يتم إلغاء تسلسل الفهرس إلى تنسيق HNSW والبحث على وحدة المعالجة المركزية

  • الاستعلام باستخدام وحدةمعالجة الرسومات: يتم تشغيل البحث مباشرة على الرسم البياني لوحدة معالجة الرسومات باستخدام وحدة معالجة الرسومات

النتائج الرئيسية

  • إنتاجية البحث على وحدة معالجة الرسومات أعلى 5-6 أضعاف من البحث على وحدة المعالجة المركزية. عبر كل من Cohere1M و Gist1M، يوفر اجتياز وحدة معالجة الرسوم البيانية المستندة إلى وحدة معالجة الرسوم البيانية معدل سرعة أعلى بكثير، مما يسلط الضوء على كفاءة التنقل المتوازي في الرسم البياني على وحدات معالجة الرسوم البيانية.

  • يزداد التذكر مع تكرارات NN-Descent، ثم يستقر. مع زيادة عدد تكرارات الإنشاء، يتحسن التذكر لكل من وحدة المعالجة المركزية ووحدة معالجة الرسومات. ومع ذلك، بعد نقطة معينة، ينتج عن التكرارات الإضافية مكاسب متناقصة، مما يشير إلى أن جودة الرسم البياني قد تقاربت إلى حد كبير.

3. دقة الاسترجاع

في هذه التجربة، يتم الاستعلام عن كل من CAGRA و HNSW على وحدة المعالجة المركزية لمقارنة الاستدعاء في ظل ظروف استعلام متطابقة.

النتائج الرئيسية

تحقق CAGRA استرجاعًا أعلى من HNSW على كلتا مجموعتي البيانات، مما يدل على أنه حتى عندما يتم إنشاء فهرس CAGRA على وحدة معالجة الرسومات ثم يتم إلغاء تسلسله للبحث على وحدة المعالجة المركزية، يتم الحفاظ على جودة الرسم البياني بشكل جيد.

ما التالي: توسيع نطاق بناء الفهرس باستخدام Vamana

يقدم نهج Milvus الهجين بين وحدة معالجة الرسومات ووحدة المعالجة المركزية (GPU) حلاً عملياً وفعالاً من حيث التكلفة لأعباء عمل البحث المتجه واسعة النطاق اليوم. من خلال إنشاء رسوم بيانية CAGRA عالية الجودة على وحدات معالجة الرسومات وخدمة الاستعلامات على وحدات المعالجة المركزية، فإنه يجمع بين إنشاء الفهرس السريع وتنفيذ الاستعلامات القابلة للتطوير وبأسعار معقولة - وهومناسب بشكل خاصلأعباء العمل ذات التحديثات غير المتكررة، وأحجام الاستعلامات العالية، وقيود التكلفة الصارمة.

حتى في المقاييس الأكبر - عشراتأو مئات المليارات من المتجهات -يصبح بناءالفهرسنفسه عنق الزجاجة. عندما لا تتسع مجموعة البيانات الكاملة في ذاكرة وحدة معالجة الرسوم البيانية، تتحول الصناعة عادةً إلى طرق بناء الرسم البياني القائمة على الإدراج مثل Vamana. فبدلاً من بناء الرسم البياني دفعة واحدة، تعالج Vamana البيانات على دفعات، وتقوم بإدخال متجهات جديدة بشكل تدريجي مع الحفاظ على الاتصال العالمي.

يتبع خط أنابيب البناء ثلاث مراحل رئيسية:

1. نمو الدُفعات الهندسية - البدء بدفعات صغيرة لتكوين رسم بياني هيكلي، ثم زيادة حجم الدُفعات لزيادة التوازي إلى أقصى حد، وأخيرًا استخدام دفعات كبيرة لتحسين التفاصيل.

2. الإدراج الجشع - يتم إدراج كل عقدة جديدة عن طريق التنقل من نقطة دخول مركزية، مع تنقيح مجموعة جيرانها بشكل متكرر.

3. تحديثات الحافة العكسية - إضافة اتصالات عكسية للحفاظ على التماثل وضمان التنقل الفعال في الرسم البياني.

يتم دمج التقليم مباشرةً في عملية البناء باستخدام معيار α-RNG: إذا كان الجار المرشح v مغطى بالفعل من قبل جار موجود p′ (أي د(p′، v) < α × د(p، v))، يتم تقليم v. تسمح المعلمة α بالتحكم الدقيق في التباعد والدقة. يتم تحقيق تسريع وحدة معالجة الرسومات من خلال التوازي داخل الدُفعات وتوسيع نطاق الدُفعات الهندسية، مما يحقق التوازن بين جودة الفهرس والإنتاجية.

تُمكِّن هذه التقنيات معًا الفرق من التعامل مع النمو السريع للبيانات وتحديثات الفهرس على نطاق واسع دون الوقوع في قيود ذاكرة وحدة معالجة الرسومات.

يعمل فريق Milvus بنشاط على بناء دعم Vamana، مع إصدار مستهدف في النصف الأول من عام 2026. ترقبوا ذلك.

هل لديك أسئلة أو تريد التعمق في أي ميزة من أحدث إصدار من Milvus؟ انضم إلى قناة Discord الخاصة بنا أو قم بتسجيل المشكلات على GitHub. يمكنك أيضًا حجز جلسة فردية مدتها 20 دقيقة للحصول على رؤى وإرشادات وإجابات على أسئلتك من خلال ساعات عمل Milvus المكتبية.

تعرف على المزيد حول ميزات Milvus 2.6

    Try Managed Milvus for Free

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

    Get Started

    Like the article? Spread the word

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