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

milvus-logo
LFAI
  • Home
  • Blog
  • Memulai dengan klaster Milvus dan K8

Memulai dengan klaster Milvus dan K8

  • Engineering
April 03, 2024
Stephen Batifol

Pengantar

Milvus adalah basis data vektor terdistribusi yang bertujuan untuk menyimpan, mengindeks, dan mengelola vektor penyematan dalam jumlah besar. Kemampuannya untuk mengindeks dan mencari triliunan vektor secara efisien membuat Milvus menjadi pilihan utama untuk beban kerja AI dan pembelajaran mesin.

Kubernetes (K8), di sisi lain, unggul dalam mengelola dan menskalakan aplikasi dalam kontainer. Kubernetes menyediakan fitur-fitur seperti penskalaan otomatis, penyembuhan mandiri, dan penyeimbangan beban, yang sangat penting untuk menjaga ketersediaan dan kinerja yang tinggi dalam lingkungan produksi.

Mengapa Menggunakan Keduanya?

K8 dapat secara otomatis menskalakan cluster Milvus berdasarkan beban kerja. Seiring dengan pertumbuhan data Anda atau peningkatan jumlah kueri, K8 dapat menjalankan lebih banyak instance Milvus untuk menangani beban, sehingga aplikasi Anda tetap responsif.

Salah satu fitur yang menonjol dari K8 adalah penskalaan horizontalnya, yang membuat perluasan cluster Milvus Anda sangat mudah. Seiring dengan pertumbuhan dataset Anda, K8 dengan mudah mengakomodasi pertumbuhan ini, menjadikannya solusi yang mudah dan efisien.

Selain itu, kemampuan untuk menangani kueri juga meningkat secara horizontal dengan K8. Ketika beban kueri meningkat, K8 dapat menggunakan lebih banyak instance Milvus untuk menangani kueri pencarian kemiripan yang meningkat, memastikan respons latensi yang rendah bahkan di bawah beban yang berat.

Prasyarat & Menyiapkan K8

Prasyarat

  • Docker - Pastikan Docker telah terinstal di sistem Anda.

  • Kubernetes - Siapkan cluster Kubernetes. Anda dapat menggunakan minikube untuk pengembangan lokal atau layanan Kubernetes penyedia cloud untuk lingkungan produksi.

  • Helm - Instal Helm, manajer paket untuk Kubernetes, untuk membantu Anda mengelola aplikasi Kubernetes, Anda dapat memeriksa dokumentasi kami untuk mengetahui cara melakukannya https://milvus.io/docs/install_cluster-helm.md

  • Kubectl - Instal kubectl, alat baris perintah untuk berinteraksi dengan cluster Kubernetes, untuk menerapkan aplikasi, memeriksa dan mengelola sumber daya cluster, dan melihat log.

Menyiapkan K8

Setelah menginstal semua yang diperlukan untuk menjalankan klaster K8s, dan jika Anda menggunakan minikube, mulailah klaster Anda dengan:

minikube start

Periksa status klaster K8s Anda dengan:

kubectl cluster-info

Menerapkan Milvus pada K8s

Untuk penerapan ini, kami memilih Milvus dalam mode klaster untuk memanfaatkan kemampuan terdistribusi penuhnya. Kami akan menggunakan Helm, untuk menyederhanakan proses instalasi.

1. Perintah Instalasi Helm

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

Perintah ini menginstal Milvus pada cluster K8s Anda dengan Kafka diaktifkan dan Pulsar dinonaktifkan. Kafka berfungsi sebagai sistem pengiriman pesan dalam Milvus, menangani streaming data di antara berbagai komponen. Menonaktifkan Pulsar dan mengaktifkan Kafka akan menyesuaikan penerapan dengan preferensi dan persyaratan pengiriman pesan spesifik kita.

2. Penerusan Port

Untuk mengakses Milvus dari mesin lokal Anda, buat port forward: kubectl port-forward svc/my-milvus 27017:19530.

Perintah ini memetakan port 19530 dari layanan Milvus svc/my-milvus ke port yang sama pada mesin lokal Anda, sehingga Anda dapat terhubung ke Milvus menggunakan alat lokal. Jika Anda membiarkan port lokal tidak ditentukan (seperti pada :19530), K8 akan mengalokasikan port yang tersedia, membuatnya dinamis. Pastikan Anda mencatat port lokal yang dialokasikan jika Anda memilih metode ini.

3. Memverifikasi Penyebaran:

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

