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

milvus-logo
LFAI
  • Home
  • Blog
  • Mengapa dan Kapan Anda Membutuhkan Basis Data Vektor yang Dibangun Khusus?

Mengapa dan Kapan Anda Membutuhkan Basis Data Vektor yang Dibangun Khusus?

  • Engineering
August 29, 2023
James Luan

Artikel ini awalnya diterbitkan di AIAI dan diposting ulang di sini dengan izin.

Meningkatnya popularitas ChatGPT dan model bahasa besar (LLM) lainnya telah mendorong munculnya teknologi pencarian vektor, termasuk basis data vektor yang dibuat khusus seperti Milvus dan Zilliz Cloud, perpustakaan pencarian vektor seperti FAISS, dan plugin pencarian vektor yang diintegrasikan dengan basis data tradisional. Namun, memilih solusi terbaik untuk kebutuhan Anda bisa jadi merupakan hal yang menantang. Seperti memilih antara restoran kelas atas dan restoran cepat saji, memilih teknologi pencarian vektor yang tepat tergantung pada kebutuhan dan harapan Anda.

Dalam tulisan ini, saya akan memberikan gambaran umum tentang pencarian vektor dan fungsinya, membandingkan berbagai teknologi pencarian vektor, dan menjelaskan mengapa memilih database vektor yang dibuat khusus sangat penting.

Apa itu pencarian vektor, dan bagaimana cara kerjanya?

Pencarian vektor, juga dikenal sebagai pencarian kemiripan vektor, adalah teknik untuk mengambil k hasil teratas yang paling mirip atau secara semantik terkait dengan vektor kueri yang diberikan di antara kumpulan data vektor yang padat.

Sebelum melakukan pencarian kemiripan, kami memanfaatkan jaringan syaraf untuk mengubah data yang tidak terstruktur, seperti teks, gambar, video, dan audio, menjadi vektor numerik berdimensi tinggi yang disebut vektor penyisipan. Sebagai contoh, kita dapat menggunakan jaringan saraf convolutional ResNet-50 yang telah dilatih sebelumnya untuk mengubah gambar burung menjadi kumpulan embedding dengan 2.048 dimensi. Di sini, kami mencantumkan tiga elemen vektor pertama dan tiga elemen vektor terakhir: [0.1392, 0.3572, 0.1988, ..., 0.2888, 0.6611, 0.2909].

A bird image by Patrice Bouchard Gambar burung oleh Patrice Bouchard

Setelah menghasilkan vektor penyematan, mesin pencari vektor membandingkan jarak spasial antara vektor kueri masukan dengan vektor dalam penyimpanan vektor. Semakin dekat jaraknya dalam ruang, semakin mirip keduanya.

Embedding arithmetic Menanamkan aritmatika

Beberapa teknologi pencarian vektor tersedia di pasaran, termasuk pustaka pembelajaran mesin seperti NumPy dari Python, pustaka pencarian vektor seperti FAISS, plugin pencarian vektor yang dibangun di atas basis data tradisional, dan basis data vektor khusus seperti Milvus dan Zilliz Cloud.

Pustaka pembelajaran mesin

Menggunakan pustaka pembelajaran mesin adalah cara termudah untuk mengimplementasikan pencarian vektor. Sebagai contoh, kita bisa menggunakan NumPy dari Python untuk mengimplementasikan algoritma tetangga terdekat dalam waktu kurang dari 20 baris kode.

import numpy as np

# Function to calculate euclidean distance
def euclidean_distance(a, b):
return np.linalg.norm(a - b)

# Function to perform knn
def knn(data, target, k):
# Calculate distances between target and all points in the data
distances = [euclidean_distance(d, target) for d in data]
# Combine distances with data indices
distances = np.array(list(zip(distances, np.arange(len(data)))))

# Sort by distance
sorted_distances = distances[distances[:, 0].argsort()]

# Get the top k closest indices
closest_k_indices = sorted_distances[:k, 1].astype(int)

# Return the top k closest vectors
return data[closest_k_indices]

Kita dapat menghasilkan 100 vektor dua dimensi dan menemukan tetangga terdekat dari vektor [0,5, 0,5].

# Define some 2D vectors
data = np.random.rand(100, 2)

# Define a target vector
target = np.array([0.5, 0.5])

# Define k
k = 3

# Perform knn
closest_vectors = knn(data, target, k)

# Print the result
print("The closest vectors are:")
print(closest_vectors)

Pustaka pembelajaran mesin, seperti NumPy dari Python, menawarkan fleksibilitas yang tinggi dengan biaya yang rendah. Namun, mereka memiliki beberapa keterbatasan. Misalnya, mereka hanya dapat menangani sejumlah kecil data dan tidak memastikan persistensi data.

