🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
  • Home
  • Blog
  • Cara Menyebarkan Basis Data Vektor Milvus Sumber Terbuka di Amazon EKS

Cara Menyebarkan Basis Data Vektor Milvus Sumber Terbuka di Amazon EKS

  • Engineering
August 09, 2024
AWS

Artikel ini awalnya diterbitkan di situs web AWS dan diterjemahkan, disunting, dan diposting ulang di sini dengan izin.

Gambaran Umum Penyematan Vektor dan Basis Data Vektor

Kemunculan Generative AI (GenAI), khususnya model bahasa besar(LLM), telah secara signifikan meningkatkan minat terhadap basis data vektor, menjadikannya sebagai komponen penting dalam ekosistem GenAI. Hasilnya, database vektor diadopsi dalam berbagai kasus penggunaan yang semakin meningkat.

Laporan IDC memprediksi bahwa pada tahun 2025, lebih dari 80% data bisnis tidak akan terstruktur, yang ada dalam format seperti teks, gambar, audio, dan video. Memahami, memproses, menyimpan, dan melakukan kueri terhadap data tak terstruktur dalam jumlah besar ini dalam skala besar menghadirkan tantangan yang signifikan. Praktik umum dalam GenAI dan deep learning adalah mengubah data tak terstruktur menjadi embedding vektor, menyimpan, dan mengindeksnya dalam basis data vektor seperti Milvus atau Zilliz Cloud (Milvus yang dikelola secara penuh) untuk pencarian kemiripan vektor atau kemiripan semantik.

Tapi apa sebenarnya yang dimaksud dengan penyematan vektor? Sederhananya, vektor adalah representasi numerik dari angka floating-point dalam ruang berdimensi tinggi. Jarak antara dua vektor menunjukkan relevansinya: semakin dekat jaraknya, semakin relevan vektor tersebut satu sama lain, dan sebaliknya. Ini berarti bahwa vektor yang mirip berhubungan dengan data asli yang serupa, yang berbeda dengan kata kunci tradisional atau pencarian yang tepat.

How to perform a vector similarity search Cara melakukan pencarian kemiripan vektor

Gambar 1: Cara melakukan pencarian kemiripan vektor

Kemampuan untuk menyimpan, mengindeks, dan mencari sematan vektor adalah fungsionalitas inti dari basis data vektor. Saat ini, basis data vektor utama terbagi dalam dua kategori. Kategori pertama memperluas produk database relasional yang sudah ada, seperti Amazon OpenSearch Service dengan plugin KNN dan Amazon RDS untuk PostgreSQL dengan ekstensi pgvector. Kategori kedua terdiri dari produk database vektor khusus, termasuk contoh-contoh terkenal seperti Milvus, Zilliz Cloud (Milvus yang dikelola sepenuhnya), Pinecone, Weaviate, Qdrant, dan Chroma.

Teknik penyematan dan basis data vektor memiliki aplikasi yang luas di berbagai kasus penggunaan yang digerakkan oleh AI, termasuk pencarian kemiripan gambar, deduplikasi dan analisis video, pemrosesan bahasa alami, sistem rekomendasi, iklan yang ditargetkan, pencarian yang dipersonalisasi, layanan pelanggan yang cerdas, dan deteksi penipuan.

Milvus adalah salah satu opsi sumber terbuka yang paling populer di antara banyak database vektor. Artikel ini memperkenalkan Milvus dan membahas praktik penerapan Milvus di AWS EKS.

Apa itu Milvus?

Milvus adalah basis data vektor sumber terbuka yang sangat fleksibel, andal, dan sangat cepat, serta berasal dari cloud. Milvus mendukung pencarian kemiripan vektor dan aplikasi AI serta berupaya membuat database vektor dapat diakses oleh setiap organisasi. Milvus dapat menyimpan, mengindeks, dan mengelola lebih dari satu miliar embedding vektor yang dihasilkan oleh jaringan syaraf tiruan dan model pembelajaran mesin (ML) lainnya.

Milvus dirilis di bawah Lisensi Apache 2.0 sumber terbuka pada bulan Oktober 2019. Saat ini Milvus merupakan proyek pascasarjana di bawah LF AI & Data Foundation. Pada saat blog ini ditulis, Milvus telah mencapai lebih dari 50 juta unduhan pull Docker dan digunakan oleh banyak pelanggan, seperti NVIDIA, AT&T, IBM, eBay, Shopee, dan Walmart.

Fitur Utama Milvus

