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

AISAQCompatible with Milvus 2.6.4+

AISAQ عبارة عن فهرس متجه قائم على القرص يعمل على توسيع نطاق DISKANN للتعامل مع مجموعات بيانات بمليار حجم مع الحد الأدنى من بصمة DRAM.

على عكس DISKANN، الذي يحتفظ بالمتجهات المضغوطة في الذاكرة، تم تصميم AISAQ AISAQ مع "بنية DRAM شبه معدومة" مما يعني الاحتفاظ بجميع هياكل البيانات على SSD.

يتيح AISAQ تشغيل قواعد بيانات فائقة الاتساع باستخدام خوادم قياسية مع توفير أوضاع تشغيل لتحقيق التوازن بين الأداء وتكاليف التخزين.

كيف يعمل AISAQ

يقارن الرسم البياني أعلاه بين تخطيطات التخزين في كل من DISKANN و AISAQ-Performance و AISAQ-Scale، ويوضح كيفية توزيع البيانات (المتجهات الخام وقوائم الحواف ورموز PQ) بين ذاكرة الوصول العشوائي والقرص.

Aisaq Vs Diskann إيساق مقابل ديسكان

التأسيس: خلاصة DISKANN

في DISKANN، يتم تخزين المتجهات الخام وقوائم الحواف على القرص، بينما يتم الاحتفاظ بالمتجهات المضغوطة PQ في الذاكرة (DRAM).

عندما ينتقل DISKANN إلى عقدة (على سبيل المثال، المتجه 0):

  • يقوم بتحميل المتجه الخام(raw_vector_0) وقائمة الحواف الخاصة به(edgelist_0) من القرص.

  • تشير قائمة الحافة إلى الجيران الذين يجب زيارتهم بعد ذلك (العقد 2 و3 و5 في هذا المثال).

  • يُستخدم المتجه الخام لحساب المسافة الدقيقة إلى متجه الاستعلام للترتيب.

  • تُستخدَم بيانات PQ في الذاكرة لتصفية المسافة التقريبية لتوجيه عملية العبور التالية.

ونظرًا لأن بيانات PQ مخزنة بالفعل في ذاكرة DRAM، فإن كل زيارة للعقدة تتطلب إدخال/إخراج قرص واحد فقط، مما يحقق سرعة استعلام عالية مع استخدام معتدل للذاكرة.

للحصول على شرح مفصل لهذه المكونات والمعلمات راجع DISKANN.

أوضاع تشغيل AISAQ

يوفر AISAQ وضعين للتشغيل لمعالجة حالتي استخدام متميزتين:

وضع الأداء: مُحسَّن للتطبيقات التي تتطلب زمن استجابة منخفض وإنتاجية عالية على نطاق واسع، مثل البحث الدلالي عبر الإنترنت.

وضع النطاق: مُحسَّن للتطبيقات ذات قيود زمن انتقال أكثر مرونة، مثل RAG والبحث الدلالي دون اتصال بالإنترنت، مع تمكين التوسع الفعال من حيث التكلفة لمجموعات البيانات إلى نطاق فائق الارتفاع.

وضع AISAQ-أداء AISAQ

يحققوضع AISAQ-performance "بصمة DRAM تقترب من الصفر" عن طريق نقل بيانات PQ من الذاكرة إلى القرص مع الحفاظ على معدل IOPS منخفض من خلال تجميع البيانات وتكرارها.

  • يتم تخزين المتجه الخام لكل عقدة وقائمة الحواف وبيانات PQ الخاصة بجيرانها معًا على القرص.

  • يضمن هذا التخطيط أن زيارة عقدة (على سبيل المثال، المتجه 0) لا تزال تتطلب إدخال/إخراج قرص واحد فقط.

  • نظرًا لتخزين بيانات PQ بشكل متكرر بالقرب من عقد متعددة، يزداد حجم ملف الفهرس بشكل كبير، مما يستهلك مساحة أكبر على القرص.

وضع AISAQ-scale

يركزAISAQ-scale على تقليل استخدام مساحة القرص مع تلبية متطلبات الأداء للتطبيقات المستهدفة.

في هذا الوضع:

  • يتم تخزين بيانات PQ بشكل منفصل على القرص، دون تكرار.

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

  • وللتخفيف من الحمل الزائد على IOPS، يقدم AISAQ تحسينين:

    • خوارزمية إعادة ترتيب متجهات PQ حسب الأولوية لتحسين موقع البيانات.

    • ذاكرة تخزين مؤقتة PQ في DRAM (pq_read_page_cache_cache_cache_size) التي تخزن بيانات PQ التي يتم الوصول إليها بشكل متكرر.

مثال على التكوين

