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

milvus-logo
LFAI
  • Home
  • Blog
  • كيفية نشر قاعدة بيانات Milvus Vector مفتوحة المصدر على Amazon EKS

كيفية نشر قاعدة بيانات Milvus Vector مفتوحة المصدر على Amazon EKS

  • Engineering
August 09, 2024
AWS

نُشر هذا المنشور في الأصل على موقع AWS على الويب وتمت ترجمته وتحريره وإعادة نشره هنا بإذن.

نظرة عامة على تضمينات المتجهات وقواعد البيانات المتجهة

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

يتوقع تقرير شركة IDC أنه بحلول عام 2025، سيكون أكثر من 80% من بيانات الأعمال غير منظمة، وموجودة في تنسيقات مثل النصوص والصور والصوت ومقاطع الفيديو. يمثل فهم هذا الكم الهائل من البيانات غير المنظمة ومعالجتها وتخزينها والاستعلام عنها على نطاق واسع تحديًا كبيرًا. تتمثل الممارسة الشائعة في الذكاء الاصطناعي الجيني والتعلم العميق في تحويل البيانات غير المهيكلة إلى تضمينات متجهة وتخزينها وفهرستها في قاعدة بيانات متجهة مثل Milvus أو Zilliz Cloud (Milvus المدارة بالكامل) لعمليات البحث عن التشابه المتجه أو التشابه الدلالي.

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

How to perform a vector similarity search كيفية إجراء بحث تشابه المتجهات

الشكل 1: كيفية إجراء بحث تشابه المتجهات

إن القدرة على تخزين وفهرسة والبحث في تضمينات المتجهات هي الوظيفة الأساسية لقواعد بيانات المتجهات. تنقسم قواعد البيانات المتجهة السائدة حاليًا إلى فئتين. الفئة الأولى توسع منتجات قواعد البيانات العلائقية الحالية، مثل خدمة Amazon OpenSearch Service مع المكون الإضافي KNN وAmazon RDS ل PostgreSQL مع امتداد pgvector. تتألف الفئة الثانية من منتجات قواعد البيانات المتجهة المتخصصة، بما في ذلك أمثلة معروفة مثل Milvus وZilliz Cloud (Milvus المدارة بالكامل) وP Pinecone وWeaviate وQdrant وChroma.

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

Milvus هو أحد أكثر الخيارات مفتوحة المصدر شيوعًا من بين العديد من قواعد البيانات المتجهة. يقدم هذا المنشور Milvus ويستكشف ممارسة نشر Milvus على AWS EKS.

ما هو ميلفوس؟

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

تم إصدار Milvus تحت رخصة أباتشي مفتوحة المصدر 2.0 في أكتوبر 2019. وهو حاليًا مشروع تخرج في إطار مؤسسة LF AI & Data Foundation. في وقت كتابة هذه المدونة، كانت Milvus قد وصلت إلى أكثر من 50 مليون عملية تنزيل من Docker draw وتم استخدامها من قبل العديد من العملاء، مثل NVIDIA و AT&T و IBM و eBay و Shopee و Walmart.

الميزات الرئيسية لـ Milvus

كقاعدة بيانات متجهة سحابية أصلية، يتميز ميلفوس بالميزات الرئيسية التالية:

  • أداء عالٍ وبحث في أجزاء من الثانية على مجموعات بيانات متجهات بمليار ثانية.

  • دعم متعدد اللغات وسلسلة أدوات.

  • قابلية التوسع الأفقي والموثوقية العالية حتى في حالة حدوث عطل.

  • بحث هجين يتحقق من خلال إقران التصفية القياسية بالبحث عن التشابه المتجه.

بنية ميلفوس

تتبع Milvus مبدأ الفصل بين تدفق البيانات وتدفق التحكم. ينقسم النظام إلى أربعة مستويات، كما هو موضح في الرسم البياني:

Milvus Architecture بنية ميلفوس