Sebagai basis data vektor cloud-native, Milvus menawarkan fitur-fitur utama berikut ini:

  • Performa tinggi dan pencarian milidetik pada kumpulan data vektor berskala miliaran.

  • Dukungan multi-bahasa dan rantai alat.

  • Skalabilitas horizontal dan keandalan yang tinggi bahkan saat terjadi gangguan.

  • Pencarian hibrida, dicapai dengan memasangkan pemfilteran skalar dengan pencarian kemiripan vektor.

Arsitektur Milvus

Milvus mengikuti prinsip memisahkan aliran data dan aliran kontrol. Sistem ini terbagi menjadi empat tingkat, seperti yang ditunjukkan dalam diagram:

Milvus Architecture Arsitektur Milvus

Gambar 2 Arsitektur Milvus

  • Lapisan akses: Lapisan akses terdiri dari sekelompok proksi tanpa kewarganegaraan dan berfungsi sebagai lapisan depan sistem dan titik akhir bagi pengguna.

  • Layanan koordinator: Layanan koordinator memberikan tugas kepada node pekerja.

  • Node pekerja: Node pekerja adalah eksekutor bodoh yang mengikuti instruksi dari layanan koordinator dan menjalankan perintah DML/DDL yang dipicu oleh pengguna.

  • Penyimpanan: Penyimpanan bertanggung jawab atas persistensi data. Ini terdiri dari penyimpanan meta, perantara log, dan penyimpanan objek.

Opsi Penerapan Milvus

Milvus mendukung tiga mode berjalan: Milvus Lite, Standalone, dan Terdistribusi.

  • Milvus Lite adalah pustaka Python yang dapat diimpor ke dalam aplikasi lokal. Sebagai versi ringan dari Milvus, ini sangat ideal untuk pembuatan prototipe cepat di Notebook Jupyter atau berjalan di perangkat pintar dengan sumber daya terbatas.

  • Milvus Standalone adalahpenerapan server dengan satu mesin. Jika Anda memiliki beban kerja produksi tetapi memilih untuk tidak menggunakan Kubernetes, menjalankan Milvus Standalone di satu mesin dengan memori yang cukup adalah pilihan yang baik.

  • Milvus Distributed dapat digunakan pada cluster Kubernetes. Ini mendukung dataset yang lebih besar, ketersediaan yang lebih tinggi, dan skalabilitas, dan lebih cocok untuk lingkungan produksi.

Milvus dirancang sejak awal untuk mendukung Kubernetes, dan dapat dengan mudah digunakan di AWS. Kita dapat menggunakan Amazon Elastic Kubernetes Service (Amazon EKS) sebagai Kubernetes terkelola, Amazon S3 sebagai Object Storage, Amazon Managed Streaming untuk Apache Kafka (Amazon MSK) sebagai Message storage, dan Amazon Elastic Load Balancing (Amazon ELB) sebagai Load Balancer untuk membangun klaster database Milvus yang andal dan elastis.

Selanjutnya, kami akan memberikan panduan langkah demi langkah untuk menerapkan cluster Milvus menggunakan EKS dan layanan lainnya.

Menerapkan Milvus di AWS EKS

Prasyarat

Kita akan menggunakan AWS CLI untuk membuat cluster EKS dan menerapkan database Milvus. Prasyarat berikut ini diperlukan:

  • Instance PC/Mac atau Amazon EC2 dengan AWS CLI terinstal dan dikonfigurasi dengan izin yang sesuai. Alat AWS CLI terinstal secara default jika Anda menggunakan Amazon Linux 2 atau Amazon Linux 2023.

  • Alat-alat EKS terinstal, termasuk Helm, Kubectl, eksctl, dll.

  • Sebuah bucket Amazon S3.

  • Instance MSK Amazon.

Pertimbangan saat membuat MSK

  • Versi stabil terbaru dari Milvus (v2.3.13) bergantung pada fitur autoCreateTopics milik Kafka. Jadi, ketika membuat MSK, kita perlu menggunakan konfigurasi khusus dan mengubah properti auto.create.topics.enable dari default false menjadi true. Selain itu, untuk meningkatkan throughput pesan dari MSK, disarankan agar nilai message.max.bytes dan replica.fetch.max.bytes ditingkatkan. Lihat Konfigurasi MSK khusus untuk detailnya.
auto.create.topics.enable=true
message.max.bytes=10485880
replica.fetch.max.bytes=20971760
  • Milvus tidak mendukung autentikasi berbasis peran IAM MSK. Jadi, saat membuat MSK, aktifkan opsi SASL/SCRAM authentication di konfigurasi keamanan, dan konfigurasikan username dan password di AWS Secrets Manager. Lihat Otentikasi kredensial masuk dengan AWS Secrets Manager untuk detailnya.

