Быстро тестируйте и развертывайте решения векторного поиска с 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.
Читать далее

Top 10 Context Engineering Techniques You Should Know for Production RAG
A practical guide to context engineering for production LLM systems, covering RAG, context processing, memory, agents, and multimodal context.

Creating Collections in Zilliz Cloud Just Got Way Easier
We've enhanced the entire collection creation experience to bring advanced capabilities directly into the interface, making it faster and easier to build production-ready schemas without switching tools.
Milvus/Zilliz + Surveillance: How Vector Databases Transform Multi-Camera Tracking
See how Milvus vector database enhances multi-camera tracking with similarity-based matching for better surveillance in retail, warehouses and transport hubs.