الشكل 2 بنية ميلفوس

  • طبقة الوصول: تتألف طبقة الوصول من مجموعة من الوكلاء عديمي الحالة وتعمل كطبقة أمامية للنظام ونقطة نهاية للمستخدمين.

  • خدمة المنسق: تقوم خدمة المنسق بتعيين المهام للعقد العاملة.

  • العقد العاملة: العقد العاملة هي عبارة عن منفّذات غبية تتبع التعليمات من خدمة المنسق وتنفذ أوامر DML/DDL التي يتم تشغيلها من قبل المستخدم.

  • التخزين: التخزين مسؤول عن ثبات البيانات. وهو يتألف من التخزين الوصفية ووسيط السجل وتخزين الكائنات.

خيارات نشر ميلفوس

يدعم ميلفوس ثلاثة أوضاع تشغيل: ميلفوس لايت، ومستقل، وموزع.

  • ميلفوس لايت هي مكتبة بايثون يمكن استيرادها إلى التطبيقات المحلية. وباعتبارها نسخة خفيفة الوزن من Milvus، فهي مثالية للنماذج الأولية السريعة في دفاتر Jupyter Notebooks أو التشغيل على الأجهزة الذكية ذات الموارد المحدودة.

  • Milvus Standalone هو عبارة عننشر خادم أحادي الجهاز. إذا كان لديك عبء عمل إنتاجي ولكنك تفضل عدم استخدام Kubernetes، فإن تشغيل Milvus Standalone على جهاز واحد بذاكرة كافية يعد خيارًا جيدًا.

  • يمكن نشرMilvus Distributed على مجموعات Kubernetes. وهو يدعم مجموعات بيانات أكبر، وتوافر أعلى، وقابلية أعلى للتوسع، وهو أكثر ملاءمة لبيئات الإنتاج.

تم تصميم Milvus منذ البداية لدعم Kubernetes، ويمكن نشره بسهولة على AWS. يمكننا استخدام خدمة Amazon Elastic Kubernetes Service (Amazon EKS) كخدمة Kubernetes مُدارة، وAmazon S3 كتخزين كائنات، وAmazon Managed Streaming for Apache Kafka (Amazon MSK) كتخزين الرسائل، وAmazon Elastic Load Balancing (Amazon ELB) كموازن تحميل لبناء مجموعة قواعد بيانات Milvus موثوقة ومرنة.

بعد ذلك، سنقدم إرشادات خطوة بخطوة حول نشر مجموعة Milvus باستخدام EKS والخدمات الأخرى.

نشر Milvus على AWS EKS

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

سنستخدم AWS CLI لإنشاء مجموعة EKS ونشر قاعدة بيانات Milvus. المتطلبات الأساسية التالية مطلوبة:

  • جهاز كمبيوتر / جهاز Mac أو مثيل Amazon EC2 مع تثبيت AWS CLI وتهيئته بالأذونات المناسبة. يتم تثبيت أدوات AWS CLI بشكل افتراضي إذا كنت تستخدم Amazon Linux 2 أو Amazon Linux 2023.

  • أدوات EKS مثبتة، بما في ذلك Helm و Kubectl و eksctl، إلخ.

  • دلو أمازون S3.

  • مثيل أمازون MSK.

اعتبارات عند إنشاء MSK

  • يعتمد أحدث إصدار مستقر من ميلفوس (الإصدار 2.3.13) على خاصية autoCreateTopics الخاصة بكافكا. لذلك عند إنشاء MSK، نحتاج إلى استخدام تكوين مخصص وتغيير الخاصية auto.create.topics.enable من الخاصية الافتراضية false إلى true. بالإضافة إلى ذلك، لزيادة إنتاجية الرسائل في MSK، يوصى بزيادة قيم message.max.bytes و replica.fetch.max.bytes. راجع تكوينات MSK المخصصة للحصول على التفاصيل.
auto.create.topics.enable=true
message.max.bytes=10485880
replica.fetch.max.bytes=20971760

Figure 3 Security settings enable SASL SCRAM authentication.png الشكل 3: إعدادات الأمان تمكين مصادقة SASL SCRAM.png

الشكل 3: إعدادات الأمان: تمكين مصادقة SASL/SCRAM

  • نحن بحاجة إلى تمكين الوصول إلى مجموعة أمان MSK من مجموعة أمان مجموعة EKS العنقودية أو نطاق عناوين IP.

إنشاء مجموعة EKS

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

