Быстро тестируйте и развертывайте решения векторного поиска с Milvus 2.0 Bootcamp
С выпуском Milvus 2.0 команда обновила bootcamp Milvus. Новый и улучшенный bootcamp предлагает обновленные руководства и более простые для понимания примеры кода для множества сценариев использования и развертываний. Кроме того, эта новая версия обновлена для Milvus 2.0 — переосмысленной версии самой передовой в мире векторной базы данных.
Проведите стресс-тестирование вашей системы на бенчмарках наборов данных 1M и 100M
Каталог benchmark содержит бенчмарк-тесты для 1 миллиона и 100 миллионов векторов, которые показывают, как ваша система будет реагировать на наборы данных разного размера.
Изучайте и создавайте популярные решения для поиска по сходству векторов
Каталог solution включает самые популярные сценарии использования поиска по сходству векторов. Каждый сценарий использования содержит решение в виде notebook и решение, развертываемое с помощью docker. Сценарии использования включают:
- Поиск похожих изображений
- Поиск похожих видео
- Поиск похожего аудио
- Рекомендательная система
- Молекулярный поиск
- Система ответов на вопросы
Быстро разверните полностью готовое приложение в любой системе
Решения для быстрого развертывания — это dockerized-решения, которые позволяют пользователям развертывать полностью готовые приложения в любой системе. Эти решения идеально подходят для коротких демонстраций, но по сравнению с notebooks требуют дополнительной работы для настройки и понимания.
Используйте notebooks для конкретных сценариев, чтобы легко развертывать предварительно настроенные приложения
Notebooks содержат простой пример развертывания Milvus для решения задачи в заданном сценарии использования. Каждый из примеров можно выполнить от начала до конца без необходимости управлять файлами или конфигурациями. Каждый notebook также прост для понимания и поддается модификации, что делает их идеальными базовыми файлами для других проектов.
Пример notebook для поиска похожих изображений
Поиск похожих изображений — одна из ключевых идей, лежащих в основе множества различных технологий, включая распознавание объектов автономными автомобилями. Этот пример объясняет, как легко создавать программы компьютерного зрения с помощью Milvus.
Этот пример охватывает три вещи:
- Сервер Milvus
- Сервер Redis (для хранения метаданных)
- Предобученная модель Resnet-18.
Шаг 1: Загрузите необходимые пакеты
Начните с загрузки всех необходимых пакетов для этого проекта. Этот notebook включает таблицу со списком пакетов для использования.
pip install -r requirements.txt
Шаг 2: Запуск серверов
После установки пакетов запустите серверы и убедитесь, что оба работают правильно. Обязательно следуйте корректным инструкциям по запуску серверов Milvus и Redis.
Шаг 3: Загрузите данные проекта
По умолчанию этот notebook извлекает фрагмент данных VOCImage для использования в качестве примера, но должен подойти любой каталог с изображениями, если он соответствует структуре файлов, которую можно увидеть в верхней части notebook.
! gdown "https://drive.google.com/u/1/uc?id=1jdudBiUu41kL-U5lhH3ari_WBRXyedWo&export=download"
! tar -xf 'VOCdevkit.zip'
! rm 'VOCdevkit.zip'
Шаг 4: Подключитесь к серверам
В этом примере серверы работают на портах по умолчанию на localhost.
connections.connect(host="127.0.0.1", port=19537)
red = redis.Redis(host = '127.0.0.1', port=6379, db=0)
Шаг 5: Создайте коллекцию
После запуска серверов создайте коллекцию в Milvus для хранения всех векторов. В этом примере размерность установлена равной 512, что соответствует размеру выходных данных resnet-18, а метрика сходства установлена как евклидово расстояние (L2). Milvus поддерживает множество различных метрик сходства.
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)
Шаг 6: Постройте индекс для коллекции
После создания коллекции постройте для нее индекс. В данном случае используется индекс IVF_SQ8. Для этого индекса требуется параметр 'nlist', который сообщает Milvus, сколько кластеров нужно создать в каждом файле данных (сегменте). Для разных индексов требуются разные параметры.
default_index = {"index_type": "IVF_SQ8", "params": {"nlist": 2048}, "metric_type": "L2"}
collection.create_index(field_name="vector", index_params=default_index)
collection.load()
Шаг 7: Настройте модель и загрузчик данных
После построения индекса IVF_SQ8 настройте нейронную сеть и загрузчик данных. Предобученная pytorch resnet-18, используемая в этом примере, применяется без последнего слоя, который сжимает векторы для классификации и может терять ценную информацию.
model = torch.hub.load('pytorch/vision:v0.9.0', 'resnet18', pretrained=True)
encoder = torch.nn.Sequential(*(list(model.children())[:-1]))
Набор данных и загрузчик данных необходимо изменить так, чтобы они могли предварительно обрабатывать изображения и формировать батчи, а также предоставлять пути к файлам изображений. Это можно сделать с помощью слегка измененного загрузчика данных torchvision. Для предварительной обработки изображения нужно обрезать и нормализовать, поскольку модель resnet-18 обучалась на определенном размере и диапазоне значений.
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
Шаг 8: Вставьте векторы в коллекцию
После настройки коллекции изображения можно обработать и загрузить в созданную коллекцию. Сначала изображения извлекаются загрузчиком данных и пропускаются через модель resnet-18. Полученные векторные эмбеддинги затем вставляются в Milvus, который возвращает уникальный ID для каждого вектора. Затем ID векторов и пути к файлам изображений вставляются как пары ключ-значение в сервер 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
Шаг 9: Выполните поиск по сходству векторов
После того как все данные вставлены в Milvus и Redis, можно выполнить фактический поиск по сходству векторов. В этом примере три случайно выбранных изображения извлекаются из сервера Redis для поиска по сходству векторов.
random_ids = [int(red.randomkey()) for x in range(3)]
search_images = [x.decode("utf-8") for x in red.mget(random_ids)]
Эти изображения сначала проходят ту же предварительную обработку, что и в шаге 7, а затем передаются через модель 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()
Затем полученные векторные вложения используются для выполнения поиска. Сначала задайте параметры поиска, включая имя коллекции для поиска, nprobe (число кластеров для поиска) и top_k (число возвращаемых векторов). В этом примере поиск должен быть очень быстрым.
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
Шаг 10: Результаты поиска изображений
Идентификаторы векторов, возвращенные запросами, используются для поиска соответствующих изображений. Затем Matplotlib используется для отображения результатов поиска изображений.
Рисунок 1.
Рисунок 2.
Рисунок 3.
Узнайте, как развернуть Milvus в разных средах
Раздел deployments нового bootcamp содержит всю информацию по использованию Milvus в разных средах и конфигурациях. Он включает развертывание Mishards, использование Kubernetes с Milvus, балансировку нагрузки и многое другое. Для каждой среды есть подробное пошаговое руководство, объясняющее, как заставить Milvus работать в ней.
Не будьте чужаком
- Читайте наш blog.
- Взаимодействуйте с нашим open-source сообществом в Slack.
- Используйте или вносите вклад в Milvus, самую популярную в мире векторную базу данных, на GitHub.
Читать далее

VidTok: Rethinking Video Processing with Compact Tokenization
VidTok tokenizes videos to reduce redundancy while preserving spatial and temporal details for efficient processing.

Bringing AI to Legal Tech: The Role of Vector Databases in Enhancing LLM Guardrails
Discover how vector databases enhance AI reliability in legal tech, ensuring accurate, compliant, and trustworthy AI-powered legal solutions.

Vector Databases vs. Graph Databases
Use a vector database for AI-powered similarity search; use a graph database for complex relationship-based queries and network analysis.



