Волнующие новости! После восьми месяцев совместных усилий мы рады объявить о выпуске Milvus 2.3, знаковой версии, которая содержит множество долгожданных функций, включая поддержку графического процессора, Arm64, upsert, сбор измененных данных, индекс ScaNN и технологию MMap. Milvus 2.3 также обеспечивает улучшенную производительность запросов, более надежную балансировку и планирование нагрузки, а также улучшенную наблюдаемость и работоспособность.

Присоединяйтесь ко мне, чтобы ознакомиться с этими новыми функциями и улучшениями и узнать, какую пользу вы можете получить от этого выпуска.

Поддержка индекса графического процессора, что приводит к увеличению количества запросов в секунду в 3–10 раз.

Индекс графического процессора — долгожданная функция в сообществе Milvus. Благодаря тесному сотрудничеству с инженерами Nvidia, Milvus 2.3 поддерживает индексацию графического процессора с помощью надежного алгоритма RAFT, добавленного в Knowhere, механизм индексирования Milvus. Благодаря поддержке графического процессора Milvus 2.3 более чем в три раза быстрее по количеству запросов в секунду, чем предыдущие версии, использующие индекс CPU HNSW, и почти в десять раз быстрее для определенных наборов данных, требующих тяжелых вычислений.

Поддержка Arm64 для удовлетворения растущего спроса пользователей

Процессоры Arm становятся все более популярными среди облачных провайдеров и разработчиков. Чтобы удовлетворить этот растущий спрос, Milvus теперь предоставляет образы Docker для архитектуры ARM64. Благодаря поддержке нового процессора пользователи MacOS могут более легко создавать свои приложения с помощью Milvus.

Поддержка Upsert для лучшего взаимодействия с пользователем

В Milvus 2.3 реализовано заметное улучшение, поддерживающее операцию upsert. Эта новая функциональность позволяет пользователям беспрепятственно обновлять или вставлять данные и позволяет им выполнять обе операции в одном запросе через интерфейс Upsert. Эта функция упрощает управление данными и повышает эффективность таблицы.

Примечание:

  • Функция upsert не применяется к идентификаторам автоматического увеличения.
  • Upsert реализован как комбинация delete и insert, что может привести к некоторой потере производительности. Мы рекомендуем использовать insert, если вы используете Milvus в сценариях с большим объемом записи.

Поиск по диапазону для более точных результатов

Milvus 2.3 позволяет пользователям указывать расстояние между входным вектором и векторами, хранящимися в Milvus, во время запроса. Затем Milvus возвращает все совпадающие результаты в заданном диапазоне. Ниже приведен пример указания расстояния поиска с использованием функции поиска по диапазону.

// add radius and range_filter to params in search_params
search_params = {"params": {"nprobe": 10, "radius": 10, "range_filter" : 20}, "metric_type": "L2"}
res = collection.search(
vectors, "float_vector", search_params, topK,
"int64 > 100", output_fields=["int64", "float"]
)

В этом примере пользователь требует, чтобы Milvus возвращал векторы на расстоянии от 10 до 20 единиц от входного вектора.

Примечание. Различные метрики расстояний различаются по способу расчета расстояний, что приводит к разным диапазонам значений и стратегиям сортировки. Поэтому важно понять их характеристики, прежде чем использовать функцию поиска диапазона.

Индекс ScaNN для более высокой скорости запросов

Milvus 2.3 теперь поддерживает индекс ScaNN, индекс приблизительного ближайшего соседа (ANN) с открытым исходным кодом, разработанный Google. Индекс ScaNN продемонстрировал превосходную производительность в различных тестах, опередив HNSW примерно на 20% и примерно в семь раз быстрее, чем IVFFlat. Благодаря поддержке индекса ScaNN Milvus обеспечивает гораздо более высокую скорость запросов по сравнению со старыми версиями.

Растущий индекс для стабильной и лучшей производительности запросов

Milvus включает две категории данных: индексированные данные и потоковые данные. Milvus может использовать индексы для быстрого поиска индексированных данных, но может только грубо искать потоковые данные построчно, что может повлиять на производительность. В Milvus 2.3 представлен растущий индекс, который автоматически создает индексы в реальном времени для потоковой передачи данных для повышения производительности запросов.

Итератор для пакетного получения данных

В Milvus 2.3 Pymilvus представил интерфейс итератора, который позволяет пользователям получать более 16 384 объектов при поиске или поиске по диапазону. Эта функция удобна, когда пользователям необходимо экспортировать десятки тысяч или даже больше векторов в пакетном режиме.

Поддержка MMap для увеличения емкости

MMap — это системный вызов UNIX, используемый для отображения файлов и других объектов в памяти. Milvus 2.3 поддерживает MMap, который позволяет пользователям загружать данные на локальные диски и отображать их в памяти, тем самым увеличивая производительность одной машины.

Результаты наших испытаний показывают, что с помощью технологии MMap Milvus может удвоить емкость данных, ограничивая при этом снижение производительности до 20%. Такой подход значительно снижает общие затраты, что делает его особенно выгодным для пользователей с ограниченным бюджетом, которые не против снизить производительность.