Figure 3 Security settings enable SASL SCRAM authentication.png Gambar 3 Pengaturan keamanan mengaktifkan autentikasi SASL SCRAM.png

Gambar 3: Pengaturan keamanan: aktifkan autentikasi SASL/SCRAM

  • Kita perlu mengaktifkan akses ke grup keamanan MSK dari grup keamanan atau rentang alamat IP cluster EKS.

Membuat sebuah klaster EKS

Ada banyak cara untuk membuat cluster EKS, seperti melalui konsol, CloudFormation, eksctl, dll. Tulisan ini akan menunjukkan cara membuat cluster EKS menggunakan eksctl.

eksctl adalah alat bantu baris perintah sederhana untuk membuat dan mengelola klaster Kubernetes di Amazon EKS. Alat ini menyediakan cara tercepat dan termudah untuk membuat klaster baru dengan node untuk Amazon EKS. Lihat situs web eksctl untuk informasi lebih lanjut.

  1. Pertama, buat berkas eks_cluster.yaml dengan cuplikan kode berikut. Ganti cluster-name dengan nama cluster Anda, ganti region-code dengan wilayah AWS tempat Anda ingin membuat cluster dan ganti private-subnet-idx dengan subnet privat Anda. Catatan: File konfigurasi ini membuat cluster EKS di VPC yang sudah ada dengan menentukan subnet privat. Jika Anda ingin membuat VPC baru, hapus konfigurasi VPC dan subnet, lalu eksctl akan secara otomatis membuat VPC baru.
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. Kemudian, jalankan perintah eksctl untuk membuat klaster EKS.
eksctl create cluster -f eks_cluster.yaml

Perintah ini akan membuat sumber daya berikut:

  • Sebuah klaster EKS dengan versi yang ditentukan.

  • Grup simpul terkelola dengan tiga instance EC2 berukuran m6i.2xlarge.

  • Penyedia identitas IAM OIDC dan ServiceAccount bernama aws-load-balancer-controller, yang akan kita gunakan nanti saat menginstal AWS Load Balancer Controller.

  • Ruang nama milvus dan ServiceAccount milvus-s3-access-sa di dalam ruang nama ini. Namespace ini nantinya akan digunakan saat mengonfigurasi S3 sebagai penyimpanan objek untuk Milvus.

    Catatan: Untuk mempermudah, milvus-s3-access-sa di sini diberikan izin akses S3 secara penuh. Dalam penerapan produksi, disarankan untuk mengikuti prinsip hak akses paling sedikit dan hanya memberikan akses ke bucket S3 tertentu yang digunakan untuk Milvus.

  • Beberapa add-on, di mana vpc-cni, coredns, kube-proxy adalah add-on inti yang diperlukan oleh EKS. aws-ebs-csi-driver adalah driver AWS EBS CSI yang memungkinkan cluster EKS mengelola siklus hidup volume Amazon EBS.

Sekarang, kita hanya perlu menunggu pembuatan cluster selesai.

Tunggu hingga pembuatan cluster selesai. Selama proses pembuatan cluster, file kubeconfig akan secara otomatis dibuat atau diperbarui. Anda juga dapat memperbaruinya secara manual dengan menjalankan perintah berikut. Pastikan untuk mengganti region-code dengan wilayah AWS tempat cluster Anda dibuat, dan ganti cluster-name dengan nama cluster Anda.

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

Setelah cluster dibuat, Anda dapat melihat node dengan menjalankannya:

kubectl get nodes -A -o wide
  1. Buat ebs-sc StorageClass yang dikonfigurasi dengan GP3 sebagai jenis penyimpanan, dan atur sebagai StorageClass default. Milvus menggunakan etcd sebagai Meta Storage dan membutuhkan StorageClass ini untuk membuat dan mengelola PVC.
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

Kemudian, atur gp2 StorageClass asli ke non-default:

kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
  1. Instal Pengontrol Penyeimbang Beban AWS. Kita akan menggunakan pengontrol ini nanti untuk Layanan Milvus dan Attu Ingress, jadi mari kita instal terlebih dahulu.
  • Pertama, tambahkan repo eks-charts dan perbarui.
helm repo add eks https://aws.github.io/eks-charts
helm repo update
  • Selanjutnya, instal AWS Load Balancer Controller. Ganti cluster-name dengan nama cluster Anda. ServiceAccount bernama aws-load-balancer-controller sudah dibuat saat kita membuat cluster EKS di langkah sebelumnya.
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
  • Verifikasi apakah pengontrol telah berhasil diinstal.
