🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI
  • Home
  • Blog
  • الشروع في العمل مع مجموعة ميلفوس العنقودية و K8s

الشروع في العمل مع مجموعة ميلفوس العنقودية و K8s

  • Engineering
April 03, 2024
Stephen Batifol

مقدمة

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

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

لماذا نستخدمهما معاً؟

يمكن لـ K8s توسيع نطاق مجموعات Milvus تلقائيًا بناءً على عبء العمل. مع نمو بياناتك أو زيادة عدد الاستعلامات، يمكن لـ K8s تشغيل المزيد من مثيلات Milvus للتعامل مع الحمل، مما يضمن استمرار استجابة تطبيقاتك.

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

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

المتطلبات الأساسية وإعداد K8s

المتطلبات الأساسية

  • Docker - تأكد من تثبيت Docker على نظامك.

  • Kubernetes - جهّز مجموعة Kubernetes العنقودية. يمكنك استخدام minikube للتطوير المحلي أو خدمة Kubernetes الخاصة بمزود خدمة سحابية لبيئات الإنتاج.

  • Helm - قم بتثبيت Helm، وهو مدير حزم لـ Kubernetes، لمساعدتك في إدارة تطبيقات Kubernetes، يمكنك مراجعة وثائقنا لمعرفة كيفية القيام بذلك https://milvus.io/docs/install_cluster-helm.md

  • Kubectl - قم بتثبيت kubectl ، وهي أداة سطر أوامر للتفاعل مع مجموعات Kubernetes، لنشر التطبيقات وفحص موارد المجموعة وإدارتها وعرض السجلات.

إعداد K8s

بعد تثبيت كل ما هو مطلوب لتشغيل مجموعة K8s، وإذا كنت تستخدم minikube ، فابدأ تشغيل مجموعتك باستخدام:

minikube start

تحقق من حالة مجموعة K8s الخاصة بك باستخدام:

kubectl cluster-info

نشر ميلفوس على K8s

في عملية النشر هذه، سنختار Milvus في وضع الكتلة للاستفادة من قدراته الموزعة الكاملة. سنستخدم Helm، لتبسيط عملية التثبيت.

1. أمر تثبيت Helm

helm install my-milvus milvus/milvus --set pulsar.enabled=false --set kafka.enabled=true

يقوم هذا الأمر بتثبيت Milvus على مجموعة K8s الخاصة بك مع تمكين Kafka وتعطيل Pulsar. يعمل Kafka كنظام مراسلة داخل Milvus، حيث يتعامل مع تدفق البيانات بين المكونات المختلفة. يؤدي تعطيل Pulsar وتمكين Kafka إلى تخصيص عملية النشر وفقًا لتفضيلات ومتطلبات المراسلة الخاصة بنا.

2. إعادة توجيه المنفذ

للوصول إلى ميلفوس من جهازك المحلي، قم بإنشاء منفذ لإعادة توجيه المنفذ: kubectl port-forward svc/my-milvus 27017:19530.

يقوم هذا الأمر بتعيين المنفذ 19530 من خدمة Milvus svc/my-milvus إلى نفس المنفذ على جهازك المحلي، مما يسمح لك بالاتصال بـ Milvus باستخدام أدوات محلية. إذا تركت المنفذ المحلي غير محدد (كما هو الحال في :19530)، سيقوم K8s بتخصيص منفذ متاح، مما يجعله ديناميكيًا. تأكد من ملاحظة المنفذ المحلي المخصص إذا اخترت هذه الطريقة.

3. التحقق من النشر:

kubectl get pods 

NAME                                    READY   STATUS    RESTARTS   AGE
my-milvus-datacoord-595b996bd4-zprpd    1/1     Running   0          85m
my-milvus-datanode-d9d555785-47nkt      1/1     Running   0          85m
my-milvus-etcd-0                        1/1     Running   0          84m
my-milvus-etcd-1                        1/1     Running   0          85m
my-milvus-etcd-2                        1/1     Running   0          85m
my-milvus-indexcoord-65bc68968c-6jg6q   1/1     Running   0          85m
my-milvus-indexnode-54586f55d-z9vx4     1/1     Running   0          85m
my-milvus-kafka-0                       1/1     Running   0          85m
my-milvus-kafka-1                       1/1     Running   0          85m
my-milvus-kafka-2                       1/1     Running   0          85m
my-milvus-minio-0                       1/1     Running   0          96m
my-milvus-minio-1                       1/1     Running   0          96m
my-milvus-minio-2                       1/1     Running   0          96m
my-milvus-minio-3                       1/1     Running   0          96m
my-milvus-proxy-76bb7d497f-sqwvd        1/1     Running   0          85m
my-milvus-querycoord-6f4c7b7598-b6twj   1/1     Running   0          85m
my-milvus-querynode-677bdf485b-ktc6m    1/1     Running   0          85m
my-milvus-rootcoord-7498fddfd8-v5zw8    1/1     Running   0          85m
my-milvus-zookeeper-0                   1/1     Running   0          85m
my-milvus-zookeeper-1                   1/1     Running   0          85m
my-milvus-zookeeper-2                   1/1     Running   0          85m

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

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