eksctl هي أداة سطر أوامر بسيطة لإنشاء وإدارة مجموعات Kubernetes على Amazon EKS. يوفر أسرع وأسهل طريقة لإنشاء مجموعة جديدة مع عقد لأمازون EKS. راجع موقع eksctl على الويب لمزيد من المعلومات.

  1. أولاً، قم بإنشاء ملف eks_cluster.yaml باستخدام مقتطف الشفرة التالي. استبدل cluster-name باسم المجموعة الخاصة بك، واستبدل region-code بمنطقة AWS حيث تريد إنشاء المجموعة واستبدل private-subnet-idx بالشبكات الفرعية الخاصة بك. ملاحظة: يقوم ملف التكوين هذا بإنشاء مجموعة EKS في VPC موجودة عن طريق تحديد الشبكات الفرعية الخاصة. إذا كنت ترغب في إنشاء VPC جديد، فقم بإزالة تكوين VPC والشبكات الفرعية الخاصة بك، ثم سيقوم eksctl تلقائيًا بإنشاء واحدة جديدة.
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
 name: <cluster-name>
 region: <region-code>
 version: "1.26"

iam:
 withOIDC: true

 serviceAccounts:
 - metadata:
     name: aws-load-balancer-controller
     namespace: kube-system
   wellKnownPolicies:
     awsLoadBalancerController: true
 - metadata:
     name: milvus-s3-access-sa
     # if no namespace is set, "default" will be used;
     # the namespace will be created if it doesn't exist already
     namespace: milvus
     labels: {aws-usage: "milvus"}
   attachPolicyARNs:
   - "arn:aws:iam::aws:policy/AmazonS3FullAccess"

# Use existed VPC to create EKS.
# If you don't config vpc subnets, eksctl will automatically create a brand new VPC
vpc:
 subnets:
   private:
     us-west-2a: { id: <private-subnet-id1> }
     us-west-2b: { id: <private-subnet-id2> }
     us-west-2c: { id: <private-subnet-id3> }

managedNodeGroups:
 - name: ng-1-milvus
   labels: { role: milvus }
   instanceType: m6i.2xlarge
   desiredCapacity: 3
   privateNetworking: true
  
addons:
- name: vpc-cni # no version is specified so it deploys the default version
 attachPolicyARNs:
   - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
- name: coredns
 version: latest # auto discovers the latest available
- name: kube-proxy
 version: latest
- name: aws-ebs-csi-driver
 wellKnownPolicies:      # add IAM and service account
   ebsCSIController: true
  1. بعد ذلك، قم بتشغيل الأمر eksctl لإنشاء مجموعة EKS.
eksctl create cluster -f eks_cluster.yaml

سيقوم هذا الأمر بإنشاء الموارد التالية:

  • مجموعة عقدة EKS بالإصدار المحدد.

  • مجموعة عُقَد مُدارة مع ثلاث مثيلات EC2 كبيرة m6i.2xlarge.

  • موفر هوية IAM OIDC وحساب خدمة يسمى aws-load-balancer-controller ، والذي سنستخدمه لاحقًا عند تثبيت وحدة تحكم AWS Load Balancer Controller.

  • مساحة اسم milvus وحساب خدمة milvus-s3-access-sa ضمن مساحة الاسم هذه. سيتم استخدام مساحة الاسم هذه لاحقًا عند تكوين S3 كمخزن كائنات لـ Milvus.

    ملاحظة: للتبسيط، يتم منح milvus-s3-access-sa هنا أذونات وصول S3 كاملة إلى S3. في عمليات نشر الإنتاج، يوصى باتباع مبدأ الامتيازات الأقل ومنح حق الوصول إلى دلو S3 المحدد المستخدم لـ Milvus فقط.

  • إضافات متعددة، حيث vpc-cni ، coredns ، kube-proxy هي إضافات أساسية مطلوبة من قبل EKS. aws-ebs-csi-driver هو برنامج تشغيل AWS EBS CSI الذي يسمح لمجموعات EKS بإدارة دورة حياة وحدات تخزين Amazon EBS.

الآن، نحتاج فقط إلى انتظار اكتمال إنشاء المجموعة.