kubectl get deployment -n kube-system aws-load-balancer-controller
  • Keluarannya akan terlihat seperti ini:
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
aws-load-balancer-controller   2/2     2            2           12m

Menerapkan Cluster Milvus

Milvus mendukung beberapa metode penerapan, seperti Operator dan Helm. Operator lebih sederhana, tetapi Helm lebih langsung dan fleksibel. Kita akan menggunakan Helm untuk menerapkan Milvus dalam contoh ini.

Ketika men-deploy Milvus dengan Helm, Anda dapat menyesuaikan konfigurasinya melalui berkas values.yaml. Klik values.yaml untuk melihat semua opsi. Secara default, Milvus membuat minio dan pulsar dalam cluster sebagai Penyimpanan Objek dan Penyimpanan Pesan. Kita akan membuat beberapa perubahan konfigurasi untuk membuatnya lebih cocok untuk produksi.

  1. Pertama, tambahkan repo Milvus Helm dan perbarui.
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
  1. Buat berkas milvus_cluster.yaml dengan potongan kode berikut. Potongan kode ini menyesuaikan konfigurasi Milvus, seperti mengonfigurasi Amazon S3 sebagai penyimpanan objek dan Amazon MSK sebagai antrean pesan. Kami akan memberikan penjelasan terperinci dan panduan konfigurasi nanti.
#####################################
# 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

Kode ini berisi enam bagian. Ikuti petunjuk berikut ini untuk mengubah konfigurasi yang sesuai.

Bagian 1: Mengonfigurasi S3 sebagai Penyimpanan Objek. ServiceAccount memberikan akses kepada Milvus ke S3 (dalam hal ini, milvus-s3-access-sa, yang dibuat saat kita membuat kluster EKS). Pastikan untuk mengganti <region-code> dengan wilayah AWS tempat cluster Anda berada. Ganti <bucket-name> dengan nama bucket S3 Anda dan <root-path> dengan awalan untuk bucket S3 (bidang ini dapat dikosongkan).

Bagian 2: Mengonfigurasi MSK sebagai Penyimpanan Pesan. Ganti <broker-list> dengan alamat titik akhir yang sesuai dengan jenis autentikasi SASL/SCRAM MSK. Ganti <username> dan <password> dengan nama pengguna dan kata sandi akun MSK. Anda bisa mendapatkan <broker-list> dari informasi klien MSK, seperti yang ditunjukkan pada gambar di bawah ini.

Figure 4 Configure MSK as the Message Storage of Milvus.png Gambar 4 Konfigurasikan MSK sebagai Penyimpanan Pesan Milvus.png

Gambar 4: Mengkonfigurasi MSK sebagai Penyimpanan Pesan Milvus

Bagian 3: Mengekspos layanan Milvus dan mengaktifkan akses dari luar cluster. Endpoint Milvus menggunakan layanan tipe ClusterIP secara default, yang hanya dapat diakses di dalam cluster EKS. Jika diperlukan, Anda dapat mengubahnya menjadi tipe LoadBalancer untuk mengizinkan akses dari luar cluster EKS. Layanan tipe LoadBalancer menggunakan Amazon NLB sebagai penyeimbang beban. Menurut praktik terbaik keamanan, aws-load-balancer-scheme dikonfigurasikan sebagai mode internal secara default di sini, yang berarti hanya akses intranet ke Milvus yang diizinkan. Klik untuk melihat instruksi konfigurasi NLB.

Bagian 4: Menginstal dan mengkonfigurasi Attu, sebuah alat administrasi Milvus yang bersifat open source. Attu memiliki GUI yang intuitif yang memungkinkan Anda berinteraksi dengan Milvus dengan mudah. Kita mengaktifkan Attu, mengonfigurasi akses masuk menggunakan AWS ALB, dan mengaturnya ke tipe internet-facing sehingga Attu dapat diakses melalui Internet. Klik dokumen ini untuk panduan konfigurasi ALB.

Bagian 5: Mengaktifkan penerapan HA pada Komponen Inti Milvus. Milvus berisi beberapa komponen independen dan terpisah. Sebagai contoh, layanan koordinator bertindak sebagai lapisan kontrol, menangani koordinasi untuk komponen Root, Query, Data, dan Index. Proxy di lapisan akses berfungsi sebagai titik akhir akses database. Komponen-komponen ini secara default hanya memiliki 1 replika pod. Menerapkan beberapa replika komponen layanan ini sangat diperlukan untuk meningkatkan ketersediaan Milvus.