Anda akan melihat daftar pod yang mirip dengan keluaran di atas, semuanya dalam status Running. Ini mengindikasikan bahwa klaster Milvus Anda sudah beroperasi. Secara khusus, cari angka 1/1 di bawah kolom READY, yang menandakan bahwa setiap pod sudah siap dan berjalan. Jika ada pod yang tidak berada dalam status Running, Anda mungkin perlu menyelidiki lebih lanjut untuk memastikan penerapan yang sukses.

Dengan klaster Milvus Anda yang telah diterapkan dan semua komponen telah dikonfirmasi berjalan, Anda sekarang siap untuk melanjutkan ke proses pemasukan dan pengindeksan data. Ini akan melibatkan penyambungan ke instance Milvus Anda, membuat koleksi, dan memasukkan vektor untuk pencarian dan pengambilan.

Pemasukan dan Pengindeksan Data

Untuk mulai menelan dan mengindeks data dalam cluster Milvus, kita akan menggunakan pymilvus SDK. Ada dua opsi instalasi:

  • SDK dasar: pip install pymilvus

  • Untuk penyematan teks yang kaya dan model tingkat lanjut: pip install pymilvus[model]

Saatnya memasukkan data ke dalam klaster kita, kita akan menggunakan pymilvus, Anda dapat menginstal SDK hanya dengan pip install pymilvus atau jika Anda ingin mengekstrak rich text embeddings, Anda juga dapat menggunakan PyMilvus Models dengan menginstal pip install pymilvus[model].

Menghubungkan dan Membuat Koleksi:

Pertama, sambungkan ke instans Milvus Anda menggunakan port yang telah Anda teruskan sebelumnya. Pastikan URI sesuai dengan port lokal yang ditetapkan oleh K8:

from pymilvus import MilvusClient

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

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

Parameter dimension=5 mendefinisikan ukuran vektor untuk koleksi ini, yang penting untuk kemampuan pencarian vektor.

Menyisipkan Data

Berikut ini cara memasukkan kumpulan data awal, di mana setiap vektor mewakili sebuah item, dan bidang warna menambahkan atribut deskriptif:

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)

Kode yang disediakan mengasumsikan bahwa Anda telah membuat koleksi dengan cara Penyiapan Cepat. Seperti ditunjukkan dalam kode di atas,

Data yang akan disisipkan diatur ke dalam daftar kamus, di mana setiap kamus mewakili catatan data, yang disebut sebagai entitas.

Setiap kamus berisi bidang yang tidak ditentukan skema bernama warna.

Setiap kamus berisi kunci yang sesuai dengan bidang yang telah ditentukan sebelumnya dan bidang dinamis.

Masukkan Lebih Banyak Data

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)

Setelah mengisi koleksi, Anda dapat melakukan pencarian kemiripan untuk menemukan vektor yang mendekati vektor kueri. Nilai variabel query_vectors adalah sebuah daftar yang berisi sub-daftar float. Sub-daftar mewakili penyematan vektor 5 dimensi.

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)

Kueri ini mencari 3 vektor teratas yang paling mirip dengan vektor kueri kita, yang menunjukkan kemampuan pencarian Milvus yang kuat.

Copot pemasangan Milvus dari K8

Setelah Anda selesai dengan tutorial ini, silakan hapus instalan Milvus dari cluster K8s Anda dengan:helm uninstall my-milvus.

Perintah ini akan menghapus semua komponen Milvus yang digunakan dalam rilis my-milvus, membebaskan sumber daya cluster.

Kesimpulan

  • Menerapkan Milvus di cluster Kubernetes menunjukkan skalabilitas dan fleksibilitas basis data vektor dalam menangani beban kerja AI dan pembelajaran mesin. Melalui tutorial ini, Anda telah mempelajari dasar-dasar menyiapkan Milvus dengan Helm, membuat koleksi, dan melakukan konsumsi data serta pencarian kemiripan.

  • Menginstal Milvus di cluster Kubernetes dengan Helm seharusnya sangat mudah. Untuk mempelajari lebih dalam tentang penskalaan cluster Milvus untuk kumpulan data yang lebih besar atau beban kerja yang lebih intensif, dokumentasi kami menawarkan panduan terperinci https://milvus.io/docs/scaleout.md

Jangan ragu untuk memeriksa kode di Github, melihat Milvus, bereksperimen dengan berbagai konfigurasi dan kasus penggunaan, dan berbagi pengalaman Anda dengan komunitas dengan bergabung di Discord kami.

Like the article? Spread the word

Terus Baca