• نبذة عن ميلفوس
  • ابدأ الآن
  • المفاهيم
  • دليل المستخدم
  • استيراد البيانات
  • أدوات الذكاء الاصطناعي
  • دليل الإدارة
  • الأدوات
  • عمليات الدمج
  • البرامج التعليمية
  • الأسئلة الشائعة
  • API Reference

HNSW_SQ

يجمعHNSW_SQ بين الرسوم البيانية للعالم الصغير القابل للتنقل الهرمي (HNSW) مع الفهرسة الكمية العددية (SQ)، مما يؤدي إلى إنشاء طريقة فهرسة متجهة متقدمة توفر مفاضلة بين الحجم والدقة يمكن التحكم فيها. بالمقارنة مع HNSW القياسي، يحافظ هذا النوع من الفهرس على سرعة معالجة استعلامات عالية مع زيادة طفيفة في وقت إنشاء الفهرس.

نظرة عامة

يجمع HNSW_SQ بين تقنيتي فهرسة: HNSW للتنقل السريع القائم على الرسم البياني وSQ لضغط المتجهات بكفاءة.

HNSW

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

لمزيد من المعلومات، راجع HNSW.

SQ

SQ هي طريقة لضغط المتجهات من خلال تمثيلها بعدد أقل من البتات. على سبيل المثال

  • تستخدمSQ8 8 بت، وتعيين القيم إلى 256 مستوى. لمزيد من المعلومات، راجع IVF_SQ8.

  • يستخدمSQ6 6 بت لتمثيل كل قيمة من الفاصلة العائمة، مما ينتج عنه 64 مستوى منفصل.

Hnsw Sq Hnsw Sq

يقلل هذا التخفيض في الدقة بشكل كبير من بصمة الذاكرة ويسرّع من عملية الحساب مع الاحتفاظ بالبنية الأساسية للبيانات.

SQ4UCompatible with Milvus 2.6.8+

بالنسبة للسيناريوهات التي تتطلب سرعة استعلام قصوى وأقل استخدام للذاكرة، تقدم Milvus SQ4U ، وهو عبارة عن تكميم كمي موحد ذو 4 بت. هذا هو شكل قوي من أشكال التكميم الكمي القياسي الذي يضغط قيمة كل بُعد من الفاصلة العائمة في عدد صحيح غير موقع 4 بت.

يرمز حرف "U" في SQ4U إلى "موحد". على عكس التكميم الكمي غير المنتظم، الذي عادةً ما يحسب القيم الدنيا والقصوى بشكل مستقل لكل بُعد (التكميم الكمي لكل بُعد)، يفرض SQ4U استراتيجية التكميم الكمي الموحد العالمي:

  1. الإحصائيات العالمية: يقوم النظام بحساب قيمة دنيا واحدة vmin ونطاق قيمة واحدة vdiff التي تنطبق على جميع أبعاد المتجه (أو مقطع المتجه بأكمله).

  2. التعيين الموحد: ينقسم نطاق القيمة العالمية إلى 16 فترة متساوية. يتم تعيين كل قيمة ذات فاصلة عائمة في المتجه، بغض النظر عن البعد الذي تنتمي إليه، إلى عدد صحيح من 4 بت (0-15) باستخدام هذه المعلمات المشتركة.

مزايا الأداء:

  • نسبة ضغط 8 أضعاف: يقلل من الحجم بمقدار 8 أضعاف مقارنةً بـ FP32 و2 ضعف مقارنةً بـ SQ8 ، مما يقلل بشكل كبير من ضغط النطاق الترددي للذاكرة - وهو ما يمثل في الغالب عنق الزجاجة في البحث عن المتجهات.

  • تحسين SIMD: تسمح البنية المدمجة لوحدات المعالجة المركزية الحديثة (AVX2/AVX-512) بمعالجة المزيد من الأبعاد في كل دورة. والأهم من ذلك أن استخدام المعلمات العامة يلغي الحاجة إلى تحميل قيم متفاوتة للمقياس/المقياس المتغير أثناء حساب المسافة، مما يحافظ على خط أنابيب التعليمات مشبعًا بالكامل.

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

ونظرًا لمشاركة المعلمات العالمية، يعمل SQ4U بشكل أفضل على البيانات العادية أو مجموعات البيانات ذات توزيعات القيم المتسقة عبر الأبعاد.

HNSW + SQ

