🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvus был создан для поиска векторного сходства в огромных масштабах (считай, триллион)

Milvus был создан для поиска векторного сходства в огромных масштабах (считай, триллион)

  • Engineering
January 13, 2021
milvus

Каждый день неисчислимое количество важных для бизнеса сведений теряется из-за того, что компании не могут разобраться в собственных данных. На неструктурированные данные, такие как текст, изображения, видео и аудио, по оценкам, приходится 80 % всех данных, но лишь 1 % из них когда-либо анализируется. К счастью, искусственный интеллект (ИИ), программное обеспечение с открытым исходным кодом и закон Мура делают машинную аналитику более доступной, чем когда-либо прежде. С помощью поиска векторного сходства можно извлечь ценность из огромных неструктурированных наборов данных. Эта техника предполагает преобразование неструктурированных данных в векторы признаков - удобный для машин формат числовых данных, который можно обрабатывать и анализировать в режиме реального времени.

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

Перейти к:

Деревья LSM обеспечивают эффективное управление динамическими данными в огромных масштабах

Для обеспечения эффективного динамического управления данными в Milvus используется структура данных log-structured merge-tree (LSM tree). Деревья LSM хорошо подходят для доступа к данным с большим количеством вставок и удалений. Подробную информацию о специфических атрибутах LSM-деревьев, которые помогают обеспечить высокопроизводительное динамическое управление данными, можно найти в оригинальном исследовании, опубликованном его изобретателями. Деревья LSM являются базовой структурой данных, используемой во многих популярных базах данных, включая BigTable, Cassandra и RocksDB.

Векторы в Milvus существуют как сущности и хранятся в сегментах. Каждый сегмент содержит от одной до ~8 миллионов сущностей. Каждая сущность имеет поля для уникального идентификатора и входов вектора, причем последние представляют собой от 1 до 32768 измерений.

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_2.png Блог_Мильвус был создан для массового (считайте, триллионного) поиска векторного сходства_2.png

Управление данными оптимизировано для быстрого доступа и ограниченной фрагментации

При получении запроса на вставку Milvus записывает новые данные в журнал опережающей записи (WAL). После того как запрос успешно записан в журнал, данные записываются в буфер с возможностью изменения. Наконец, один из трех триггеров приводит к тому, что буфер становится неизменяемым и стирается на диск:

  1. Временные интервалы: Данные регулярно сбрасываются на диск через определенные промежутки времени (по умолчанию 1 секунда).
  2. Размер буфера: Накопленные данные достигают верхнего предела для неизменяемого буфера (128 МБ).
  3. Ручной триггер: Данные вручную сбрасываются на диск, когда клиент вызывает функцию flush.

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_3.png Блог_Мильвус был создан для массового (считай, триллионного) поиска векторного сходства_3.png

Пользователи могут добавлять десятки или миллионы векторов за раз, генерируя файлы данных разного размера по мере добавления новых векторов. Это приводит к фрагментации, которая может усложнить управление данными и замедлить поиск векторного сходства. Чтобы предотвратить чрезмерную фрагментацию данных, Milvus постоянно объединяет сегменты данных, пока общий размер файла не достигнет настраиваемого пользователем предела (например, 1 ГБ). Например, при верхнем пределе в 1 ГБ вставка 100 миллионов 512-мерных векторов приведет к созданию всего ~200 файлов данных.

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

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_4.png Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_4.png

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_5.png Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_5.png

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

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

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

При построении индексов генерируется большое количество метаданных. Например, индексирование 100 миллионов 512-мерных векторов, сохраненных в 200 файлах данных, приведет к созданию еще 200 индексных файлов. Чтобы эффективно проверять состояние файлов, удалять или вставлять новые файлы, необходима эффективная система управления метаданными. В Milvus используется онлайновая обработка транзакций (OLTP) - метод обработки данных, который хорошо подходит для обновления и/или удаления небольших объемов данных в базе данных. Для управления метаданными Milvus использует SQLite или MySQL.

Подробнее о Milvus

Milvus - это платформа управления векторными данными с открытым исходным кодом, которая в настоящее время находится в стадии инкубации в LF AI & Data, головной организации Linux Foundation. Milvus получила открытый исходный код в 2019 году от Zilliz, компании-разработчика программного обеспечения для науки о данных, которая инициировала проект. Более подробную информацию о Milvus можно найти на его сайте. Если вас интересует поиск по векторному сходству или использование ИИ для раскрытия потенциала неструктурированных данных, присоединяйтесь к нашему сообществу с открытым исходным кодом на GitHub.

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    Продолжить чтение