تحسين قواعد بيانات المتجهات، وتعزيز الذكاء الاصطناعي التوليدي القائم على RAG
تم نشر هذا المنشور في الأصل على قناة إنتل المتوسطة ويعاد نشره هنا بعد الحصول على إذن.
طريقتان لتحسين قاعدة بياناتك المتجهة عند استخدام RAG
تصوير إيليا بافلوف على Unsplash
بقلم كاثي تشانغ والدكتورة ماليني بهاندارو المساهمين: لين يانغ وتشانغيان ليو
يتم تحسين نماذج الذكاء الاصطناعي التوليدي (GenAI)، التي تشهد اعتمادًا هائلاً في حياتنا اليومية، من خلال التوليد المعزز للاسترجاع (RAG)، وهي تقنية تُستخدم لتعزيز دقة الاستجابة والموثوقية من خلال جلب الحقائق من مصادر خارجية. تساعد تقنية RAG نموذج اللغة الكبيرة العادية (LLM) على فهم السياق وتقليل الهلوسة من خلال الاستفادة من قاعدة بيانات عملاقة من البيانات غير المنظمة المخزنة في صورة متجهات - وهو عرض رياضي يساعد على التقاط السياق والعلاقات بين البيانات.
يساعد RAG على استرجاع المزيد من المعلومات السياقية وبالتالي توليد استجابات أفضل، ولكن قواعد البيانات المتجهة التي تعتمد عليها تزداد حجمًا أكثر من أي وقت مضى لتوفير محتوى غني للاستفادة منه. مثلما تلوح في الأفق قواعد بيانات المتجهات التي يبلغ حجمها تريليون معيار LLMs، فإن قواعد بيانات المتجهات التي تضم مليارات المتجهات ليست بعيدة عن ذلك. وبصفتنا مهندسي التحسين، كان لدينا فضول لمعرفة ما إذا كان بإمكاننا جعل قواعد البيانات المتجهة أكثر أداءً، وتحميل البيانات بشكل أسرع، وإنشاء مؤشرات بشكل أسرع لضمان سرعة الاسترجاع حتى مع إضافة بيانات جديدة. لن يؤدي القيام بذلك إلى تقليل وقت انتظار المستخدم فحسب، بل سيؤدي أيضًا إلى جعل حلول الذكاء الاصطناعي القائمة على RAG أكثر استدامة.
في هذه المقالة، ستتعرف في هذه المقالة على المزيد حول قواعد البيانات المتجهة وأطر قياس الأداء، ومجموعات البيانات لمعالجة الجوانب المختلفة، والأدوات المستخدمة لتحليل الأداء - كل ما تحتاجه لبدء تحسين قواعد البيانات المتجهة. سنقوم أيضًا بمشاركة إنجازات التحسين التي حققناها على اثنين من حلول قواعد البيانات المتجهة الشائعة لإلهامك في رحلة تحسين الأداء وتأثير الاستدامة.
فهم قواعد البيانات المتجهة
على عكس قواعد البيانات العلائقية أو غير العلائقية التقليدية حيث يتم تخزين البيانات بطريقة منظمة، تحتوي قاعدة البيانات المتجهة على تمثيل رياضي لعناصر البيانات الفردية، يُطلق عليه اسم المتجه، ويتم إنشاؤه باستخدام دالة تضمين أو تحويل. يمثل المتجه عادةً السمات أو المعاني الدلالية ويمكن أن يكون قصيرًا أو طويلًا. تقوم قواعد البيانات المتجهة باسترجاع المتجهات من خلال البحث عن المتجهات باستخدام مقياس تشابه باستخدام مقياس المسافة (حيث يعني التقارب أن النتائج أكثر تشابهًا) مثل الإقليدية أو الضرب النقطي أو تشابه جيب التمام.
لتسريع عملية الاسترجاع، يتم تنظيم بيانات المتجهات باستخدام آلية فهرسة. تتضمن أمثلة على طرق التنظيم هذه الهياكل المسطحة، والملف المقلوب (IVF)، والعوالم الصغيرة الهرمية القابلة للتنقل (HNSW)، والتجزئة الحساسة للموقع (LSH)، وغيرها. تساهم كل طريقة من هذه الطرق في كفاءة وفعالية استرجاع المتجهات المتشابهة عند الحاجة.
دعونا نفحص كيفية استخدام قاعدة بيانات المتجهات في نظام GenAI. يوضح الشكل 1 كلاً من تحميل البيانات في قاعدة بيانات المتجهات واستخدامها في سياق تطبيق GenAI. عندما تقوم بإدخال المطالبة الخاصة بك، فإنها تخضع لعملية تحويل مماثلة لتلك المستخدمة لتوليد المتجهات في قاعدة البيانات. ثم تُستخدم مطالبة المتجهات المحولة هذه لاسترداد متجهات مماثلة من قاعدة بيانات المتجهات. تعمل هذه العناصر المسترجعة بشكل أساسي كذاكرة محادثة، حيث توفر تاريخًا سياقيًا للمطالبات، على غرار طريقة عمل أجهزة LLM. وتثبت هذه الميزة فائدتها بشكل خاص في معالجة اللغة الطبيعية والرؤية الحاسوبية وأنظمة التوصيات وغيرها من المجالات التي تتطلب الفهم الدلالي ومطابقة البيانات. يتم بعد ذلك "دمج" المطالبة الأولية مع العناصر المسترجعة، مما يوفر السياق ويساعد الآلية في صياغة الاستجابات بناءً على السياق المقدم بدلاً من الاعتماد فقط على بيانات التدريب الأصلية.
الشكل 1. بنية تطبيق RAG.
يتم تخزين المتجهات وفهرستها لاسترجاعها بسرعة. تنقسم قواعد البيانات المتجهة إلى نوعين رئيسيين، قواعد البيانات التقليدية التي تم توسيعها لتخزين المتجهات، وقواعد البيانات المتجهة المصممة لهذا الغرض. بعض الأمثلة على قواعد البيانات التقليدية التي توفر دعمًا للمتجهات هي Redis و pgvector و Elasticsearch و OpenSearch. ومن الأمثلة على قواعد البيانات المتجهة المصممة لغرض معين الحلول الخاصة Zilliz و Pinecone، والمشاريع مفتوحة المصدر Milvus و Weaviate و Qdrant و Faiss و Chroma. يمكنك معرفة المزيد عن قواعد بيانات المتجهات على GitHub عبر GitHub عبر LangChain و OpenAI Cookbook.
سنلقي نظرة فاحصة على واحدة من كل فئة، ميلفوس وريديس.
تحسين الأداء
قبل الغوص في التحسينات، دعونا نراجع كيفية تقييم قواعد البيانات المتجهة وبعض أطر التقييم وأدوات تحليل الأداء المتاحة.
مقاييس الأداء
لنلقِ نظرة على المقاييس الرئيسية التي يمكن أن تساعدك في قياس أداء قاعدة البيانات المتجهة.
- يقيسزمن انتقال التحميل الوقت اللازم لتحميل البيانات في ذاكرة قاعدة البيانات المتجهة وإنشاء فهرس. الفهرس عبارة عن بنية بيانات تُستخدم لتنظيم البيانات المتجهة واسترجاعها بكفاءة استنادًا إلى تشابهها أو المسافة بينها. تتضمن أنواع الفهارس داخل الذاكرة الفهرس المسطح و IVF_FLAT و IVF_FLAT و IVF_PQ و HNSW و HNSW و ScaNN القابل للتطوير (ScaNN)و DiskANN.
- الاسترجاع هو نسبة التطابقات الحقيقية، أو العناصر ذات الصلة، الموجودة في أفضل النتائج K التي تم استرجاعها بواسطة خوارزمية البحث. تشير قيم الاستدعاء الأعلى إلى استرجاع أفضل للعناصر ذات الصلة.
- الاستعلامات في الثانية (QPS) هو المعدل الذي يمكن لقاعدة البيانات المتجهة معالجة الاستعلامات الواردة. تشير قيم QPS الأعلى إلى قدرة أفضل على معالجة الاستعلامات وإنتاجية أفضل للنظام.
الأطر المعيارية
الشكل 2. إطار قياس أداء قاعدة البيانات المتجهة.
يتطلب قياس أداء قاعدة البيانات المتجهة وجود خادم قاعدة بيانات متجهة وعملاء. استخدمنا في اختبارات الأداء التي أجريناها أداتين مفتوحتي المصدر شائعتين.
- VectorDBBench: تساعد أداة VectorDBBench، التي طورها Zilliz ومفتوحة المصدر، في اختبار قواعد البيانات المتجهة بأنواع مختلفة من الفهارس وتوفر واجهة ويب ملائمة.
- Vector-db-benchmark: يساعد Vector-db-benchmark، الذي طورته شركة Qdrant، على اختبار العديد من قواعد البيانات المتجهة النموذجية لنوع فهرس HNSW. وهو يقوم بتشغيل الاختبارات من خلال سطر الأوامر ويوفر ملف __ملف Docker Compose لتبسيط بدء تشغيل مكونات الخادم.
الشكل 3. مثال على الأمر vector-db-benchmark المستخدم لتشغيل الاختبار المعياري.
لكن الإطار المعياري ليس سوى جزء من المعادلة. نحن بحاجة إلى بيانات تمارس جوانب مختلفة من حل قاعدة البيانات المتجهة نفسها، مثل قدرتها على التعامل مع أحجام كبيرة من البيانات، وأحجام متجهات مختلفة، وسرعة الاسترجاع، وبهذا، دعونا نلقي نظرة على بعض مجموعات البيانات العامة المتاحة.
مجموعات البيانات المفتوحة لممارسة قواعد البيانات المتجهة
تُعد مجموعات البيانات الكبيرة مرشحة جيدة لاختبار زمن انتقال التحميل وتخصيص الموارد. تحتوي بعض مجموعات البيانات على بيانات عالية الأبعاد وهي جيدة لاختبار سرعة حوسبة التشابه.
تتراوح مجموعات البيانات من بُعد 25 إلى بُعد 2048. وقد استُخدمت مجموعة بيانات LAION، وهي مجموعة صور مفتوحة، لتدريب نماذج بصرية ولغوية عميقة عصبية كبيرة جدًا مثل النماذج التوليدية ذات الانتشار المستقر. تم إنشاء مجموعة بيانات OpenAI المكونة من 5 ملايين متجه، لكل منها بُعد 1536، بواسطة VectorDBBench عن طريق تشغيل OpenAI على البيانات الأولية. بالنظر إلى أن كل عنصر متجه هو من النوع FLOAT، لحفظ المتجهات وحدها، يلزم حوالي 29 جيجابايت (5M * 1536 * 4) من الذاكرة، بالإضافة إلى كمية إضافية مماثلة لحفظ المؤشرات والبيانات الوصفية الأخرى بإجمالي 58 جيجابايت من الذاكرة للاختبار. عند استخدام أداة vector-db-benchmark، تأكد من وجود مساحة تخزين كافية على القرص لحفظ النتائج.
لاختبار كمون التحميل، احتجنا إلى مجموعة كبيرة من المتجهات، وهو ما يوفره Deep-image-96-angular. لاختبار أداء توليد الفهرس وحساب التشابه، توفر المتجهات عالية الأبعاد مزيدًا من الضغط. وتحقيقًا لهذه الغاية، اخترنا مجموعة بيانات 500 ألف من متجهات ذات أبعاد 1536 متجهًا.
أدوات الأداء
لقد غطينا طرق الضغط على النظام لتحديد المقاييس ذات الأهمية، ولكن دعونا نفحص ما يحدث على مستوى أقل: ما مدى انشغال وحدة الحوسبة واستهلاك الذاكرة وانتظار الأقفال وغير ذلك؟ هذه توفر أدلة على سلوك قاعدة البيانات، وهي مفيدة بشكل خاص في تحديد مناطق المشاكل.
توفر أداة لينكس الأعلى معلومات عن أداء النظام. ومع ذلك، توفر أداة بيرف في لينكس مجموعة أعمق من الرؤى. لمعرفة المزيد، نوصي أيضًا بقراءة أمثلة لينكس بيرف وطريقة تحليل البنية الدقيقة من أعلى إلى أسفل من إنتل. هناك أداة أخرى هي أداة Intel® vTune™ Profiler، وهي أداة مفيدة عند تحسين ليس فقط أداء التطبيق ولكن أيضًا أداء النظام وتكوينه لمجموعة متنوعة من أعباء العمل التي تشمل الحوسبة عالية الأداء والسحابة وإنترنت الأشياء والوسائط والتخزين وغيرها.
تحسينات قاعدة بيانات Milvus Vector لقاعدة البيانات
دعونا نستعرض بعض الأمثلة على كيفية محاولتنا تحسين أداء قاعدة بيانات Milvus المتجهة.
تقليل الحركة الزائدة للذاكرة في كتابة المخزن المؤقت لقاعدة البيانات
يقوم وكلاء مسار الكتابة في Milvus بكتابة البيانات في وسيط السجل عبر MsgStream. ثم تستهلك عقد البيانات البيانات، وتقوم بتحويلها وتخزينها إلى شرائح. ستقوم المقاطع بدمج البيانات المدرجة حديثًا. يخصص منطق الدمج مخزنًا مؤقتًا جديدًا لحفظ/نقل كل من البيانات القديمة والبيانات الجديدة المراد إدراجها ثم يعيد المخزن المؤقت الجديد كبيانات قديمة لدمج البيانات التالي. يؤدي ذلك إلى زيادة حجم البيانات القديمة تباعًا، مما يجعل حركة البيانات أبطأ. أظهرت ملفات تعريف الأداء ارتفاع النفقات العامة لهذا المنطق.
الشكل 4. يؤدي دمج البيانات ونقلها في قاعدة البيانات المتجهة إلى توليد نفقات عالية الأداء.
لقد قمنا بتغيير منطق المخزن المؤقت للدمج لإلحاق البيانات الجديدة مباشرةً بالبيانات القديمة لإدراجها في البيانات القديمة، وتجنب تخصيص مخزن مؤقت جديد ونقل البيانات القديمة الكبيرة. تؤكد ملفات تعريف الأداء أنه لا توجد نفقات زائدة لهذا المنطق. تشير مقاييس الرمز المصغّر تردد تشغيل وحدة المعالجة المركزية واستخدام وحدة المعالجة المركزية إلى تحسن يتوافق مع عدم اضطرار النظام إلى انتظار حركة الذاكرة الطويلة بعد الآن. تحسن زمن انتقال التحميل بأكثر من 60 بالمائة. تم تسجيل التحسن على GitHub.
الشكل 5. مع تقليل النسخ نرى تحسنًا في الأداء بنسبة تزيد عن 50 في المئة في زمن انتقال التحميل.
بناء الفهرس المقلوب مع تقليل نفقات تخصيص الذاكرة الزائدة
يوظف محرك البحث Milvus، نوير، خوارزمية Elkan k-means لتدريب بيانات المجموعة لإنشاء مؤشرات الملفات المقلوبة (IVF). تحدد كل جولة من تدريب البيانات عدد التكرارات. كلما زاد العدد، كانت نتائج التدريب أفضل. ومع ذلك، فإنه يعني أيضًا أنه سيتم استدعاء خوارزمية Elkan بشكل متكرر أكثر.
تتعامل خوارزمية Elkan مع تخصيص الذاكرة وإلغاء تخصيصها في كل مرة يتم تنفيذها. على وجه التحديد، تخصص ذاكرة لتخزين نصف حجم بيانات المصفوفة المتماثلة، باستثناء العناصر القطرية. في Knowhere، يتم تعيين بُعد المصفوفة المتماثلة التي تستخدمها خوارزمية Elkan على 1024، مما يؤدي إلى حجم ذاكرة يبلغ 2 ميغابايت تقريبًا. هذا يعني أنه في كل جولة تدريب، يقوم Elkan بتخصيص وإلغاء تخصيص ذاكرة بحجم 2 ميغابايت بشكل متكرر.
أشارت بيانات تحليل الأداء إلى نشاط تخصيص الذاكرة الكبير المتكرر. في الواقع، لقد أدى ذلك إلى تخصيص منطقة الذاكرة الافتراضية (VMA)، وتخصيص الصفحات الفعلية، وإعداد خريطة الصفحات، وتحديث إحصائيات مجموعة الذاكرة cgroup في النواة. يمكن أن يؤدي هذا النمط من نشاط تخصيص/إلغاء التخصيص الكبير للذاكرة، في بعض الحالات، إلى تفاقم تجزئة الذاكرة. هذه ضريبة كبيرة.
تم تصميم وبناء بنية IndexFlatElkan خصيصًا لدعم خوارزمية Elkan. سيتم تهيئة مثيل IndexFlatElkan في كل عملية تدريب على البيانات. وللتخفيف من تأثير الأداء الناتج عن التخصيص المتكرر للذاكرة وإلغاء التخصيص في خوارزمية Elkan، قمنا بإعادة هيكلة منطق الكود، ونقلنا إدارة الذاكرة خارج وظيفة خوارزمية Elkan إلى عملية بناء IndexFlatElkan. يتيح ذلك تخصيص الذاكرة مرة واحدة فقط أثناء مرحلة التهيئة مع خدمة جميع استدعاءات دالة خوارزمية Elkan اللاحقة من عملية تدريب البيانات الحالية ويساعد على تحسين زمن انتقال التحميل بحوالي 3 في المائة. ابحث عن تصحيح Knowhere هنا.
تسريع بحث ريديس المتجه من خلال الجلب المسبق للبرامج
بدأ Redis، وهو مخزن بيانات تقليدي شائع في الذاكرة للبيانات ذات القيمة المفتاحية في الذاكرة، مؤخرًا في دعم البحث المتجه. ولتجاوز كونه مخزنًا نموذجيًا للقيم الرئيسية، فإنه يوفر وحدات قابلة للتوسعة؛ تسهل وحدة RediSearch تخزين المتجهات والبحث عنها مباشرةً داخل Redis.
بالنسبة للبحث عن التشابه المتجه، يدعم Redis خوارزميتين، وهما القوة الغاشمة و HNSW. صُممت خوارزمية HNSW خصيصًا لتحديد موقع أقرب الجيران التقريبي بكفاءة في المساحات عالية الأبعاد. وهي تستخدم قائمة انتظار ذات أولوية تُدعى Candid_set لإدارة جميع المتجهات المرشحة لحساب المسافة.
يتضمن كل متجه مرشح بيانات وصفية كبيرة بالإضافة إلى بيانات المتجه. ونتيجة لذلك، عند تحميل مرشح من الذاكرة، يمكن أن يتسبب ذلك في حدوث أخطاء في ذاكرة التخزين المؤقت للبيانات، مما يؤدي إلى تأخير في المعالجة. يقدم تحسيننا الجلب المسبق للبرامج لتحميل المرشح التالي بشكل استباقي أثناء معالجة المرشح الحالي. وقد أدى هذا التحسين إلى تحسين الإنتاجية بنسبة 2 إلى 3 في المائة لعمليات البحث عن التشابه المتجه في إعداد Redis أحادي المثال. التصحيح في طور التعميم.
تغيير السلوك الافتراضي لـ GCC لمنع عقوبات كود التجميع المختلط
لتحقيق أقصى قدر من الأداء، غالبًا ما تتم كتابة الأجزاء المستخدمة بشكل متكرر من التعليمات البرمجية يدويًا في التجميع. ومع ذلك، عندما تتم كتابة أجزاء مختلفة من التعليمات البرمجية إما من قبل أشخاص مختلفين أو في أوقات مختلفة، قد تأتي التعليمات المستخدمة من مجموعات تعليمات تجميع غير متوافقة مثل Intel® Advanced Vector Extensions 512 (Intel® AVX-512) وSexting SIMD Extensions (SSE). إذا لم يتم تجميع الشيفرة البرمجية المختلطة بشكل مناسب، فإن ذلك سيؤدي إلى حدوث خلل في الأداء. تعرف على المزيد حول خلط تعليمات Intel AVX و SSE هنا.
يمكنك بسهولة تحديد ما إذا كنت تستخدم شيفرة تجميع مختلطة الوضع ولم تقم بتجميع الشيفرة البرمجية باستخدام VZEROUUPPER، مما يؤدي إلى حدوث عقوبة الأداء. يمكن ملاحظة ذلك من خلال أمر بيرف مثل sudo perf stat -e 'assists.sse_avx_mix/event/event=0xc1، umask=0x10/' <workload>. إذا لم يكن نظام التشغيل الخاص بك يدعم الحدث، استخدم cpu/event=0xc1,umask=0x10,name=assists_sse_avx_mix/.
يقوم المحول البرمجي Clang افتراضيًا بإدراج VZEROUUUPPER، متجنبًا أي عقوبة للوضع المختلط. لكن المحول البرمجي GCC يقوم بإدراج VZEROUUPPER فقط عندما يتم تحديد علامتي -O2 أو -O3 للمحول البرمجي. لقد اتصلنا بفريق GCC وشرحنا المشكلة وهم الآن، بشكل افتراضي، يتعاملون بشكل صحيح مع كود تجميع الوضع المختلط.
البدء بتحسين قواعد بيانات المتجهات الخاصة بك
تلعب قواعد بيانات المتجهات دورًا أساسيًا في GenAI، وهي تنمو بشكل أكبر من أي وقت مضى لتوليد استجابات عالية الجودة. فيما يتعلق بالتحسين، لا تختلف تطبيقات الذكاء الاصطناعي عن تطبيقات البرامج الأخرى من حيث أنها تكشف عن أسرارها عندما يستخدم المرء أدوات تحليل الأداء القياسية إلى جانب أطر عمل معيارية ومدخلات الضغط.
وباستخدام هذه الأدوات، كشفنا عن مصائد الأداء المتعلقة بالتخصيص غير الضروري للذاكرة، والفشل في جلب التعليمات مسبقًا، واستخدام خيارات غير صحيحة للمترجم. واستنادًا إلى النتائج التي توصلنا إليها، قمنا بإدخال تحسينات على Milvus وNowhere وRedis ومترجم GCC للمساعدة في جعل الذكاء الاصطناعي أكثر أداءً واستدامة. قواعد البيانات المتجهة هي فئة مهمة من التطبيقات التي تستحق جهود التحسين. نأمل أن تساعدك هذه المقالة على البدء.
- فهم قواعد البيانات المتجهة
- تحسين الأداء
- تحسينات قاعدة بيانات Milvus Vector لقاعدة البيانات
- تسريع بحث ريديس المتجه من خلال الجلب المسبق للبرامج
- تغيير السلوك الافتراضي لـ GCC لمنع عقوبات كود التجميع المختلط
- البدء بتحسين قواعد بيانات المتجهات الخاصة بك
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word