Cara Memulai dengan Milvus
Cara memulai dengan Milvus
Terakhir diperbarui Januari 2025
Kemajuan dalam Model Bahasa Besar(Large LanguageModels/LLMs) dan meningkatnya volume data membutuhkan infrastruktur yang fleksibel dan dapat diskalakan untuk menyimpan informasi dalam jumlah yang sangat besar, seperti basis data. Namun, database tradisional dirancang untuk menyimpan data tabular dan terstruktur, sementara informasi yang biasanya berguna untuk memanfaatkan kekuatan LLM yang canggih dan algoritme pencarian informasi tidak terstruktur, seperti teks, gambar, video, atau audio.
Basis data vektor adalah sistem basis data yang dirancang khusus untuk data yang tidak terstruktur. Dengan database vektor, kita tidak hanya dapat menyimpan data tidak terstruktur dalam jumlah besar, tetapi juga dapat melakukan pencarian vektor. Basis data vektor memiliki metode pengindeksan yang canggih seperti Inverted File Index (IVFFlat) atau Hierarchical Navigable Small World(HNSW) untuk melakukan pencarian vektor yang cepat dan efisien serta proses pengambilan informasi.
Milvus adalah basis data vektor sumber terbuka yang dapat kita gunakan untuk memanfaatkan semua fitur bermanfaat yang ditawarkan oleh basis data vektor. Berikut adalah apa yang akan kita bahas dalam artikel ini:
Apa itu Milvus?
Milvus adalah basis data vektor sumber terbuka yang memungkinkan kita menyimpan data tidak terstruktur dalam jumlah besar dan melakukan pencarian vektor dengan cepat dan efisien. Milvus sangat berguna untuk banyak aplikasi GenAI yang populer, seperti sistem rekomendasi, chatbot yang dipersonalisasi, deteksi anomali, pencarian gambar, pemrosesan bahasa alami, dan retrieval augmented generation(RAG).
Ada beberapa keuntungan yang bisa Anda dapatkan dengan menggunakan Milvus sebagai database vektor:
Milvus menawarkan beberapa opsi penerapan yang dapat Anda pilih tergantung pada kasus penggunaan dan ukuran aplikasi yang ingin Anda bangun.
Milvus mendukung beragam metode pengindeksan untuk memenuhi berbagai kebutuhan data dan kinerja, termasuk opsi dalam memori seperti FLAT, IVFFlat, HNSW, dan SCANN, varian terkuantisasi untuk efisiensi memori, DiskANN on-disk untuk set data besar, dan indeks yang dioptimalkan untuk GPU seperti GPU_CAGRA, GPU_IVF_FLAT, dan GPU_IVF_PQ untuk pencarian yang dipercepat dan hemat memori.
Milvus juga menawarkan pencarian hibrida, di mana kita dapat menggunakan kombinasi embedding padat, embedding jarang, dan pemfilteran metadata selama operasi pencarian vektor, yang mengarah pada hasil pencarian yang lebih akurat. Selain itu, Milvus 2.5 kini mendukung pencarian teks lengkap dan pencarian vektor secara hibrida, sehingga pencarian Anda menjadi lebih akurat.
Milvus dapat digunakan sepenuhnya di cloud melalui Zilliz Cloud, di mana Anda dapat mengoptimalkan biaya operasional dan kecepatan pencarian vektor berkat empat fitur canggih: cluster logis, streaming dan pemilahan data historis, penyimpanan berjenjang, penskalaan otomatis, dan pemisahan panas-dingin multi-penyewaan.
Ketika menggunakan Milvus sebagai basis data vektor Anda, Anda bisa memilih tiga opsi penerapan yang berbeda, masing-masing dengan kekuatan dan manfaatnya. Kita akan membahas masing-masing opsi di bagian selanjutnya.
Opsi Penerapan Milvus
Kita dapat memilih dari empat opsi penerapan untuk mulai menggunakan Milvus: Milvus Lite, Milvus Standalone, Milvus Distributed, dan Zilliz Cloud (Milvus terkelola). Setiap opsi penerapan dirancang untuk menyesuaikan dengan berbagai skenario dalam kasus penggunaan kami, seperti ukuran data kami, tujuan aplikasi kami, dan skala aplikasi kami.
Milvus Lite
Milvus Lite adalah versi ringan dari Milvus dan cara termudah bagi kita untuk memulai. Pada bagian selanjutnya, kita akan melihat bagaimana kita dapat menjalankan Milvus Lite, dan yang perlu kita lakukan untuk memulai adalah menginstal pustaka Pymilvus dengan pip. Setelah itu, kita bisa menjalankan sebagian besar fungsi inti dari Milvus sebagai basis data vektor.
Milvus Lite sangat cocok untuk pembuatan prototipe cepat atau tujuan pembelajaran dan dapat dijalankan di notebook Jupyter tanpa pengaturan yang rumit. Dalam hal penyimpanan vektor, Milvus Lite cocok untuk menyimpan sekitar satu juta embedding vektor. Karena fitur dan kapasitas penyimpanannya yang ringan, Milvus Lite merupakan opsi penerapan yang sempurna untuk bekerja dengan perangkat edge, seperti mesin pencari dokumen pribadi, deteksi objek di perangkat, dll.
Milvus Standalone
Milvus Standalone adalah penerapan server mesin tunggal yang dikemas dalam citra Docker. Oleh karena itu, yang perlu kita lakukan untuk memulai adalah menginstal Milvus di Docker, lalu memulai kontainer Docker. Kita juga akan melihat implementasi Milvus Standalone secara mendetail di bagian selanjutnya.
Milvus Standalone sangat ideal untuk membangun dan memproduksi aplikasi berskala kecil hingga menengah, karena mampu menyimpan hingga 10 juta embedding vektor. Selain itu, Milvus Standalone menawarkan ketersediaan yang tinggi melalui mode cadangan utama, sehingga sangat dapat diandalkan untuk digunakan dalam aplikasi siap produksi.
Kita juga dapat menggunakan Milvus Standalone, misalnya, setelah melakukan prototipe cepat dan mempelajari fungsi Milvus dengan Milvus Lite, karena Milvus Standalone dan Milvus Lite memiliki API sisi klien yang sama.
Milvus Terdistribusi
Milvus Distributed adalah opsi penerapan yang memanfaatkan arsitektur berbasis cloud, di mana pemasukan dan pengambilan data ditangani secara terpisah, sehingga memungkinkan aplikasi yang sangat skalabel dan efisien.
Untuk menjalankan Milvus Distributed, kita biasanya perlu menggunakan cluster Kubernetes agar kontainer dapat berjalan di banyak mesin dan lingkungan. Penerapan cluster Kubernetes memastikan skalabilitas dan fleksibilitas Milvus Distributed dalam menyesuaikan sumber daya yang dialokasikan tergantung pada permintaan dan beban kerja. Hal ini juga berarti bahwa jika satu bagian gagal, bagian lain dapat mengambil alih, memastikan seluruh sistem tetap tidak terganggu.
Milvus Distributed mampu menangani hingga puluhan miliar penyematan vektor dan dirancang khusus untuk kasus-kasus penggunaan di mana datanya terlalu besar untuk disimpan dalam satu mesin server. Oleh karena itu, opsi penerapan ini sangat cocok untuk klien Enterprise yang melayani basis pengguna yang besar.
Gambar: Kemampuan penyimpanan penyematan vektor dari berbagai opsi penerapan Milvus.
Pada artikel ini, kami akan menunjukkan kepada Anda cara memulai dengan Milvus Lite dan Milvus Standalone, karena Anda bisa memulai dengan cepat dengan kedua metode tersebut tanpa pengaturan yang rumit. Namun, Milvus Distributed lebih rumit untuk disiapkan. Setelah kita menyiapkan Milvus Distributed, kode dan proses logis untuk membuat koleksi, memasukkan data, melakukan pencarian vektor, dan lain-lain mirip dengan Milvus Lite dan Milvus Standalone, karena keduanya menggunakan API sisi klien yang sama.
Selain tiga opsi penerapan yang disebutkan di atas, Anda juga dapat mencoba Milvus terkelola di Zilliz Cloud untuk pengalaman yang lebih mudah. Kami juga akan membahas tentang Zilliz Cloud nanti di artikel ini.
Memulai dengan Milvus Lite
Milvus Lite dapat diimplementasikan langsung dengan Python dengan mengimpor pustaka bernama Pymilvus menggunakan pip. Sebelum menginstal Pymilvus, pastikan bahwa lingkungan Anda memenuhi persyaratan berikut ini:
Ubuntu >= 20.04 (x86_64 dan arm64)
MacOS >= 11.0 (Apple Silicon M1/M2 dan x86_64)
Python 3.7 atau yang lebih baru
Setelah persyaratan ini terpenuhi, Anda dapat menginstal Milvus Lite dan dependensi yang diperlukan untuk demonstrasi menggunakan perintah berikut:
!pip install -U pymilvus
!pip install "pymilvus[model]"
!pip install -U pymilvus
: Perintah ini akan menginstal atau meng-upgrade pustakapymilvus
, SDK Python dari Milvus. Milvus Lite dibundel dengan PyMilvus, jadi satu baris kode ini adalah semua yang Anda butuhkan untuk menginstal Milvus Lite.!pip install "pymilvus[model]"
: Perintah ini menambahkan fitur-fitur canggih dan alat tambahan yang sudah terintegrasi dengan Milvus, termasuk model pembelajaran mesin seperti Hugging Face Transformers, model penyematan Jina AI, dan model pemeringkatan.
Berikut adalah langkah-langkah yang akan kita ikuti dengan Milvus Lite:
Ubah data teks menjadi representasi penyematan menggunakan model penyematan.
Buat skema di database Milvus kita untuk menyimpan data teks dan representasi penyematannya.
Menyimpan dan mengindeks data kita ke dalam skema.
Lakukan pencarian vektor sederhana pada data yang tersimpan.
Gambar: Alur kerja operasi pencarian vektor.
Untuk mengubah data teks menjadi penyematan vektor, kita akan menggunakan model penyematan dari SentenceTransformers yang disebut 'all-MiniLM-L6-v2'. Model penyematan ini mengubah teks kita menjadi penyematan vektor 384 dimensi. Mari muat model, ubah data teks kita, dan kemas semuanya menjadi satu.
from pymilvus import model
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
sentence_transformer_ef = model.dense.SentenceTransformerEmbeddingFunction(
model_name='all-MiniLM-L6-v2',
device='cpu'
)
vectors = sentence_transformer_ef.encode_documents(docs)
data = [ {"id": i, "vector": vectors[i], "text": docs[i]} for i in range(len(vectors)) ]
Selanjutnya, mari kita buat skema untuk menyimpan semua data di atas ke dalam Milvus. Seperti yang dapat Anda lihat di atas, data kita terdiri dari tiga field: ID, vektor, dan teks. Oleh karena itu, kita akan membuat sebuah skema dengan tiga field tersebut.
from pymilvus import MilvusClient, DataType, db, connections
schema = MilvusClient.create_schema(
auto_id=False,
enable_dynamic_field=True,
)
# Add fields to schema
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=384)
schema.add_field(field_name="text", datatype=DataType.VARCHAR, max_length=512)
Dengan Milvus Lite, kita dapat dengan mudah membuat sebuah koleksi pada database tertentu berdasarkan skema yang didefinisikan di atas, serta memasukkan dan mengindeks data ke dalam koleksi tersebut hanya dalam beberapa baris kode.
client = MilvusClient("./milvus_demo.db")
index_params = client.prepare_index_params()
# Add indexes
index_params.add_index(
field_name="vector",
index_type="AUTOINDEX",
metric_type="COSINE"
)
# Create collection
client.create_collection(
collection_name="demo_collection",
schema=schema,
index_params=index_params
)
# Insert data into collection
res = client.insert(
collection_name="demo_collection",
data=data
)
Pada kode di atas, kita membuat koleksi bernama "demo_collection" di dalam database Milvus bernama "milvus_demo". Selanjutnya, kita mengindeks semua data kita ke dalam "demo_collection" yang baru saja kita buat.
Sekarang setelah kita memiliki data di dalam database, kita dapat melakukan pencarian vektor pada data tersebut untuk setiap kueri yang diberikan. Katakanlah kita memiliki pertanyaan: "Siapa Alan Turing?". Kita bisa mendapatkan jawaban yang paling tepat untuk kueri tersebut dengan menerapkan langkah-langkah berikut:
Ubah kueri kita menjadi penyematan vektor menggunakan model penyematan yang sama dengan yang kita gunakan untuk mengubah data dalam database menjadi penyematan.
Hitung kemiripan antara sematan kueri kita dengan sematan setiap entri di dalam basis data dengan menggunakan metrik seperti kemiripan kosinus atau jarak Euclidean.
Ambil entri yang paling mirip sebagai jawaban yang sesuai untuk kueri kita.
Di bawah ini adalah implementasi langkah-langkah di atas dengan Milvus:
query = ["Who is Alan Turing"]
query_embedding = sentence_transformer_ef.encode_queries(query)
# Load collection
client.load_collection(
collection_name="demo_collection"
)
# Vector search
res = client.search(
collection_name="demo_collection",
data=query_embedding,
limit=1,
output_fields=["text"],
)
print(res)
"""
Output:
data: ["[{'id': 1, 'distance': 0.7199002504348755, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.'}}]"]
"""
Dan itu saja! Anda juga dapat mempelajari lebih lanjut tentang fungsi-fungsi lain yang ditawarkan Milvus, seperti mengelola pangkalan data, menyisipkan dan menghapus koleksi, memilih metode pengindeksan yang tepat, dan melakukan pencarian vektor yang lebih canggih dengan pemfilteran metadata dan pencarian hibrida di dokumentasi Milvus.
Memulai dengan Milvus Standalone
Milvus Standalone adalah opsi penerapan di mana semuanya dikemas dalam kontainer Docker. Oleh karena itu, kita perlu menginstal Milvus di Docker dan kemudian memulai kontainer Docker untuk memulai dengan Milvus Standalone.
Sebelum menginstal Milvus Standalone, pastikan perangkat keras dan perangkat lunak Anda memenuhi persyaratan yang dijelaskan di halaman ini. Selain itu, pastikan Anda telah menginstal Docker. Untuk menginstal Docker, lihat halaman ini.
Setelah sistem kita memenuhi persyaratan dan kita telah menginstal Docker, kita dapat melanjutkan dengan instalasi Milvus di Docker menggunakan perintah berikut:
# Download the installation script
$ curl -sfL <https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh> -o standalone_embed.sh
# Start the Docker container
$ bash standalone_embed.sh start
Pada kode di atas, kita juga memulai kontainer Docker dan setelah dimulai, Anda akan mendapatkan keluaran serupa seperti di bawah ini:
Gambar: Pesan setelah kontainer Docker berhasil dimulai.
Setelah menjalankan skrip instalasi "standalone_embed.sh" di atas, kontainer Docker bernama "milvus" dimulai pada port 19530. Oleh karena itu, kita dapat membuat basis data baru serta mengakses semua hal yang berkaitan dengan basis data Milvus dengan menunjuk ke port ini saat membuat koneksi.
Katakanlah kita ingin membuat sebuah database bernama "milvus_demo", serupa dengan apa yang telah kita lakukan di Milvus Lite di atas. Kita dapat melakukannya sebagai berikut:
conn = connections.connect(host="127.0.0.1", port=19530)
database = db.create_database("milvus_demo")
client = MilvusClient(
uri="<http://localhost:19530>",
token="root:Milvus",
db_name="milvus_demo"
)
Selanjutnya, Anda dapat memverifikasi apakah database yang baru dibuat bernama "milvus_demo" benar-benar ada di dalam instans Milvus Anda dengan mengakses Milvus Web UI. Seperti namanya, Milvus Web UI adalah antarmuka pengguna grafis yang disediakan oleh Milvus untuk mengamati statistik dan metrik komponen, memeriksa daftar dan detail basis data, koleksi, dan konfigurasi. Anda dapat mengakses Milvus Web UI setelah Anda memulai kontainer Docker di atas di http://127.0.0.1:9091/webui/.
Jika Anda mengakses tautan di atas, Anda akan melihat halaman arahan seperti ini:
Di bawah tab "Collections", Anda akan melihat bahwa basis data "milvus_demo" telah berhasil dibuat. Seperti yang Anda lihat, Anda juga dapat memeriksa hal-hal lain seperti daftar koleksi, konfigurasi, kueri yang telah Anda lakukan, dll., dengan UI Web ini.
Sekarang kita dapat melakukan segala sesuatu persis seperti yang telah kita lihat di bagian Milvus Lite di atas. Mari kita buat sebuah koleksi bernama "demo_collection" di dalam database "milvus_demo" yang terdiri dari tiga field, sama seperti apa yang telah kita lihat di bagian Milvus Lite sebelumnya. Kemudian, kita akan memasukkan data kita ke dalam koleksi tersebut.
index_params = client.prepare_index_params()
# Add indexes
index_params.add_index(
field_name="vector",
index_type="AUTOINDEX",
metric_type="COSINE"
)
# Create collection
client.create_collection(
collection_name="demo_collection",
schema=schema,
index_params=index_params
)
# Insert data into collection
res = client.insert(
collection_name="demo_collection",
data=data
)
Kode untuk melakukan operasi pencarian vektor juga sama dengan Milvus Lite, seperti yang dapat Anda lihat pada kode di bawah ini:
query = ["Who is Alan Turing"]
query_embedding = sentence_transformer_ef.encode_queries(query)
# Load collection
client.load_collection(
collection_name="demo_collection"
)
# Vector search
res = client.search(
collection_name="demo_collection",
data=query_embedding,
limit=1,
output_fields=["text"],
)
print(res)
"""
Output:
data: ["[{'id': 1, 'distance': 0.7199004292488098, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.'}}]"]
"""
Selain menggunakan Docker, Anda juga dapat menggunakan Milvus Standalone dengan Docker Compose (untuk Linux) dan Docker Desktop (untuk Windows).
Ketika kita tidak menggunakan instans Milvus lagi, kita dapat menghentikan Milvus Standalone dengan perintah berikut:
$ bash standalone_embed.sh stop
Milvus yang Dikelola Sepenuhnya
Cara alternatif untuk memulai dengan Milvus adalah melalui infrastruktur berbasis cloud asli di Zilliz Cloud, di mana Anda bisa mendapatkan pengalaman yang bebas repot dan 10x lebih cepat.
Zilliz Cloud menawarkan cluster khusus dengan lingkungan dan sumber daya khusus untuk mendukung aplikasi AI Anda. Karena ini adalah database berbasis cloud yang dibangun di atas Milvus, kami tidak perlu mengatur dan mengelola infrastruktur lokal. Zilliz Cloud juga menyediakan fitur-fitur yang lebih canggih, seperti pemisahan antara penyimpanan vektor dan komputasi, pencadangan data ke sistem penyimpanan objek yang populer seperti S3, dan cache data untuk mempercepat operasi pencarian dan pengambilan vektor.
Namun, satu hal yang perlu dipertimbangkan ketika mempertimbangkan layanan berbasis cloud adalah biaya operasional. Dalam banyak kasus, kita masih perlu membayar bahkan ketika cluster dalam keadaan diam tanpa ada aktivitas pengambilan data atau pencarian vektor. Jika Anda ingin mengoptimalkan biaya operasional dan kinerja aplikasi Anda lebih jauh, Zilliz Cloud Serverless akan menjadi pilihan yang tepat.
Gambar: Manfaat utama menggunakan Zilliz Cloud Serverless.
Zilliz Cloud Serverless tersedia di penyedia cloud utama seperti AWS, Azure, dan GCP. Ini menawarkan fitur seperti harga pay-as-you-go, yang berarti Anda hanya membayar ketika Anda menggunakan cluster.
Zilliz Cloud Serverless juga mengimplementasikan teknologi canggih seperti cluster logis, penskalaan otomatis, penyimpanan berjenjang, pemisahan streaming dan data historis, dan pemisahan data panas-dingin. Fitur-fitur ini memungkinkan Zilliz Cloud Serverless mencapai penghematan biaya hingga 50x lipat dan operasi pencarian vektor yang lebih cepat sekitar 10x lipat dibandingkan dengan Milvus dalam memori.
Gambar: Ilustrasi penyimpanan berjenjang dan pemisahan data panas-dingin.
Jika Anda ingin memulai dengan Zilliz Cloud Serverless, lihat halaman ini untuk informasi lebih lanjut.
Kesimpulan
Milvus menonjol sebagai database vektor serbaguna dan kuat yang dirancang untuk memenuhi tantangan dalam mengelola data yang tidak terstruktur dan melakukan operasi pencarian vektor yang cepat dan efisien dalam aplikasi AI modern. Dengan opsi penerapan seperti Milvus Lite untuk pembuatan prototipe cepat, Milvus Standalone untuk aplikasi skala kecil hingga menengah, dan Milvus Distributed untuk skalabilitas tingkat perusahaan, Milvus menawarkan fleksibilitas yang sesuai dengan ukuran dan kompleksitas proyek apa pun.
Selain itu, Zilliz Cloud Serverless memperluas kemampuan Milvus ke dalam cloud dan menyediakan model pay-as-you-go yang hemat biaya sehingga tidak memerlukan infrastruktur lokal. Dengan fitur-fitur canggih seperti penyimpanan berjenjang dan penskalaan otomatis, Zilliz Cloud Serverless memastikan operasi pencarian vektor yang lebih cepat sekaligus mengoptimalkan biaya.
- Apa itu Milvus?
- Opsi Penerapan Milvus
- Memulai dengan Milvus Lite
- Memulai dengan Milvus Standalone
- Milvus yang Dikelola Sepenuhnya
- Kesimpulan
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