نظرة عامة على فهرس GPU
يمكن أن يؤدي إنشاء فهرس مع دعم GPU في Milvus إلى تحسين أداء البحث بشكل كبير في سيناريوهات الإنتاجية العالية والاستدعاء العالي.
يقارن الشكل التالي إنتاجية الاستعلام (الاستعلامات في الثانية) عبر تكوينات الفهرس وإعدادات الأجهزة ومجموعات البيانات المتجهة (Cohere وOpenAI) وأحجام دفعات البحث، مما يوضح أن GPU_CAGRA يتفوق باستمرار على الطرق الأخرى.
أداء فهرس وحدة معالجة الرسومات
تكوين تجمع ذاكرة وحدة معالجة الرسومات لوحدة معالجة الرسومات ل Milvus
يدعم Milvus تجمع ذاكرة GPU عالمي ويوفر معلمتي تكوين، initMemSize و maxMemSize ، في ملف تكوين Milvus.
gpu:
initMemSize: 0 # set the initial memory pool size.
maxMemSize: 0 # sets the maximum memory usage limit. When the memory usage exceeds initMemSize, Milvus will attempt to expand the memory pool.
عادةً ما يكون الإعداد الافتراضي initMemSize هو نصف ذاكرة وحدة معالجة الرسومات عند بدء تشغيل Milvus، و maxMemSize الافتراضي إلى ذاكرة وحدة معالجة الرسومات بالكامل. يتم تعيين حجم تجمع ذاكرة وحدة معالجة الرسومات في البداية على initMemSize وسيتم توسيعه تلقائيًا إلى maxMemSize حسب الحاجة.
عندما يتم تحديد فهرس ممكّن لوحدة معالجة الرسومات، يقوم Milvus بتحميل بيانات المجموعة المستهدفة في ذاكرة وحدة معالجة الرسومات قبل عمليات البحث، لذا يجب أن يكون maxMemSize حجم البيانات على الأقل.
الحدود
بالنسبة لـ
GPU_IVF_FLAT، القيمة القصوى لـlimitهي 1,024.بالنسبة إلى
GPU_IVF_PQوGPU_CAGRA، القيمة القصوى لـlimitهي 1,024.بينما لا يوجد حد أقصى محدد
limitلـGPU_BRUTE_FORCE، يوصى بعدم تجاوز 4,096 لتجنب مشاكل الأداء المحتملة.في الوقت الحالي، لا تدعم فهارس GPU المسافة
COSINE. إذا كانت المسافةCOSINEمطلوبة، يجب تطبيع البيانات أولاً، ثم يمكن استخدام مسافة المنتج الداخلي (IP) كبديل.تحميل حماية OOM لفهارس وحدة معالجة الرسومات غير مدعوم بالكامل، قد يؤدي تحميل الكثير من البيانات إلى تعطل QueryNode.
لا تدعم فهارس وحدة معالجة الرسومات وظائف البحث مثل البحث في النطاق والبحث في التجميع.
أنواع فهارس GPU المدعومة
يسرد الجدول التالي أنواع فهارس GPU المدعومة من قبل Milvus.
نوع الفهرس |
الوصف |
استخدام الذاكرة |
|---|---|---|
GPU_CAGRA هو فهرس قائم على الرسم البياني مُحسَّن لوحدات معالجة الرسوم البيانية، ويمكن أن يكون استخدام وحدات معالجة الرسومات الاستدلالية لتشغيل إصدار Milvus GPU أكثر فعالية من حيث التكلفة مقارنةً باستخدام وحدات معالجة الرسومات باهظة الثمن من فئة التدريب. |
يبلغ استخدام الذاكرة حوالي 1.8 ضعف استخدام البيانات المتجهة الأصلية. |
|
GPU_IVF_FLAT هو فهرس IVF الأساسي، وتكون البيانات المشفرة المخزنة في كل وحدة متسقة مع البيانات الأصلية. عند إجراء عمليات البحث، لاحظ أنه يمكنك تعيين أعلى k ( |
يتطلب ذاكرة مساوية لحجم البيانات الأصلية. |
|
يُنفذ GPU_IVF_PQ تجميع فهرس IVF قبل تكميم حاصل ضرب المتجهات. عند إجراء عمليات البحث، لاحظ أنه يمكنك تعيين أعلى k ( |
يستخدم بصمة ذاكرة أصغر، والتي تعتمد على إعدادات معلمة الضغط. |
|
تم تصميم GPU_BRUTE_FORCE للحالات التي يكون فيها الاستدعاء العالي للغاية أمرًا بالغ الأهمية، مما يضمن استدعاء 1 من خلال مقارنة كل استعلام مع جميع المتجهات في مجموعة البيانات. يتطلب فقط نوع المقياس ( |
يتطلب ذاكرة مساوية لحجم البيانات الأصلية. |
تكوين إعدادات Milvus للتحكم في ذاكرة وحدة معالجة الرسومات
يستخدم Milvus مجموعة ذاكرة رسومات عامة لتخصيص ذاكرة وحدة معالجة الرسومات. وهو يدعم معلمتين initMemSize و maxMemSize في ملف تكوين Milvus. يتم تعيين حجم التجمع في البداية على initMemSize ، وسيتم توسيعه تلقائيًا إلى maxMemSize بعد تجاوز هذا الحد.
ويكون الافتراضي initMemSize هو 1/2 من ذاكرة وحدة معالجة الرسومات المتوفرة عند بدء تشغيل Milvus، ويكون الافتراضي maxMemSize يساوي كل ذاكرة وحدة معالجة الرسومات المتوفرة.
حتى الإصدار Milvus 2.4.1، كان Milvus يستخدم تجمع ذاكرة GPU موحد لوحدة معالجة الرسومات. بالنسبة للإصدارات السابقة للإصدار 2.4.1، كان يوصى بتعيين كلتا القيمتين إلى 0.
gpu:
initMemSize: 0 #set the initial memory pool size.
maxMemSize: 0 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool.
بدءًا من الإصدار Milvus 2.4.1 وما بعده، يتم استخدام مخزن ذاكرة وحدة معالجة الرسومات فقط لبيانات وحدة معالجة الرسومات المؤقتة أثناء عمليات البحث. لذلك، يوصى بتعيينها إلى 2048 و4096.
gpu:
initMemSize: 2048 #set the initial memory pool size.
maxMemSize: 4096 #maxMemSize sets the maximum memory usage limit. When the memory usage exceed initMemSize, Milvus will attempt to expand the memory pool.
لمعرفة كيفية إنشاء فهرس GPU، راجع الدليل الخاص بكل نوع من أنواع الفهارس.
الأسئلة الشائعة
متى يكون من المناسب استخدام فهرس GPU؟
يكون فهرس GPU مفيدًا بشكل خاص في المواقف التي تتطلب إنتاجية عالية أو استدعاءً عاليًا. على سبيل المثال، عند التعامل مع الدفعات الكبيرة، يمكن أن تتجاوز إنتاجية فهرسة وحدة معالجة الرسومات إنتاجية فهرسة وحدة المعالجة المركزية بما يصل إلى 100 مرة. في السيناريوهات ذات الدُفعات الأصغر، لا تزال فهارس وحدة معالجة الرسومات تتفوق بشكل كبير على فهارس وحدة المعالجة المركزية من حيث الأداء. علاوةً على ذلك، إذا كانت هناك متطلبات لإدخال البيانات بسرعة، فإن دمج وحدة معالجة الرسومات يمكن أن يسرّع عملية إنشاء الفهارس بشكل كبير.
في أي السيناريوهات تكون فهارس وحدة معالجة الرسومات مثل GPU_CAGRA و GPU_IVF_PQ و GPU_IVF_PQ و GPU_IVF_FLAT و GPU_BRUT_FORCE الأنسب؟
GPU_CAGRAتعد الفهارس مثالية للسيناريوهات التي تتطلب أداءً محسنًا، وإن كان ذلك على حساب استهلاك المزيد من الذاكرة. بالنسبة للبيئات التي يكون فيها الحفاظ على الذاكرة أولوية، يمكن أن يساعد الفهرسGPU_IVF_PQفي تقليل متطلبات التخزين، على الرغم من أن ذلك يأتي مع خسارة أعلى في الدقة. يعمل الفهرسGPU_IVF_FLATكخيار متوازن، حيث يوفر حلاً وسطًا بين الأداء واستخدام الذاكرة. أخيرًا، تم تصميم الفهرسGPU_BRUTE_FORCEلعمليات البحث الشامل، مما يضمن معدل استدعاء يبلغ 1 من خلال إجراء عمليات بحث اجتياحية.