انتظر حتى يكتمل إنشاء المجموعة. أثناء عملية إنشاء المجموعة، سيتم إنشاء الملف kubeconfig أو تحديثه تلقائيًا. يمكنك أيضًا تحديثه يدويًا عن طريق تشغيل الأمر التالي. تأكد من استبدال region-code بمنطقة AWS حيث يتم إنشاء الكتلة الخاصة بك، واستبدال cluster-name باسم الكتلة الخاصة بك.

aws eks update-kubeconfig --region <region-code> --name <cluster-name>

بمجرد إنشاء المجموعة، يمكنك عرض العقد عن طريق تشغيل:

kubectl get nodes -A -o wide
  1. قم بإنشاء ebs-sc StorageClass تم تكوينه باستخدام GP3 كنوع التخزين، وقم بتعيينه كنوع التخزين الافتراضي. يستخدم Milvus موقع etcd كتخزين تعريفي ويحتاج إلى فئة التخزين هذه لإنشاء وإدارة PVCs.
cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
 name: ebs-sc
 annotations:
   storageclass.kubernetes.io/is-default-class: "true"
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
 type: gp3
EOF

بعد ذلك، قم بتعيين gp2 StorageClass الأصلي إلى غير افتراضي:

kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
  1. تثبيت وحدة تحكم AWS Load Balancer Controller. سنستخدم وحدة التحكم هذه لاحقًا لخدمة Milvus وخدمة Attu Ingress، لذا دعنا نثبتها مسبقًا.
  • أولاً، قم بإضافة الريبو eks-charts وتحديثه.
helm repo add eks https://aws.github.io/eks-charts
helm repo update
  • بعد ذلك، قم بتثبيت وحدة تحكم AWS Load Balancer Controller. استبدل cluster-name باسم مجموعتك. تم إنشاء حساب الخدمة المسمى aws-load-balancer-controller بالفعل عندما أنشأنا مجموعة EKS في الخطوات السابقة.
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
 -n kube-system \
 --set clusterName=<cluster-name> \
 --set serviceAccount.create=false \
 --set serviceAccount.name=aws-load-balancer-controller
  • تحقق مما إذا تم تثبيت وحدة التحكم بنجاح.
kubectl get deployment -n kube-system aws-load-balancer-controller
  • يجب أن يبدو الناتج كما يلي:
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
aws-load-balancer-controller   2/2     2            2           12m

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

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

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

  1. أولاً، قم بإضافة ريبو Milvus Helm وتحديثه.
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
  1. قم بإنشاء ملف milvus_cluster.yaml مع مقتطف الشفرة التالي. يقوم هذا المقتطف البرمجي بتخصيص تكوين ملف Milvus، مثل تكوين Amazon S3 كمخزن للكائنات و Amazon MSK كقائمة انتظار للرسائل. سنقدم توضيحات مفصلة وإرشادات التكوين لاحقًا.
#####################################
# Section 1
#
# Configure S3 as the Object Storage
#####################################

# Service account
# - this service account are used by External S3 access
serviceAccount:
  create: false
  name: milvus-s3-access-sa

# Close in-cluster minio
minio:
  enabled: false

# External S3
# - these configs are only used when `externalS3.enabled` is true
externalS3:
  enabled: true
  host: "s3.<region-code>.amazonaws.com"
  port: "443"
  useSSL: true
  bucketName: "<bucket-name>"
  rootPath: "<root-path>"
  useIAM: true
  cloudProvider: "aws"
  iamEndpoint: ""

#####################################
# Section 2
#
# Configure MSK as the Message Storage
#####################################

# Close in-cluster pulsar
pulsar:
  enabled: false

# External kafka
# - these configs are only used when `externalKafka.enabled` is true
externalKafka:
  enabled: true
  brokerList: "<broker-list>"
  securityProtocol: SASL_SSL
  sasl:
    mechanisms: SCRAM-SHA-512
    username: "<username>"
    password: "<password>"
    
#####################################
# Section 3
#
# Expose the Milvus service to be accessed from outside the cluster (LoadBalancer service).
# or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
#####################################
service:
  type: LoadBalancer
  port: 19530
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: external #AWS Load Balancer Controller fulfills services that has this annotation
    service.beta.kubernetes.io/aws-load-balancer-name : milvus-service #User defined name given to AWS Network Load Balancer
    service.beta.kubernetes.io/aws-load-balancer-scheme: internal # internal or internet-facing, later allowing for public access via internet
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip #The Pod IPs should be used as the target IPs (rather than the node IPs)
    