يجمع HNSW_SQ بين نقاط القوة في HNSW وSQ لتمكين البحث التقريبي الفعال عن أقرب جار. إليك كيفية عمل العملية

  1. ضغط البيانات: يضغط SQ المتجهات باستخدام sq_type (على سبيل المثال، SQ6 أو SQ8)، مما يقلل من استخدام الذاكرة. قد يقلل هذا الضغط من الدقة، لكنه يسمح للنظام بالتعامل مع مجموعات بيانات أكبر.

  2. بناء الرسم البياني: تُستخدم المتجهات المضغوطة لبناء رسم بياني HNSW. نظرًا لأن البيانات مضغوطة، يكون الرسم البياني الناتج أصغر حجمًا وأسرع في البحث.

  3. استرجاع المتجهات المرشحة: عندما يتم توفير متجه استعلام، تستخدم الخوارزمية البيانات المضغوطة لتحديد مجموعة من الجيران المرشحين بسرعة من الرسم البياني HNSW.

  4. (اختياري) تنقيح النتائج: يمكن تنقيح النتائج الأولية المرشحة للحصول على دقة أفضل، بناءً على المعلمات التالية:

    • refine: يتحكم فيما إذا كانت خطوة التنقيح هذه مفعلة أم لا. عند ضبطها على true ، يقوم النظام بإعادة حساب المسافات باستخدام تمثيلات عالية الدقة أو غير مضغوطة.

    • refine_type: يحدد مستوى دقة البيانات المستخدمة أثناء التنقيح (على سبيل المثال، SQ6 أو SQ8 أو BF16). يمكن أن يؤدي الاختيار ذو الدقة الأعلى مثل FP32 إلى نتائج أكثر دقة ولكنه يتطلب المزيد من الذاكرة. يجب أن يتجاوز هذا دقة مجموعة البيانات المضغوطة الأصلية sq_type.

    • refine_k: يعمل كعامل تكبير. على سبيل المثال، إذا كان أعلى k هو 100 و refine_k هو 2، فإن النظام يعيد ترتيب أفضل 200 مرشح ويعيد أفضل 100 مرشح، مما يعزز الدقة الإجمالية.

للحصول على قائمة كاملة بالمعلمات والقيم الصالحة، راجع بارامز الفهرس.

إنشاء فهرس

لإنشاء فهرس HNSW_SQ على حقل متجه في ميلفوس، استخدم طريقة add_index() ، مع تحديد index_type و metric_type ومعلمات إضافية للفهرس.

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_vector_field_name", # Name of the vector field to be indexed
    index_type="HNSW_SQ", # Type of the index to create
    index_name="vector_index", # Name of the index to create
    metric_type="L2", # Metric type used to measure similarity
    params={
        "M": 64, # Maximum number of neighbors each node can connect to in the graph
        "efConstruction": 100, # Number of candidate neighbors considered for connection during index construction
        "sq_type": "SQ6", # Scalar quantizer type
        "refine": true, # Whether to enable the refinement step
        "refine_type": "SQ8" # Precision level of data used for refinement
    } # Index building params
)

في هذا التكوين

  • index_type: نوع الفهرس المراد إنشاؤه. في هذا المثال، اضبط القيمة على HNSW_SQ.

  • metric_type: الطريقة المستخدمة لحساب المسافة بين المتجهات. تتضمن القيم المدعومة COSINE و L2 و IP. لمزيد من التفاصيل، راجع أنواع المقاييس.

  • params: خيارات التكوين الإضافية لبناء الفهرس. لمزيد من التفاصيل، راجع بارامترات بناء الفهرس.

بمجرد تكوين معلمات الفهرس، يمكنك إنشاء الفهرس باستخدام الأسلوب create_index() مباشرةً أو تمرير بارامترات الفهرس في الأسلوب create_collection. لمزيد من التفاصيل، راجع إنشاء مجموعة.

البحث في الفهرس

بمجرد إنشاء الفهرس وإدراج الكيانات، يمكنك إجراء عمليات بحث عن التشابه على الفهرس.

search_params = {
    "params": {
        "ef": 10, # Parameter controlling query time/accuracy trade-off
        "refine_k": 1 # The magnification factor
    }
}

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    anns_field="vector_field",  # Vector field name
    data=[[0.1, 0.2, 0.3, 0.4, 0.5]],  # Query vector
    limit=3,  # TopK results to return
    search_params=search_params
)

في هذا التكوين

باراميز الفهرس

يقدم هذا القسم نظرة عامة على المعلمات المستخدمة لبناء الفهرس وإجراء عمليات البحث على الفهرس.

معلمات بناء الفهرس

يسرد الجدول التالي المعلمات التي يمكن تكوينها في params عند إنشاء فهرس.

المعلمة

الوصف

نطاق القيمة

اقتراح الضبط

HNSW

M

الحد الأقصى لعدد الوصلات (أو الحواف) التي يمكن أن تحتويها كل عقدة في الرسم البياني، بما في ذلك الحواف الصادرة والواردة.

تؤثر هذه المعلمة بشكل مباشر على كل من بناء الفهرس والبحث.

النوع: عدد صحيح

المدى: [2, 2048]

القيمة الافتراضية: 30 (حتى 30 حافة صادرة و30 حافة واردة لكل عقدة)

يؤدي وجود M أكبر بشكل عام إلى دقة أعلى ولكنه يزيد من عبء الذاكرة ويبطئ بناء الفهرس والبحث.

ضع في اعتبارك زيادة M لمجموعات البيانات ذات الأبعاد العالية أو عندما يكون الاستدعاء العالي أمرًا بالغ الأهمية.