# milvus.yaml
knowhere:
  AISAQ:
    build:
      max_degree: 56 # Controls the maximum number of connections (edges) each data point can have in the Vamana graph
      search_list_size: 100 # During index construction, this parameter defines the size of the candidate pool used when searching for the nearest neighbors for each node. For every node being added to the graph, the algorithm maintains a list of the search_list_size best candidates found so far. The search for neighbors stops when this list can no longer be improved. From this final candidate pool, the top max_degree nodes are selected to form the final edges
      inline_pq: -1 # Number of PQ vectors stored inline per Index node (read when node is accessed, to reduce IO)
      rearrange: true # Re-arrange the PQ vectors data structure to improve data locality and reduce disk accesses during search (ignored in performance mode)
      num_entry_points: 100 # Number of candidate entry points to optimize search entry-point selection
      pq_code_budget_gb_ratio: 0.125 # Controls the size of the PQ codes (compressed representations of data points) compared to the size of the uncompressed data
      disk_pq_code_budget_gb_ratio: 0.25 # Controls the size of the PQ codes of the high precision vectors stored in the index (used for re-ranking), compared to the size of the uncompressed data
      pq_cache_size: 0 # PQ vectors cache size in DRAM (bytes). The PQ vectors cache is loaded during Index load and used during search to reduce IOs (ignored in performance mode)
      search_cache_budget_gb_ratio: 0 # Controls the amount of DRAM to be used for caching frequently accessed index nodes. This cache is loaded during index load and used during search to reduce IOs
    search:
      search_list: 16 # During a search operation, this parameter determines the size of the candidate pool that the algorithm maintains as it traverses the graph. A larger value increases the chances of finding the true nearest neighbors (higher recall) but also increases search latency
      beamwidth: 8 # Controls the degree of parallelism during search by determining the maximum number of parallel disk I/O requests to read the index nodes
      vectors_beamwidth: 1 # Controls the degree of parallelism during search by determining the maximum number of parallel disk I/O requests to read groups of neighboring PQ vectors (ignored in performance mode)
      pq_read_page_cache_size: 5242880 (5MiB) # PQ read cache size in DRAM per search thread (bytes). It caches frequently accessed data pages containing PQ vectors (ignored in performance mode and applicable only when rearrange is true). The PQ read cache memory is reused across all AISAQ segments

معلمات AISAQ

يرث AISAQ بعض المعلمات من DISKANN - max_degree و search_list_size و pq_code_budget_gb_ratio.

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

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

المعلمة

الوصف

نطاق القيمة

اقتراح الضبط

max_degree

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

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

المدى: [1, 512]

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

تنشئ القيم الأعلى رسومات بيانية أكثر كثافة، مما قد يزيد من الاستدعاء (العثور على نتائج أكثر صلة) ولكن أيضًا يزيد من استخدام الذاكرة ووقت الإنشاء. في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [10, 100].

search_list_size

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

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

المدى: [1, 512]

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

يزيد حجم_قائمة_البحث_الأكبر من احتمالية العثور على أقرب الجيران الحقيقيين لكل عقدة، مما قد يؤدي إلى رسم بياني عالي الجودة وأداء بحث أفضل (استرجاع). ومع ذلك، يأتي ذلك على حساب وقت إنشاء فهرس أطول بكثير. يجب تعيينه دائمًا على قيمة أكبر من أو تساوي max_degree.

inline_pq

عدد ناقلات PQ المخزنة مضمنة لكل عقدة فهرس (تُقرأ عند الوصول إلى العقدة، لتقليل الإدخال والإخراج)

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

المدى: [0، max_degree]

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

القيم الأعلى من inline_pq تحسن الأداء ولكنها تزيد من مساحة القرص.

قم بتعيين inline_pq= 0 لـ AISAQ في وضع المقياس.

قم بتعيين inline_pq= 1 لملء أي مساحة غير مستخدمة في الفهرس تلقائيًا بمتجهات PQ لمزيد من التحسين لـ AISAQ في وضع المقياس.

اضبط inline_pq= max_degree لـ AISAQ في وضع الأداء.

inline_pq تمكّن الإعدادات بين 0 و max_degree من تحقيق توازن قابل للتعديل بين الأداء واستهلاك مساحة القرص.

rearrange

إعادة ترتيب بنية بيانات ناقلات PQ لتحسين موقع البيانات وتقليل عمليات الوصول إلى القرص أثناء البحث (يتم تجاهلها في وضع الأداء).

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

المدى: [صواب، خطأ]

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

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

num_entry_points

عدد نقاط الدخول المرشحة لتحسين اختيار نقطة دخول البحث.

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

المدى: [0, 1000]

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

قد تقلل القيم العالية من وقت البحث عن طريق بدء البحث من نقطة دخول أقرب.

قم بتعيين قيم أعلى للقطاعات الكبيرة (على سبيل المثال لمتجهات 10M وما فوق استخدم قيمة 1000).