#####################################
# Section 4
#
# Installing Attu the Milvus management GUI
#####################################
attu:
  enabled: true
  name: attu
  ingress:
    enabled: true
    annotations:
      kubernetes.io/ingress.class: alb # Annotation: set ALB ingress type
      alb.ingress.kubernetes.io/scheme: internet-facing #Places the load balancer on public subnets
      alb.ingress.kubernetes.io/target-type: ip #The Pod IPs should be used as the target IPs (rather than the node IPs)
      alb.ingress.kubernetes.io/group.name: attu # Groups multiple Ingress resources
    hosts:
      -
      
#####################################
# Section 5
#
# HA deployment of Milvus Core Components
#####################################
rootCoordinator:
  replicas: 2
  activeStandby:
    enabled: true  # Enable active-standby when you set multiple replicas for root coordinator
  resources:
    limits:
      cpu: 1
      memory: 2Gi
indexCoordinator:
  replicas: 2
  activeStandby:
    enabled: true  # Enable active-standby when you set multiple replicas for index coordinator
  resources:
    limits:
      cpu: "0.5"
      memory: 0.5Gi
queryCoordinator:
  replicas: 2
  activeStandby:
    enabled: true  # Enable active-standby when you set multiple replicas for query coordinator
  resources:
    limits:
      cpu: "0.5"
      memory: 0.5Gi
dataCoordinator:
  replicas: 2
  activeStandby:
    enabled: true  # Enable active-standby when you set multiple replicas for data coordinator
  resources:
    limits:
      cpu: "0.5"
      memory: 0.5Gi
proxy:
  replicas: 2
  resources:
    limits:
      cpu: 1
      memory: 4Gi

#####################################
# Section 6
#
# Milvus Resource Allocation
#####################################
queryNode:
  replicas: 1
  resources:
    limits:
      cpu: 2
      memory: 8Gi
dataNode:
  replicas: 1
  resources:
    limits:
      cpu: 1
      memory: 4Gi
indexNode:
  replicas: 1
  resources:
    limits:
      cpu: 4
      memory: 8Gi

يحتوي الكود على ستة أقسام. اتبع التعليمات التالية لتغيير التكوينات المقابلة.

القسم 1: تكوين S3 كمخزن للكائنات. يمنح حساب الخدمة (ServiceAccount) ميلفوس حق الوصول إلى S3 (في هذه الحالة، هو milvus-s3-access-sa ، والذي تم إنشاؤه عندما أنشأنا مجموعة EKS). تأكد من استبدال <region-code> بمنطقة AWS حيث توجد مجموعتك. استبدل <bucket-name> باسم دلو S3 الخاص بك و <root-path> بالبادئة الخاصة بدلو S3 (يمكن ترك هذا الحقل فارغًا).

القسم 2: تكوين MSK كمخزن رسائل. استبدل <broker-list> بعناوين نقطة النهاية المطابقة لنوع مصادقة SASL/SCRAM لـ MSK. استبدل <username> و <password> باسم المستخدم وكلمة المرور لحساب MSK. يمكنك الحصول على <broker-list> من معلومات عميل MSK، كما هو موضح في الصورة أدناه.

Figure 4 Configure MSK as the Message Storage of Milvus.png الشكل 4: تكوين MSK كمخزن رسائل لـ Milvus.png

الشكل 4: تكوين MSK كمخزن للرسائل في ملفوس

القسم 3: فضح خدمة ميلفوس وتمكين الوصول من خارج المجموعة. تستخدم نقطة نهاية ميلفوس خدمة من نوع ClusterIP بشكل افتراضي، والتي لا يمكن الوصول إليها إلا داخل مجموعة EKS. إذا لزم الأمر، يمكنك تغييرها إلى نوع LoadBalancer للسماح بالوصول من خارج مجموعة EKS. تستخدم خدمة نوع LoadBalancer من نوع LoadBalancer خدمة Amazon NLB كموازن تحميل. وفقًا لأفضل ممارسات الأمان، يتم تكوين aws-load-balancer-scheme كوضع داخلي افتراضيًا هنا، مما يعني أنه لا يُسمح إلا بالوصول إلى الإنترانت إلى Milvus. انقر لعرض إرشادات تكوين NLB.