Saya hanya merekomendasikan penggunaan NumPy atau pustaka pembelajaran mesin lainnya untuk pencarian vektor ketika:

  • Anda membutuhkan pembuatan prototipe yang cepat.
  • Anda tidak peduli dengan persistensi data.
  • Ukuran data Anda di bawah satu juta, dan Anda tidak memerlukan pemfilteran skalar.
  • Anda tidak membutuhkan kinerja tinggi.

Pustaka pencarian vektor

Pustaka pencarian vektor dapat membantu Anda dengan cepat membangun prototipe sistem pencarian vektor berkinerja tinggi. FAISS adalah contohnya. Ini adalah sumber terbuka dan dikembangkan oleh Meta untuk pencarian kemiripan yang efisien dan pengelompokan vektor yang padat. FAISS dapat menangani koleksi vektor dengan berbagai ukuran, bahkan yang tidak dapat dimuat sepenuhnya ke dalam memori. Selain itu, FAISS menawarkan alat untuk evaluasi dan penyetelan parameter. Meskipun ditulis dalam bahasa C++, FAISS menyediakan antarmuka Python/NumPy.

Di bawah ini adalah kode untuk contoh pencarian vektor berdasarkan FAISS:

import numpy as np
import faiss

# Generate some example data
dimension = 64 # dimension of the vector space
database_size = 10000 # size of the database
query_size = 100 # number of queries to perform
np.random.seed(123) # make the random numbers predictable

# Generating vectors to index in the database (db_vectors)
db_vectors = np.random.random((database_size, dimension)).astype('float32')

# Generating vectors for query (query_vectors)
query_vectors = np.random.random((query_size, dimension)).astype('float32')

# Building the index
index = faiss.IndexFlatL2(dimension) # using the L2 distance metric
print(index.is_trained) # should return True

# Adding vectors to the index
index.add(db_vectors)
print(index.ntotal) # should return database_size (10000)

# Perform a search
k = 4 # we want to see 4 nearest neighbors
distances, indices = index.search(query_vectors, k)

# Print the results
print("Indices of nearest neighbors: \n", indices)
print("\nL2 distances to the nearest neighbors: \n", distances)

Pustaka pencarian vektor seperti FAISS mudah digunakan dan cukup cepat untuk menangani lingkungan produksi skala kecil dengan jutaan vektor. Anda dapat meningkatkan kinerja kueri mereka dengan memanfaatkan kuantisasi dan GPU serta mengurangi dimensi data.

Namun, pustaka ini memiliki beberapa keterbatasan ketika digunakan dalam produksi. Misalnya, FAISS tidak mendukung penambahan dan penghapusan data secara real-time, panggilan jarak jauh, berbagai bahasa, pemfilteran skalar, skalabilitas, atau pemulihan bencana.

Berbagai jenis basis data vektor

Basis data vektor telah muncul untuk mengatasi keterbatasan pustaka di atas, memberikan solusi yang lebih komprehensif dan praktis untuk aplikasi produksi.

Empat jenis database vektor tersedia di medan perang:

  • Database relasional atau kolom yang sudah ada yang menggabungkan plugin pencarian vektor. PG Vector adalah salah satu contohnya.
  • Mesin pencari indeks terbalik tradisional dengan dukungan untuk pengindeksan vektor yang padat. ElasticSearch adalah salah satu contohnya.
  • Basis data vektor ringan yang dibangun di atas pustaka pencarian vektor. Chroma adalah sebuah contoh.
  • Basis data vektor yangdibuat khusus. Jenis basis data ini dirancang khusus dan dioptimalkan untuk pencarian vektor dari bawah ke atas. Basis data vektor yang dibuat khusus biasanya menawarkan fitur yang lebih canggih, termasuk komputasi terdistribusi, pemulihan bencana, dan persistensi data. Milvus adalah contoh utamanya.

Tidak semua basis data vektor dibuat sama. Setiap tumpukan memiliki keunggulan dan keterbatasan yang unik, sehingga kurang lebih cocok untuk aplikasi yang berbeda.

Saya lebih memilih database vektor khusus daripada solusi lain karena merupakan pilihan yang paling efisien dan nyaman, menawarkan banyak manfaat unik. Pada bagian berikut ini, saya akan menggunakan Milvus sebagai contoh untuk menjelaskan alasan preferensi saya.

Manfaat utama dari basis data vektor yang dibuat khusus

