Menguji dan Menerapkan Solusi Pencarian Vektor dengan Cepat dengan Milvus 2.0 Bootcamp
Dengan dirilisnya Milvus 2.0, tim telah merombak bootcamp Milvus. Bootcamp yang baru dan lebih baik ini menawarkan panduan yang diperbarui dan contoh kode yang lebih mudah diikuti untuk berbagai kasus penggunaan dan penerapan. Selain itu, versi baru ini diperbarui untuk Milvus 2.0, versi baru dari database vektor tercanggih di dunia.
Uji stres sistem Anda dengan tolok ukur dataset 1 juta dan 100 juta
Direktori benchmark berisi 1 juta dan 100 juta tes benchmark vektor yang mengindikasikan bagaimana sistem Anda akan bereaksi terhadap dataset dengan ukuran berbeda.
Jelajahi dan buat solusi pencarian kemiripan vektor yang populer
Direktori solusi berisi kasus penggunaan pencarian kemiripan vektor yang paling populer. Setiap kasus penggunaan berisi solusi notebook dan solusi yang dapat diterapkan di docker. Kasus penggunaan meliputi:
- Pencarian kemiripan gambar
- Pencarian kemiripan video
- Pencarian kemiripan audio
- Sistem rekomendasi
- Pencarian molekuler
- Sistem penjawab pertanyaan
Menerapkan aplikasi yang dibangun sepenuhnya dengan cepat pada sistem apa pun
Solusi penerapan cepat adalah solusi dockerized yang memungkinkan pengguna untuk menerapkan aplikasi yang dibangun sepenuhnya pada sistem apa pun. Solusi ini ideal untuk demo singkat, tetapi memerlukan pekerjaan tambahan untuk menyesuaikan dan memahami dibandingkan dengan notebook.
Gunakan notebook khusus skenario untuk menggunakan aplikasi yang telah dikonfigurasi sebelumnya dengan mudah
Notebook berisi contoh sederhana penerapan Milvus untuk menyelesaikan masalah dalam kasus penggunaan tertentu. Setiap contoh dapat dijalankan dari awal hingga akhir tanpa perlu mengelola file atau konfigurasi. Setiap buku catatan juga mudah diikuti dan dimodifikasi, menjadikannya file dasar yang ideal untuk proyek-proyek lain.
Contoh buku catatan pencarian kemiripan gambar
Pencarian kemiripan gambar adalah salah satu ide inti di balik banyak teknologi yang berbeda, termasuk mobil otonom yang mengenali objek. Contoh ini menjelaskan cara membuat program visi komputer dengan mudah menggunakan Milvus.
Buku catatan ini membahas tiga hal:
- Server Milvus
- Server Redis (untuk penyimpanan metadata)
- Model Resnet-18 yang telah dilatih sebelumnya.
Langkah 1: Unduh paket-paket yang diperlukan
Mulailah dengan mengunduh semua paket yang diperlukan untuk proyek ini. Buku catatan ini menyertakan tabel yang berisi daftar paket yang digunakan.
pip install -r requirements.txt
Langkah 2: Pengaktifan server
Setelah paket terinstal, mulai server dan pastikan keduanya berjalan dengan baik. Pastikan untuk mengikuti instruksi yang benar untuk memulai server Milvus dan Redis.
Langkah 3: Mengunduh data proyek
Secara default, notebook ini mengambil potongan data VOCImage untuk digunakan sebagai contoh, tetapi direktori apa pun yang berisi gambar dapat digunakan selama mengikuti struktur berkas yang dapat dilihat di bagian atas notebook.
! gdown "https://drive.google.com/u/1/uc?id=1jdudBiUu41kL-U5lhH3ari_WBRXyedWo&export=download"
! tar -xf 'VOCdevkit.zip'
! rm 'VOCdevkit.zip'
Langkah 4: Hubungkan ke server
Pada contoh ini, server berjalan pada port default pada hos lokal.
connections.connect(host="127.0.0.1", port=19537)
red = redis.Redis(host = '127.0.0.1', port=6379, db=0)
Langkah 5: Membuat koleksi
Setelah menjalankan server, buatlah sebuah koleksi di Milvus untuk menyimpan semua vektor. Pada contoh ini, ukuran dimensi diatur ke 512, ukuran keluaran resnet-18, dan metrik kemiripan diatur ke jarak Euclidean (L2). Milvus mendukung berbagai metrik kemiripan yang berbeda.
collection_name = "image_similarity_search"
dim = 512
default_fields = [
schema.FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
schema.FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=dim)
]
default_schema = schema.CollectionSchema(fields=default_fields, description="Image test collection")
collection = Collection(name=collection_name, schema=default_schema)
Langkah 6: Buatlah indeks untuk koleksi
Setelah koleksi dibuat, buatlah indeks untuk koleksi tersebut. Dalam kasus ini, indeks IVF_SQ8 digunakan. Indeks ini membutuhkan parameter 'nlist', yang memberi tahu Milvus berapa banyak klaster yang harus dibuat dalam setiap datafile (segmen). Indeks yang berbeda membutuhkan parameter yang berbeda.
default_index = {"index_type": "IVF_SQ8", "params": {"nlist": 2048}, "metric_type": "L2"}
collection.create_index(field_name="vector", index_params=default_index)
collection.load()
Langkah 7: Menyiapkan model dan pemuat data
Setelah indeks IVF_SQ8 dibuat, siapkan jaringan saraf dan pemuat data. Python resnet-18 yang telah dilatih sebelumnya yang digunakan dalam contoh ini tanpa lapisan terakhirnya, yang memampatkan vektor untuk klasifikasi dan mungkin kehilangan informasi yang berharga.
model = torch.hub.load('pytorch/vision:v0.9.0', 'resnet18', pretrained=True)
encoder = torch.nn.Sequential(*(list(model.children())[:-1]))
Dataset dan pemuat data perlu dimodifikasi agar dapat melakukan prapemrosesan dan pengumpulan gambar sekaligus menyediakan jalur file gambar. Hal ini dapat dilakukan dengan dataloader torchvision yang sedikit dimodifikasi. Untuk prapemrosesan, gambar harus dipotong dan dinormalisasi karena model resnet-18 dilatih pada ukuran dan rentang nilai tertentu.
dataset = ImageFolderWithPaths(data_dir, transform=transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])]))
dataloader = torch.utils.data.DataLoader(dataset, num_workers=0, batch_si
Langkah 8: Masukkan vektor ke dalam koleksi
Dengan penyiapan koleksi, gambar dapat diproses dan dimuat ke dalam koleksi yang dibuat. Pertama, gambar diambil oleh dataloader dan dijalankan melalui model resnet-18. Penyematan vektor yang dihasilkan kemudian dimasukkan ke dalam Milvus, yang mengembalikan ID unik untuk setiap vektor. ID vektor dan jalur berkas gambar kemudian dimasukkan sebagai pasangan nilai-kunci ke dalam server Redis.
steps = len(dataloader)
step = 0
for inputs, labels, paths in dataloader:
with torch.no_grad():
output = encoder(inputs).squeeze()
output = output.numpy()
mr = collection.insert([output.tolist()])
ids = mr.primary_keys
for x in range(len(ids)):
red.set(str(ids[x]), paths[x])
if step%5 == 0:
print("Insert Step: " + str(step) + "/" + str(steps))
step += 1
Langkah 9: Lakukan pencarian kesamaan vektor
Setelah semua data dimasukkan ke dalam Milvus dan Redis, pencarian kemiripan vektor yang sebenarnya dapat dilakukan. Dalam contoh ini, tiga gambar yang dipilih secara acak diambil dari server Redis untuk dilakukan pencarian kemiripan vektor.
random_ids = [int(red.randomkey()) for x in range(3)]
search_images = [x.decode("utf-8") for x in red.mget(random_ids)]
Gambar-gambar ini pertama-tama melalui prapemrosesan yang sama dengan yang ditemukan di Langkah 7 dan kemudian didorong melalui model resnet-18.
transform_ops = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
embeddings = [transform_ops(Image.open(x)) for x in search_images]
embeddings = torch.stack(embeddings, dim=0)
with torch.no_grad():
embeddings = encoder(embeddings).squeeze().numpy()
Kemudian penyematan vektor yang dihasilkan digunakan untuk melakukan pencarian. Pertama, tetapkan parameter pencarian, termasuk nama koleksi yang akan dicari, nprobe (jumlah cluster yang akan dicari), dan top_k (jumlah vektor yang dikembalikan). Dalam contoh ini, pencarian harus sangat cepat.
search_params = {"metric_type": "L2", "params": {"nprobe": 32}}
start = time.time()
results = collection.search(embeddings, "vector", param=search_params, limit=3, expr=None)
end = time.time() - start
Langkah 10: Hasil pencarian gambar
ID vektor yang dikembalikan dari kueri digunakan untuk menemukan gambar yang sesuai. Matplotlib kemudian digunakan untuk menampilkan hasil pencarian gambar.
pic1.png
pic2.png
pic3.png
Pelajari cara menggunakan Milvus di lingkungan yang berbeda
Bagian penerapan pada bootcamp baru berisi semua informasi untuk menggunakan Milvus di lingkungan dan pengaturan yang berbeda. Ini termasuk menerapkan Mishard, menggunakan Kubernetes dengan Milvus, penyeimbangan beban, dan banyak lagi. Setiap lingkungan memiliki panduan langkah demi langkah yang mendetail yang menjelaskan cara membuat Milvus bekerja di dalamnya.
Jangan menjadi orang asing
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word