Catatan: Penyebaran multi-replika komponen koordinator Root, Query, Data, dan Index membutuhkan opsi activeStandby yang diaktifkan.

Bagian 6: Menyesuaikan alokasi sumber daya untuk komponen Milvus untuk memenuhi kebutuhan beban kerja Anda. Situs web Milvus juga menyediakan alat bantu ukuran untuk menghasilkan saran konfigurasi berdasarkan volume data, dimensi vektor, jenis indeks, dll. Alat ini juga dapat menghasilkan file konfigurasi Helm hanya dengan satu klik. Konfigurasi berikut ini adalah saran yang diberikan oleh alat ini untuk 1 juta 1024 dimensi vektor dan jenis indeks HNSW.

  1. Gunakan Helm untuk membuat Milvus (digunakan dalam namespace milvus). Catatan: Anda dapat mengganti <demo> dengan nama kustom.
helm install <demo> milvus/milvus -n milvus -f milvus_cluster.yaml
  1. Jalankan perintah berikut untuk memeriksa status penyebaran.
kubectl get deployment -n milvus

Output berikut ini menunjukkan bahwa semua komponen Milvus dalam kondisi TERSEDIA, dan komponen koordinasi memiliki beberapa replika yang diaktifkan.

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

Mengakses dan Mengelola Milvus

Sejauh ini, kita telah berhasil men-deploy database vektor Milvus. Sekarang, kita dapat mengakses Milvus melalui titik akhir. Milvus mengekspos titik akhir melalui layanan Kubernetes. Attu mengekspos titik akhir melalui Kubernetes Ingress.

Mengakses titik akhir Milvus

Jalankan perintah berikut untuk mendapatkan titik akhir layanan:

kubectl get svc -n milvus

Anda dapat melihat beberapa layanan. Milvus mendukung dua port, port 19530 dan port 9091:

  • Port 19530 adalah untuk gRPC dan RESTful API. Port ini adalah port default ketika Anda terhubung ke server Milvus dengan SDK Milvus atau klien HTTP yang berbeda.
  • Port 9091 adalah port manajemen untuk pengumpulan metrik, profil pprof, dan probe kesehatan dalam Kubernetes.

Layanan demo-milvus menyediakan titik akhir akses basis data, yang digunakan untuk membuat koneksi dari klien. Layanan ini menggunakan NLB sebagai penyeimbang beban layanan. Anda dapat memperoleh endpoint layanan dari kolom 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

Mengelola Milvus menggunakan Attu

Seperti yang telah dijelaskan sebelumnya, kita telah menginstal Attu untuk mengelola Milvus. Jalankan perintah berikut untuk mendapatkan endpoint:

kubectl get ingress -n milvus

Anda dapat melihat Ingress bernama demo-milvus-attu, di mana kolom ADDRESS adalah URL akses.

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

Buka alamat Ingress di peramban dan lihat halaman berikut. Klik Hubungkan untuk masuk.

Figure 5 Log in to your Attu account.png Gambar 5 Masuk ke akun Attu Anda.png

Gambar 5: Masuk ke akun Attu Anda

Setelah masuk, Anda dapat mengelola basis data Milvus melalui Attu.

Figure 6 The Attu interface.png Gambar 6 Antarmuka Attu.png

Gambar 6: Antarmuka Attu

Menguji basis data vektor Milvus

Kita akan menggunakan contoh kode Milvus untuk menguji apakah database Milvus bekerja dengan baik. Pertama, unduh kode contoh hello_milvus.py menggunakan perintah berikut:

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

Ubah host pada kode contoh ke titik akhir layanan Milvus.

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

Jalankan kode tersebut:

python3 hello_milvus.py

Jika sistem mengembalikan hasil berikut ini, maka ini mengindikasikan bahwa Milvus berjalan dengan normal.

=== 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                  ===

Kesimpulan

Artikel ini memperkenalkan Milvus, salah satu database vektor open-source yang paling populer, dan memberikan panduan untuk menerapkan Milvus di AWS menggunakan layanan terkelola seperti Amazon EKS, S3, MSK, dan ELB untuk mencapai elastisitas dan keandalan yang lebih baik.

Sebagai komponen inti dari berbagai sistem GenAI, khususnya Retrieval Augmented Generation (RAG), Milvus mendukung dan berintegrasi dengan berbagai model dan kerangka kerja GenAI utama, termasuk Amazon Sagemaker, PyTorch, HuggingFace, LlamaIndex, dan LangChain. Mulailah perjalanan inovasi GenAI Anda dengan Milvus hari ini!

Referensi

Like the article? Spread the word

Terus Baca