استيعاب البيانات والفهرسة

للبدء في استيعاب وفهرسة البيانات في مجموعة ميلفوس الخاصة بنا، سنستخدم مجموعة أدوات تطوير البرمجيات pymilvus SDK. هناك خياران للتثبيت:

  • SDK الأساسي: pip install pymilvus

  • لتضمين النصوص الغنية والنماذج المتقدمة: pip install pymilvus[model]

وقت إدراج البيانات في مجموعتنا، سنستخدم pymilvus ، يمكنك إما تثبيت SDK فقط مع pip install pymilvus أو إذا كنت ترغب في استخراج تضمينات النص الغني، يمكنك أيضًا استخدام PyMilvus Models عن طريق التثبيت pip install pymilvus[model].

الاتصال وإنشاء مجموعة:

أولاً، قم بالاتصال بمثيل ميلفوس الخاص بك باستخدام المنفذ الذي قمت بإعادة توجيهه سابقاً. تأكد من تطابق URI مع المنفذ المحلي المعين من قبل K8s:

from pymilvus import MilvusClient

client = MilvusClient(
        uri="http://127.0.0.1:52070",
    )

client.create_collection(collection_name="quick_setup", dimension=5)

تحدد المعلمة dimension=5 حجم المتجه لهذه المجموعة، وهو أمر ضروري لإمكانيات البحث عن المتجهات.

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

إليك كيفية إدراج مجموعة أولية من البيانات، حيث يمثل كل متجه عنصرًا، ويضيف حقل اللون سمة وصفية:

data=[
    {"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
    {"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
    {"id": 2, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
    {"id": 3, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
    {"id": 4, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
    {"id": 5, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
    {"id": 6, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
    {"id": 7, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
    {"id": 8, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
    {"id": 9, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
]

res = client.insert(
    collection_name="quick_setup",
    data=data
)

print(res)

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

يتم تنظيم البيانات المراد إدراجها في قائمة من القواميس، حيث يمثل كل قاموس سجل بيانات، يُطلق عليه اسم كيان.

ويحتوي كل قاموس على حقل غير معرّف بشكل منهجي يسمى اللون.

يحتوي كل قاموس على المفاتيح المقابلة لكل من الحقول المحددة مسبقًا والحقول الديناميكية.

إدراج المزيد من البيانات

colors = ["green", "blue", "yellow", "red", "black", "white", "purple", "pink", "orange", "brown", "grey"]
data = [ {
    "id": i, 
    "vector": [ random.uniform(-1, 1) for _ in range(5) ], 
    "color": f"{random.choice(colors)}_{str(random.randint(1000, 9999))}" 
} for i in range(1000) ]

res = client.insert(
    collection_name="quick_setup",
    data=data[10:]
)

print(res)

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

query_vectors = [
    [0.041732933, 0.013779674, -0.027564144, -0.013061441, 0.009748648]
]

res = client.search(
    collection_name="quick_setup",     # target collection
    data=query_vectors,                # query vectors
    limit=3,                           # number of returned entities
)

print(res)

يبحث هذا الاستعلام عن أفضل 3 متجهات الأكثر تشابهًا مع متجه الاستعلام، مما يوضح قدرات البحث القوية في Milvus.

إلغاء تثبيت ميلفوس من K8s

بمجرد الانتهاء من هذا البرنامج التعليمي، لا تتردد في إلغاء تثبيت Milvus من مجموعة K8s الخاصة بك باستخدام:helm uninstall my-milvus.

سيؤدي هذا الأمر إلى إزالة جميع مكونات Milvus المنشورة في الإصدار my-milvus ، مما يؤدي إلى تحرير موارد المجموعة.

خاتمة

  • يُظهر نشر Milvus على مجموعة Kubernetes قابلية التوسع والمرونة في قواعد البيانات المتجهة في التعامل مع أعباء عمل الذكاء الاصطناعي والتعلم الآلي. من خلال هذا البرنامج التعليمي، تكون قد تعلمت أساسيات إعداد Milvus مع Helm، وإنشاء مجموعة، وإجراء عمليات استيعاب البيانات وعمليات البحث عن التشابه.

  • يجب أن يكون تثبيت Milvus على مجموعة Kubernetes مع Helm أمرًا بسيطًا ومباشرًا. للتعمق أكثر في توسيع نطاق مجموعات Milvus لمجموعات بيانات أكبر أو أعباء عمل أكثر كثافة، تقدم وثائقنا إرشادات مفصلة https://milvus.io/docs/scaleout.md

لا تتردد في التحقق من الكود على Github، وتحقق من Milvus، وجرّب تكوينات وحالات استخدام مختلفة، وشارك تجاربك مع المجتمع من خلال الانضمام إلى Discord الخاص بنا.

Like the article? Spread the word

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