Быстрое тестирование и развертывание решений для векторного поиска с помощью Milvus 2.0 Bootcamp
С выходом Milvus 2.0 команда переработала загрузочный лагерь Milvus. Новый и улучшенный буткемп предлагает обновленные руководства и более простые в исполнении примеры кода для различных вариантов использования и развертывания. Кроме того, новая версия обновлена для Milvus 2.0, переосмысленной версии самой передовой в мире векторной базы данных.
Стресс-тестирование системы с использованием эталонных наборов данных объемом 1 и 100 млн.
Каталог эталонов содержит эталонные тесты на 1 и 100 миллионов векторов, которые показывают, как ваша система будет реагировать на наборы данных разного размера.
Изучайте и создавайте популярные решения для поиска векторного сходства
Каталог решений содержит наиболее популярные примеры использования поиска векторного сходства. Каждый пример содержит решение для ноутбука и решение для развертывания в докере. Примеры использования включают:
- поиск сходства изображений
- Поиск сходства видео
- Поиск сходства аудиофайлов
- Система рекомендаций
- Молекулярный поиск
- Система ответов на вопросы
Быстрое развертывание полностью собранного приложения на любой системе
Решения для быстрого развертывания - это докеризованные решения, которые позволяют пользователям развернуть полностью собранные приложения на любой системе. Эти решения идеально подходят для коротких демонстраций, но требуют дополнительной работы по настройке и пониманию по сравнению с блокнотами.
Используйте блокноты для конкретных сценариев, чтобы легко развернуть предварительно сконфигурированные приложения.
Блокноты содержат простой пример развертывания Milvus для решения проблемы в конкретном сценарии использования. Каждый из примеров можно запустить от начала до конца без необходимости управлять файлами или конфигурациями. Кроме того, каждый блокнот легко повторяется и поддается изменению, что делает их идеальными базовыми файлами для других проектов.
Пример блокнота для поиска сходства изображений
Поиск сходства изображений - одна из основных идей, лежащих в основе множества различных технологий, включая распознавание объектов автономными автомобилями. Этот пример объясняет, как легко создавать программы компьютерного зрения с помощью Milvus.
Этот блокнот состоит из трех частей:
- сервер Milvus
- Сервер Redis (для хранения метаданных)
- Предварительно обученная модель Resnet-18.
Шаг 1: Скачайте необходимые пакеты
Начните с загрузки всех необходимых пакетов для этого проекта. В этом блокноте есть таблица с перечнем пакетов, которые необходимо использовать.
pip install -r requirements.txt
Шаг 2: Запуск сервера
После установки пакетов запустите серверы и убедитесь, что они работают правильно. Обязательно следуйте правильным инструкциям по запуску серверов Milvus и Redis.
Шаг 3: Загрузка данных проекта
По умолчанию этот блокнот извлекает фрагмент данных VOCImage для использования в качестве примера, но любая директория с изображениями должна работать, если она соответствует файловой структуре, которую можно увидеть в верхней части блокнота.
! 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, который возвращает уникальный идентификатор для каждого вектора. Идентификаторы векторов и пути к файлам изображений вставляются в сервер 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 используется для отображения результатов поиска изображений.
pic1.png
pic2.png
pic3.png
Узнайте, как развернуть Milvus в различных средах
Раздел "Развертывание" нового bootcamp содержит всю информацию об использовании Milvus в различных средах и настройках. Он включает в себя развертывание Mishards, использование Kubernetes с Milvus, балансировку нагрузки и многое другое. Для каждой среды есть подробное пошаговое руководство, объясняющее, как заставить Milvus работать в ней.
Не будьте незнакомцем
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word