Поддержка CDC для повышения доступности системы

Система отслеживания измененных данных (CDC) — это широко используемая функция в системах баз данных, которая фиксирует и реплицирует изменения данных в указанное место назначения. Благодаря функции CDC Milvus 2.3 позволяет пользователям синхронизировать данные в центрах обработки данных, выполнять резервное копирование дополнительных данных и плавно переносить данные, делая систему более доступной.

В дополнение к вышеперечисленным функциям Milvus 2.3 представляет интерфейс подсчета для точного расчета количества строк данных, хранящихся в коллекции, в режиме реального времени, поддерживает метрику косинуса для измерения векторного расстояния и дополнительные операции с массивами JSON. Дополнительные возможности и подробную информацию можно найти в Примечаниях к выпуску Milvus 2.3.

Улучшения и исправления ошибок

Помимо новых функций, Milvus 2.3 включает в себя множество улучшений и исправлений ошибок старых версий.

Улучшена производительность фильтрации данных.

Milvus выполняет скалярную фильтрацию перед векторным поиском в гибридных запросах скалярных и векторных данных для достижения более точных результатов. Однако производительность индексации может снизиться, если пользователь отфильтровал слишком много данных после скалярной фильтрации. В Milvus 2.3 мы оптимизировали стратегию фильтрации HNSW для решения этой проблемы, что привело к повышению производительности запросов.

Повышенное использование многоядерного процессора

Поиск приближенного ближайшего объекта (ИНС) — это вычислительно интенсивная задача, требующая огромных ресурсов ЦП. В предыдущих выпусках Milvus мог использовать только около 70% доступных ресурсов многоядерного процессора. Однако в последней версии Milvus преодолел это ограничение и может полностью использовать все доступные ресурсы многоядерного процессора, что приводит к повышению производительности запросов и сокращению потерь ресурсов.

Рефакторинг QueryNode

QueryNode — важнейший компонент Milvus, отвечающий за векторный поиск. Однако в более старых версиях QueryNode имел сложные состояния, повторяющиеся очереди сообщений, неорганизованную структуру кода и неинтуитивные сообщения об ошибках.

В Milvus 2.3 мы обновили QueryNode, введя структуру кода без сохранения состояния и удалив очередь сообщений для удаления данных. Эти обновления приводят к меньшему расходованию ресурсов, а также к более быстрому и стабильному поиску векторов.

Расширенные очереди сообщений на основе NATS

Мы построили Milvus на основе архитектуры журналов, а в предыдущих версиях мы использовали Pulsar и Kafka в качестве основных брокеров журналов. Однако эта комбинация столкнулась с тремя ключевыми проблемами:

  • Он был нестабильным в ситуациях с несколькими темами.
  • Он потреблял ресурсы в режиме ожидания и с трудом дедуплицировал сообщения.
  • Pulsar и Kafka тесно связаны с экосистемой Java, поэтому их сообщество редко поддерживает и обновляет Go SDK.

Чтобы решить эти проблемы, мы объединили NATS и Bookeeper в качестве нашего нового брокера журналов для Milvus, который лучше соответствует потребностям пользователей.

Оптимизированный балансировщик нагрузки

В Milvus 2.3 реализован более гибкий алгоритм балансировки нагрузки, основанный на реальных нагрузках системы. Этот оптимизированный алгоритм позволяет пользователям быстро обнаруживать сбои узлов и несбалансированные нагрузки и соответствующим образом корректировать расписание. По результатам нашего тестирования Milvus 2.3 способен за считанные секунды обнаружить неисправности, несбалансированную нагрузку, ненормальное состояние узла и другие события и оперативно внести коррективы.

Более подробную информацию о Milvus 2.3 можно найти в Примечаниях к выпуску Milvus 2.3.

Обновления инструментов

Мы также обновили Birdwatcher и Attu, два ценных инструмента для работы и обслуживания Milvus, а также Milvus 2.3.

Обновление Бердвотчера

Мы обновили Birdwatcher, инструмент отладки Milvus, добавив множество функций и улучшений, в том числе:

  • RESTful API для бесшовной интеграции с другими диагностическими системами.
  • Поддержка команд PProf для облегчения интеграции с инструментом Go pprof.
  • Возможности анализа использования хранилища.
  • Эффективная функция анализа журналов.
  • Поддержка просмотра и изменения конфигураций в etcd.

Обновление Атту

Мы запустили совершенно новый интерфейс для Attu, универсального инструмента администрирования векторных баз данных. Новый интерфейс имеет более простой дизайн и его легче понять.

Более подробную информацию можно найти в Примечаниях к выпуску Milvus 2.3.

Будем на связи!

Если у вас есть вопросы или отзывы о Milvus, пожалуйста, не стесняйтесь обращаться к нам через Twitter или LinkedIn. Вы также можете присоединиться к нашему каналу Slack, чтобы напрямую общаться с нашими инженерами и сообществом, или проверить наши рабочие часы по вторникам!