القسم 4: قم بتثبيت وتكوين Attu، وهي أداة إدارة ميلفوس مفتوحة المصدر. تحتوي على واجهة مستخدم رسومية بديهية تتيح لك التفاعل بسهولة مع ميلفوس. نقوم بتمكين Attu، وتكوين الدخول باستخدام AWS ALB، وتعيينه على internet-facing بحيث يمكن الوصول إلى Attu عبر الإنترنت. انقر على هذا المستند للحصول على دليل تكوين ALB.

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

ملاحظة: يتطلب النشر متعدد النسخ المتماثلة لمكونات منسق الجذر والاستعلام والبيانات والفهرس تمكين الخيار activeStandby.

القسم 6: ضبط تخصيص الموارد لمكونات ملفوس لتلبية متطلبات أعباء العمل الخاصة بك. يوفر موقع Milvus الإلكتروني أيضًا أداة تحجيم لتوليد اقتراحات تهيئة استنادًا إلى حجم البيانات وأبعاد المتجهات وأنواع الفهارس، إلخ. ويمكنه أيضًا إنشاء ملف تكوين Helm بنقرة واحدة فقط. التكوين التالي هو الاقتراح الذي قدمته الأداة لمليون و1024 متجه بأبعاد 1 مليون متجه ونوع فهرس HNSW.

  1. استخدم Helm لإنشاء Milvus (تم نشره في مساحة الاسم milvus). ملاحظة: يمكنك استبدال <demo> باسم مخصص.
helm install <demo> milvus/milvus -n milvus -f milvus_cluster.yaml
  1. قم بتشغيل الأمر التالي للتحقق من حالة النشر.
kubectl get deployment -n milvus

يوضح الإخراج التالي أن مكونات Milvus كلها متوفرة، ومكونات التنسيق لها نسخ متماثلة متعددة ممكّنة.

NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
demo-milvus-attu         1/1     1            1           5m27s
demo-milvus-datacoord    2/2     2            2           5m27s
demo-milvus-datanode     1/1     1            1           5m27s
demo-milvus-indexcoord   2/2     2            2           5m27s
demo-milvus-indexnode    1/1     1            1           5m27s
demo-milvus-proxy        2/2     2            2           5m27s
demo-milvus-querycoord   2/2     2            2           5m27s
demo-milvus-querynode    1/1     1            1           5m27s
demo-milvus-rootcoord    2/2     2            2           5m27s

الوصول إلى ميلفوس وإدارته

لقد نجحنا حتى الآن في نشر قاعدة بيانات ميلفوس المتجهة. والآن، يمكننا الوصول إلى ميلفوس من خلال نقاط النهاية. يعرض Milvus نقاط النهاية عبر خدمات Kubernetes. يعرض Attu نقاط النهاية عبر Kubernetes Ingress.

الوصول إلى نقاط نهاية ميلفوس

قم بتشغيل الأمر التالي للحصول على نقاط نهاية الخدمة:

kubectl get svc -n milvus

يمكنك عرض العديد من الخدمات. يدعم Milvus منفذين، المنفذ 19530 والمنفذ 9091:

  • المنفذ 19530 مخصص لـ gRPC و RESTful API. وهو المنفذ الافتراضي عند الاتصال بخادم Milvus باستخدام حزم Milvus SDKs أو عملاء HTTP مختلفين.
  • المنفذ 9091 هو منفذ إدارة لجمع المقاييس، وتوصيف pprof، واختبارات الصحة داخل Kubernetes.

توفر خدمة demo-milvus نقطة نهاية الوصول إلى قاعدة البيانات، والتي تُستخدم لإنشاء اتصال من العملاء. ويستخدم NLB كموازن تحميل الخدمة. يمكنك الحصول على نقطة نهاية الخدمة من العمود EXTERNAL-IP.