Milvus adalah basis data vektor sumber terbuka, terdistribusi, dan dibuat khusus yang dapat menyimpan, mengindeks, mengelola, dan mengambil miliaran vektor penyisipan. Milvus juga merupakan salah satu basis data vektor yang paling populer untuk pengambilan LLM yang ditingkatkan. Sebagai contoh database vektor yang dibuat khusus, Milvus memiliki banyak keunggulan unik dibandingkan database vektor lainnya.

Persistensi Data dan Penyimpanan Hemat Biaya

Meskipun mencegah kehilangan data adalah persyaratan minimum untuk sebuah database, banyak database vektor dengan mesin tunggal dan ringan tidak memprioritaskan keandalan data. Sebaliknya, database vektor terdistribusi yang dibuat khusus seperti Milvus memprioritaskan ketahanan sistem, skalabilitas, dan persistensi data dengan memisahkan penyimpanan dan komputasi.

Selain itu, sebagian besar basis data vektor yang menggunakan indeks perkiraan tetangga terdekat (ANN) membutuhkan banyak memori untuk melakukan pencarian vektor, karena mereka memuat indeks ANN murni ke dalam memori. Namun, Milvus mendukung indeks disk, membuat penyimpanan lebih dari sepuluh kali lebih hemat biaya daripada indeks dalam memori.

Performa Kueri yang Optimal

Basis data vektor khusus memberikan kinerja kueri yang optimal dibandingkan dengan opsi pencarian vektor lainnya. Sebagai contoh, Milvus sepuluh kali lebih cepat dalam menangani kueri dibandingkan plugin pencarian vektor. Milvus menggunakan algoritma ANN dan bukan algoritma pencarian brutal KNN untuk pencarian vektor yang lebih cepat. Selain itu, Milvus memecah indeksnya, mengurangi waktu yang dibutuhkan untuk membangun indeks seiring dengan meningkatnya volume data. Pendekatan ini memungkinkan Milvus untuk dengan mudah menangani miliaran vektor dengan penambahan dan penghapusan data secara real-time. Sebaliknya, add-on pencarian vektor lainnya hanya cocok untuk skenario dengan jumlah data kurang dari puluhan juta dan penambahan serta penghapusan data yang jarang terjadi.

Milvus juga mendukung akselerasi GPU. Pengujian internal menunjukkan bahwa pengindeksan vektor yang dipercepat dengan GPU dapat mencapai 10.000+ QPS saat mencari puluhan juta data, yang setidaknya sepuluh kali lebih cepat daripada pengindeksan CPU tradisional untuk kinerja kueri mesin tunggal.

Keandalan Sistem

Banyak aplikasi menggunakan basis data vektor untuk kueri online yang membutuhkan latensi kueri rendah dan throughput tinggi. Aplikasi-aplikasi ini menuntut failover mesin tunggal pada tingkat menit, dan beberapa bahkan memerlukan pemulihan bencana lintas wilayah untuk skenario kritis. Strategi replikasi tradisional berdasarkan Raft/Paxos mengalami pemborosan sumber daya yang serius dan membutuhkan bantuan untuk memecah data, yang menyebabkan keandalan yang buruk. Sebaliknya, Milvus memiliki arsitektur terdistribusi yang memanfaatkan antrean pesan K8 untuk ketersediaan tinggi, mengurangi waktu pemulihan dan menghemat sumber daya.

Operabilitas dan Pengamatan

Untuk melayani pengguna perusahaan dengan lebih baik, basis data vektor harus menawarkan berbagai fitur tingkat perusahaan untuk operabilitas dan pengamatan yang lebih baik. Milvus mendukung berbagai metode penerapan, termasuk K8s Operator dan Helm chart, docker-compose, dan instalasi pip, sehingga dapat diakses oleh pengguna dengan kebutuhan yang berbeda. Milvus juga menyediakan sistem pemantauan dan alarm berdasarkan Grafana, Prometheus, dan Loki, yang meningkatkan kemampuan observabilitasnya. Dengan arsitektur cloud-native terdistribusi, Milvus merupakan database vektor pertama di industri yang mendukung isolasi multi-tenant, RBAC, pembatasan kuota, dan peningkatan bergulir. Semua pendekatan ini membuat pengelolaan dan pemantauan Milvus menjadi lebih sederhana.

Memulai dengan Milvus dalam 3 langkah sederhana dalam waktu 10 menit

Membangun basis data vektor adalah tugas yang rumit, tetapi menggunakannya semudah menggunakan Numpy dan FAISS. Bahkan siswa yang tidak terbiasa dengan AI dapat mengimplementasikan pencarian vektor berdasarkan Milvus hanya dalam waktu sepuluh menit. Untuk merasakan layanan pencarian vektor yang sangat skalabel dan berkinerja tinggi, ikuti tiga langkah berikut:

Like the article? Spread the word

Terus Baca