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

milvus-logo
LFAI
  • Home
  • Blog
  • Что такое расширенные векторные расширения?

Что такое расширенные векторные расширения?

  • Engineering
November 10, 2020
milvus

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

Что такое расширенные векторные расширения?

Расширенные векторные расширения (AVX) - это набор инструкций для микропроцессоров, основанных на архитектуре набора инструкций семейства x86. Впервые предложенный Intel в марте 2008 года, AVX получил широкую поддержку три года спустя с выходом Sandy Bridge - микроархитектуры, используемой во втором поколении процессоров Intel Core (например, Core i7, i5, i3) - и конкурирующей микроархитектуры AMD, также выпущенной в 2011 году, Bulldozer.

AVX представила новую схему кодирования, новые возможности и новые инструкции. AVX2 расширяет большинство целочисленных операций до 256 бит и вводит операции умножения и накопления (FMA). AVX-512 расширяет AVX до 512-битных операций, используя новую кодировку префикса расширенного вектора (EVEX).

Milvus - это векторная база данных с открытым исходным кодом, предназначенная для поиска сходств и приложений искусственного интеллекта (ИИ). Платформа поддерживает набор инструкций AVX-512, то есть может использоваться со всеми процессорами, в которых есть инструкции AVX-512. Milvus имеет широкое применение, охватывая системы рекомендаций, компьютерное зрение, обработку естественного языка (NLP) и многое другое. В этой статье представлены результаты производительности и анализ векторной базы данных Milvus на AVX-512 и AVX2.

Производительность Milvus на AVX-512 по сравнению с AVX2

Конфигурация системы

  • ПРОЦЕССОР: Процессор Intel® Platinum 8163 @ 2,50 ГГц24 ядра 48 потоков
  • Количество процессоров: 2
  • Видеокарта, GeForce RTX 2080Ti 11GB 4 карты
  • Память: 768 ГБ
  • Диск: 2 ТБ SSD

Параметры Milvus

  • cahce.cahe_size: 25, Размер памяти процессора, используемой для кэширования данных для ускорения запросов.
  • nlist: 4096
  • nprobe: 128

Примечание: nlist - это параметр индексирования, создаваемый клиентом; nprobe - параметр поиска. И IVF_FLAT, и IVF_SQ8 используют алгоритм кластеризации для разбиения большого количества векторов на ведра, nlist - общее количество ведер для разбиения при кластеризации. Первый шаг в запросе - найти количество ведер, которые ближе всего к целевому вектору, а второй шаг - найти топ-к векторов в этих ведрах, сравнивая расстояние между векторами. nprobe означает количество ведер на первом шаге.

Набор данных: Набор данных SIFT10M

В этих тестах используется набор данных SIFT10M, который содержит один миллион 128-мерных векторов и часто используется для анализа производительности соответствующих методов поиска ближайших соседей. Сравнивается время поиска top-1 для nq = [1, 10, 100, 500, 1000] между двумя наборами инструкций.

Результаты по типу векторных индексов

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

Для этих тестов с AVX-512 и AVX2 использовались три индекса: IVF_FLAT, IVF_SQ8 и HNSW.

IVF_FLAT

Инвертированный файл (IVF_FLAT) - это тип индекса, основанный на квантовании. Это самый базовый IVF-индекс, и закодированные данные, хранящиеся в каждой единице, соответствуют исходным данным. Индекс делит векторные данные на некоторое количество кластеров (nlist), а затем сравнивает расстояния между целевым входным вектором и центром каждого кластера. В зависимости от количества кластеров, к которым система настроена на запрос (nprobe), результаты поиска сходства возвращаются на основе сравнений между целевым входным вектором и векторами только в наиболее похожих кластерах, что значительно сокращает время запроса. Настраивая nprobe, можно найти идеальный баланс между точностью и скоростью для конкретного сценария.

Результаты работы IVF_FLAT.pngIVF_FLAT.png

IVF_SQ8

IVF_FLAT не выполняет никакого сжатия, поэтому создаваемые им индексные файлы примерно того же размера, что и исходные, сырые неиндексированные векторные данные. Если ресурсы памяти диска, CPU или GPU ограничены, IVF_SQ8 - лучший вариант, чем IVF_FLAT. Этот тип индекса может преобразовать каждое измерение исходного вектора из четырехбайтового числа с плавающей точкой в однобайтовое целое без знака, выполнив скалярное квантование. Это позволяет сократить потребление памяти на диске, CPU и GPU на 70-75 %.

Результаты производительности IVF_SQ8.pngIVF_SQ8.png

HNSW

Hierarchical Small World Graph (HNSW) - это алгоритм индексирования на основе графов. Запросы начинаются на самом верхнем уровне с поиска узла, ближайшего к цели, а затем переходят на следующий уровень для очередного раунда поиска. После нескольких итераций он может быстро приблизиться к целевой позиции.

Результаты работы HNSW.pngHNSW.png

Сравнение векторных индексов

Векторный поиск на наборе инструкций AVX-512 стабильно быстрее, чем на AVX2. Это объясняется тем, что AVX-512 поддерживает 512-битные вычисления, в то время как AVX2 поддерживает только 256-битные вычисления. Теоретически AVX-512 должен быть вдвое быстрее AVX2, однако Milvus выполняет и другие трудоемкие задачи, помимо вычислений векторного сходства. В реальных условиях общее время поиска AVX-512 вряд ли будет вдвое меньше, чем AVX2. comparison.pngcomparison.png

Поиск по индексу HNSW значительно быстрее, чем по двум другим индексам, а поиск по IVF_SQ8 немного быстрее, чем по IVF_FLAT на обоих наборах инструкций. Вероятно, это связано с тем, что IVF_SQ8 требует всего 25 % памяти от объема, необходимого IVF_FLAT. IVF_SQ8 загружает 1 байт для каждой размерности вектора, в то время как IVF_FLAT загружает 4 байта для каждой размерности вектора. Время, необходимое для вычисления, скорее всего, ограничено пропускной способностью памяти. В результате IVF_SQ8 не только занимает меньше места, но и требует меньше времени для извлечения векторов.

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

Тесты, представленные в этой статье, показывают, что Milvus обеспечивает отличную производительность на наборах инструкций AVX-512 и AVX2 при использовании различных индексов. Независимо от типа индекса, Milvus лучше работает на AVX-512.

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

  • Найдите Milvus на GitHub или внесите в него свой вклад.
  • Общайтесь с сообществом через Slack.
  • Общайтесь с нами в Twitter.

Like the article? Spread the word

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