NAME                     TYPE           CLUSTER-IP       EXTERNAL-IP                                               PORT(S)                          AGE
demo-etcd                ClusterIP      172.20.103.138   <none>                                                    2379/TCP,2380/TCP                62m
demo-etcd-headless       ClusterIP      None             <none>                                                    2379/TCP,2380/TCP                62m
demo-milvus              LoadBalancer   172.20.219.33    milvus-nlb-xxxx.elb.us-west-2.amazonaws.com               19530:31201/TCP,9091:31088/TCP   62m
demo-milvus-datacoord    ClusterIP      172.20.214.106   <none>                                                    13333/TCP,9091/TCP               62m
demo-milvus-datanode     ClusterIP      None             <none>                                                    9091/TCP                         62m
demo-milvus-indexcoord   ClusterIP      172.20.106.51    <none>                                                    31000/TCP,9091/TCP               62m
demo-milvus-indexnode    ClusterIP      None             <none>                                                    9091/TCP                         62m
demo-milvus-querycoord   ClusterIP      172.20.136.213   <none>                                                    19531/TCP,9091/TCP               62m
demo-milvus-querynode    ClusterIP      None             <none>                                                    9091/TCP                         62m
demo-milvus-rootcoord    ClusterIP      172.20.173.98    <none>                                                    53100/TCP,9091/TCP               62m

إدارة ميلفوس باستخدام أتو

كما هو موضح من قبل، قمنا بتثبيت Attu لإدارة ميلفوس. قم بتشغيل الأمر التالي للحصول على نقطة النهاية:

kubectl get ingress -n milvus

يمكنك رؤية مدخل يسمى demo-milvus-attu ، حيث العمود ADDRESS هو عنوان URL الخاص بالوصول.

NAME            CLASS   HOSTS   ADDRESS                                     PORTS   AGE
demo-milvus-attu   <none>   *       k8s-attu-xxxx.us-west-2.elb.amazonaws.com   80      27s

افتح عنوان الدخول في المتصفح وشاهد الصفحة التالية. انقر على اتصال لتسجيل الدخول.

Figure 5 Log in to your Attu account.png الشكل 5 تسجيل الدخول إلى حساب أتو الخاص بك.png

الشكل 5: تسجيل الدخول إلى حساب أتو الخاص بك

بعد تسجيل الدخول، يمكنك إدارة قواعد بيانات ملفوس من خلال أتو.

Figure 6 The Attu interface.png الشكل 6: واجهة أتو. png

الشكل 6: واجهة أتو

اختبار قاعدة بيانات ميلفوس المتجهة

سنستخدم كود مثال ميلفوس لاختبار ما إذا كانت قاعدة بيانات ميلفوس تعمل بشكل صحيح. أولاً، قم بتحميل كود المثال hello_milvus.py باستخدام الأمر التالي:

wget https://raw.githubusercontent.com/milvus-io/pymilvus/master/examples/hello_milvus.py

قم بتعديل المضيف في كود المثال إلى نقطة نهاية خدمة ميلفوس.

print(fmt.format("start connecting to Milvus"))
connections.connect("default", host="milvus-nlb-xxx.elb.us-west-2.amazonaws.com", port="19530")

قم بتشغيل الكود:

python3 hello_milvus.py

إذا أرجع النظام النتيجة التالية، فهذا يشير إلى أن ميلفوس يعمل بشكل طبيعي.

=== start connecting to Milvus     ===
Does collection hello_milvus exist in Milvus: False
=== Create collection `hello_milvus` ===
=== Start inserting entities       ===
Number of entities in Milvus: 3000
=== Start Creating index IVF_FLAT  ===
=== Start loading                  ===

الخاتمة

يقدم هذا المنشور Milvus، إحدى أكثر قواعد البيانات المتجهة مفتوحة المصدر شيوعًا، ويوفر دليلًا حول نشر Milvus على AWS باستخدام الخدمات المدارة مثل Amazon EKS و S3 و MSK و ELB لتحقيق مرونة وموثوقية أكبر.

كمكون أساسي لأنظمة GenAI المختلفة، لا سيما الجيل المعزز للاسترجاع (RAG)، يدعم Milvus ويتكامل مع مجموعة متنوعة من نماذج وأطر عمل GenAI السائدة، بما في ذلك Amazon Sagemaker وPyTorch وPyTorch و HuggingFace وLlamaIndex وLangChain. ابدأ رحلة ابتكار GenAI مع Milvus اليوم!

المراجع

Like the article? Spread the word

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