pq_code_budget_gb_ratio

يتحكم في حجم رموز PQ (التمثيل المضغوط لنقاط البيانات) مقارنةً بحجم البيانات غير المضغوطة.

النوع: عائم

المدى: (0.0، 0.25]

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

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

في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: (0.0417، 0.25].

disk_pq_code_budget_gb_ratio

يتحكم في حجم أكواد PQ للمتجهات عالية الدقة المخزنة في الفهرس (المستخدمة لإعادة الترتيب)، مقارنةً بحجم البيانات غير المضغوطة.

النوع: عائم

المدى: [0, 0.25]

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

باستخدام القيمة الافتراضية 0.25، سيتم تكميم المتجهات إلى 25% من حجمها الأصلي (ضغط 4×4)، مما يقلل من مساحة القرص مع تأثير دقة ضئيل نسبيًا.

قم بتعيين القيمة 0 لتخزين متجهات الدقة الكاملة في فهرس القرص لإعادة الترتيب. توفر القيمة الأكبر معدل استدعاء أعلى ولكنها تزيد من استخدام القرص.

pq_cache_size

حجم ذاكرة التخزين المؤقت لناقلات PQ في DRAM (بايت). يتم تحميل ذاكرة التخزين المؤقت لناقلات PQ أثناء تحميل الفهرس واستخدامها أثناء البحث لتقليل عمليات الإدخال والإخراج (يتم تجاهلها في وضع الأداء).

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

المدى: [0, 1073741824]

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

تعمل ذاكرة التخزين المؤقت الأكبر على تحسين أداء الاستعلام ولكنها تزيد من استخدام DRAM.

search_cache_budget_gb_ratio

يتحكم في مقدار DRAM الذي سيتم استخدامه لتخزين عقد الفهرس التي يتم الوصول إليها بشكل متكرر مؤقتًا

يتم تحميل ذاكرة التخزين المؤقت هذه أثناء تحميل الفهرس واستخدامها أثناء البحث لتقليل عمليات التشغيل الداخلي.

النوع: عائم

النطاق: [0.0, 0.3)

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

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

بارامترات البحث عن الفهرس

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

المعلمة

الوصف

نطاق القيمة

اقتراح الضبط

search_list

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

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

المدى: [topk، int32_max]

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

لتحقيق توازن جيد بين الأداء والدقة، يوصى بتعيين هذه القيمة لتكون مساوية لعدد النتائج التي تريد استرجاعها (top_k) أو أكبر قليلاً من عدد النتائج التي تريد استرجاعها.

beamwidth

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

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

المدى: [1, 16]

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

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

في معظم الحالات، نوصي بتعيين القيمة 2.

vectors_beamwidth

يتحكم في درجة التوازي أثناء البحث عن طريق تحديد الحد الأقصى لعدد طلبات الإدخال/الإخراج المتوازي للقرص لقراءة مجموعات من ناقلات PQ المجاورة (يتم تجاهلها في وضع الأداء).

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

المدى: [1، 4] يجب أن يكون <= عرض الشعاع

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

تزيد القيم الأعلى من التوازي، مما قد يؤدي إلى تسريع البحث على الأنظمة ذات وحدات المعالجة المركزية القوية ومحركات أقراص الحالة الصلبة. ومع ذلك، قد يؤدي تعيينها أعلى من اللازم إلى تنازع مفرط في الموارد، حيث قد تحتوي كل مجموعة متجهات PQ المجاورة على ما يصل إلى max_degree vectors.

في معظم الحالات، نوصي بتعيين قيمة 1.

pq_read_page_cache_size

حجم ذاكرة التخزين المؤقت لقراءة PQ في DRAM لكل مؤشر ترابط بحث (بايت). يقوم بتخزين صفحات البيانات التي يتم الوصول إليها بشكل متكرر والتي تحتوي على ناقلات PQ مؤقتًا (يتم تجاهلها في وضع الأداء ولا تنطبق إلا عندما تكون إعادة الترتيب صحيحة).

يتم إعادة استخدام ذاكرة التخزين المؤقت للقراءة PQ للقراءة عبر جميع قطاعات AISAQ.

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

المدى: [0, 33554432]

القيمة الافتراضية: 5242880 (5MiB)

تعمل ذاكرة التخزين المؤقت الأكبر على تحسين أداء الاستعلام ولكنها تزيد من استخدام DRAM.

تتراوح القيم الموصى بها بين 2 ميغابايت للقطاعات الصغيرة (1 ميغابايت من المتجهات) و5 ميغابايت للقطاعات المتوسطة (50 ميغابايت من المتجهات) و10 ميغابايت للقطاعات الكبيرة (250 ميغابايت من المتجهات).

جرب Managed Milvus مجاناً

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

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

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