ضع في اعتبارك تقليل M عندما يكون استخدام الذاكرة وسرعة البحث من الاهتمامات الأساسية.

في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [5, 100].

efConstruction

عدد الجيران المرشحين الذين تم أخذهم في الاعتبار أثناء إنشاء الفهرس.

يتم تقييم مجموعة أكبر من المرشحين لكل عنصر جديد، ولكن لا يزال الحد الأقصى لعدد الاتصالات التي تم إنشاؤها بالفعل محدودًا بـ M.

النوع: عدد صحيح

المدى: [1، int_max]

القيمة الافتراضية: 360

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

ضع في اعتبارك زيادة efConstruction لتحسين الدقة، خاصة في السيناريوهات التي يكون فيها وقت الفهرسة أقل أهمية.

فكر في تقليل efConstruction لتسريع بناء الفهرس عندما تكون قيود الموارد مصدر قلق.

في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [50, 500].

SQ

sq_type

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

  • SQ4U: يشفر المتجهات باستخدام تكميم موحد 4 بت. يوفر هذا الوضع أعلى سرعة وضغط.

  • SQ6: ترميز المتجهات باستخدام أعداد صحيحة 6 بت.

  • SQ8: تشفير المتجهات باستخدام أعداد صحيحة 8 بت.

  • BF16: يستخدم تنسيق Bfloat16.

  • FP16: يستخدم تنسيق الفاصلة العائمة القياسي 16 بت.

النوع: سلسلة

النطاق: [ SQ4U, SQ6, , SQ8, BF16, FP16 ]

القيمة الافتراضية: SQ8

يعتمد اختيار sq_type على احتياجات التطبيق المحدد. SQ4U يتم اختيار لتحقيق أقصى سرعة وكفاءة للذاكرة. SQ6 أو SQ8 قد يكون مناسبًا للأداء المتوازن. من ناحية أخرى، إذا كانت الدقة أمرًا بالغ الأهمية، يمكن تفضيل BF16 أو FP16.

refine

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

النوع: منطقية

النطاق: [true ، false]

القيمة الافتراضية: false

اضبط على true إذا كانت الدقة العالية ضرورية ويمكنك تحمل أوقات بحث أبطأ قليلاً. استخدم false إذا كانت السرعة أولوية وكان التنازل البسيط في الدقة مقبولاً.

refine_type

يحدد دقة البيانات المستخدمة في التنقيح.

يجب أن تكون هذه الدقة أعلى من دقة المتجهات المضغوطة (كما تم تعيينها بواسطة sq_type)، مما يؤثر على دقة المتجهات المعاد تصنيفها وعلى بصمة الذاكرة الخاصة بها.

النوع: سلسلة

النطاق: [ SQ6, SQ8, , BF16, FP16, FP32 ]

القيمة الافتراضية: لا يوجد

استخدم FP32 للحصول على أقصى قدر من الدقة بتكلفة ذاكرة أعلى، أو SQ6/SQ8 للحصول على ضغط أفضل. BF16 و FP16 يقدمان بديلاً متوازنًا.

بارامترات البحث الخاصة بالفهرس

يسرد الجدول التالي المعلمات التي يمكن تكوينها في search_params.params عند البحث في الفهرس.

المعلمة

الوصف

نطاق القيمة

اقتراح الضبط

HNSW

ef

يتحكم في اتساع نطاق البحث أثناء استرجاع أقرب جار. وهي تحدد عدد العقد التي تتم زيارتها وتقييمها كأقرب جيران محتملين.

تؤثر هذه المعلمة على عملية البحث فقط وتطبق حصرياً على الطبقة السفلية من الرسم البياني.

النوع: عدد صحيح

المدى: [1، int_max]

القيمة الافتراضية: الحد (أقرب عدد من الجيران الأقرب للإرجاع)

يؤدي وجود ef أكبر بشكل عام إلى دقة بحث أعلى حيث يتم النظر في المزيد من الجيران المحتملين. ومع ذلك، يؤدي ذلك أيضًا إلى زيادة وقت البحث.

ضع في اعتبارك زيادة ef عندما يكون تحقيق الاستدعاء العالي أمرًا بالغ الأهمية وتكون سرعة البحث أقل أهمية.

ضع في اعتبارك تقليل ef لإعطاء الأولوية لعمليات البحث الأسرع، خاصةً في السيناريوهات التي يكون فيها الانخفاض الطفيف في الدقة مقبولاً.

في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [ك، 10 آلاف].

س كيو

refine_k

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

النوع: عائم

المدى: [1, float_max)

القيمة الافتراضية: 1

يمكن أن تؤدي القيم الأعلى ل refine_k إلى تحسين الاستدعاء والدقة ولكنها ستزيد أيضًا من وقت البحث واستخدام الموارد. تعني القيمة 1 أن عملية التنقيح تأخذ في الاعتبار أفضل النتائج الأولية K فقط.

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