46.6kЗаказать демоВойтиНачать бесплатно

Исследуя чудеса Knowhere 2.0

Sep 26, 20234 min read

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

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

Что такое Knowhere?

Knowhere — это ядро векторного поискового движка для Milvus. Представьте векторную базу данных как огромную вселенную Marvel; Knowhere — это ее главный штаб. Основная миссия Knowhere — выполнять приближенный поиск ближайших соседей (ANNS), создавая индексы с низкой задержкой.

Knowhere 2.0 и его новые возможности

Мы работали над реструктуризацией и обновлением Knowhere с июля 2022 года. После непрерывных обсуждений, проектирования, разработки и тестирования Knowhere 2.0 дебютировал вместе с Milvus 2.3 в конце августа 2023 года. Эта новая версия приносит множество улучшений, включая поддержку GPU-индекса, косинусного сходства, индекса ScaNN и архитектуры Arm. Обновленный Knowhere приносит пользу пользователям и разработчикам, делая его мощным элементом Milvus. Далее давайте рассмотрим его ключевые возможности.

Поддержка GPU-индексов

Nvidia внесла индексы GPU_FLAT и GPU_IVFPQ из своей библиотеки векторного поиска RAFT в Knowhere 2.0. Это дополнение значительно ускоряет поиск по индексам: Milvus достигает впечатляющих улучшений пропускной способности на Nvidia A100 — почти в 70 раз для SIFT1M.

Milvus QPS GPU vs. CPU Milvus QPS GPU vs. CPU

Для получения дополнительной информации о GPU-индексе обратитесь к документации Milvus.

Поддержка косинусного сходства

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

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

Поддержка индекса ScaNN

ScaNN, или FastScan, — это индекс с открытым исходным кодом для приближенного поиска ближайших соседей (ANN), реализованный FAISS. Он использует более компактное PQ-кодирование и соответствующие наборы инструкций для доступа к регистрам CPU, что обеспечивает отличную производительность индексирования.

Knowhere 2.0 теперь изначально поддерживает индекс ScaNN. С Knowhere 2.0 Milvus 2.3 достигает QPS в семь раз выше, чем у IVF_FLAT, и в 1,2 раза выше, чем у HNSW, с показателем полноты примерно 95% на наборах данных Cohere.

Поддержка архитектуры ARM

Архитектура ARM известна своей экономичностью по сравнению с архитектурой x86. Хотя она менее мощная, ARM имеет более простую конструкцию и наборы инструкций, что делает ее все более популярной. Например, экземпляры ARM с теми же характеристиками CPU (например, 1 vCPU и 16GB RAM) примерно на 15% дешевле на платформе AWS, чем экземпляры x86.

Благодаря поддержке архитектуры ARM в Knowhere 2.0 пользователи теперь могут запускать и создавать сервисы верхнего уровня на этой архитектуре.

Поддержка поиска по диапазону

Существует два метода поиска ближайших соседей: K Nearest Neighbor (KNN) и Range Search. KNN находит "k" ближайших векторов к вектору запроса "q" в коллекции векторов "X." Между тем, Range Search не имеет заданного "k"; вместо этого он возвращает все векторы в пределах определенного расстояния (радиуса) от вектора запроса "q" в коллекции векторов "X."

Knowhere 2.0 поддерживает поиск по диапазону для нескольких индексов в библиотеке, таких как HNSW, DiskANN и индексы IVF. Эта функция позволяет пользователям задавать расстояние между входным вектором и векторами, хранящимися в Milvus, во время запроса.

Оптимизированные запросы с фильтрами

В смешанных скалярных и векторных запросах вы можете отфильтровывать некоторые векторы. Knowhere 2.0 значительно улучшил запросы фильтрации векторов для HNSW, что привело к увеличению производительности до 6–80 раз по сравнению с более ранними версиями.

Улучшения структуры кода и компиляции

Knowhere 2.0 упрощает наследование классов C++, использует шаблоны proxy для интеграции новых индексов, перерабатывает модуль Config, применяет Conan как пакетный менеджер для упрощенной компиляции и использует пул потоков Folly для точного управления потоками. Все эти улучшения делают использование Milvus более простым.

Поддержка MMap

В прошлом некоторые пользователи сталкивались с ограничениями объема памяти из-за своих больших наборов данных, что влияло на индексы, которые они могли хранить. Однако с появлением Knowhere 2.0 Milvus теперь поддерживает Memory Mapping (MMap), обеспечивая автоматическое отображение больших файлов в память. Эта новая функция позволяет пользователям получать доступ к обширным данным индексов, несмотря на недостаточный объем памяти.

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

После завершения поиска пользователям может потребоваться доступ к исходным векторам на основе возвращенных ID для дальнейших пользовательских вычислений или фильтрации. С Knowhere 2.0 пользователи могут напрямую извлекать исходные векторы из индекса, снижая задержку по сравнению с получением из удаленного хранилища, такого как S3.

Более подробную информацию о функциях и улучшениях Knowhere 2.0 см. в примечаниях к выпуску Knowhere 2.0.

Приглашаем внести вклад в Knowhere!

Knowhere постоянно развивается, и ваше мнение важно. Если у вас есть ценные предложения или идеи, не стесняйтесь внести вклад в репозиторий Knowhere.

Обновлено Jul 09, 2026