Индекс на диске
В этой статье представлен алгоритм индексирования на диске под названием DiskANN. Основанный на графах Vamana, DiskANN обеспечивает эффективный поиск в больших наборах данных.
Чтобы повысить производительность запросов, можно указать тип индекса для каждого векторного поля.
Необходимые условия
Чтобы использовать DiskANN, обратите внимание, что
- По умолчанию DiskANN отключен. Если вы предпочитаете индексы в памяти, а не на диске, рекомендуется отключить эту функцию для повышения производительности.
- Чтобы отключить ее, вы можете изменить
queryNode.enableDisk
наfalse
в конфигурационном файле milvus. - Чтобы включить ее снова, вы можете установить
queryNode.enableDisk
наtrue
.
- Чтобы отключить ее, вы можете изменить
- Экземпляр Milvus работает на Ubuntu 18.04.6 или более поздней версии.
- Для достижения полной производительности путь данных Milvus должен быть смонтирован на NVMe SSD:
- Для автономного экземпляра Milvus путь к данным должен быть /var/lib/milvus/data в контейнере, в котором работает экземпляр.
- Для экземпляра Milvus Cluster путь к данным должен быть /var/lib/milvus/data в контейнерах, где работают QueryNodes и IndexNodes.
Ограничения
Чтобы использовать DiskANN, убедитесь, что вы
- Используйте в данных только векторы с плавающей точкой и размерностью не менее 1.
- Для измерения расстояния между векторами используйте только евклидово расстояние (L2), внутреннее произведение (IP) или COSINE.
Настройки индекса и поиска
Параметры построения индекса
При построении индекса DiskANN в качестве типа индекса используйте
DISKANN
. Параметры индекса не требуются.Параметры поиска
Параметр Описание Диапазон Значение по умолчанию search_list
Размер списка кандидатов, больший размер обеспечивает более высокий процент запоминания с ухудшением производительности. [topk, int32_max]. 16
Конфигурации Milvus, связанные с DiskANN
DiskANN можно настраивать. Вы можете изменить параметры, связанные с DiskANN, в ${MILVUS_ROOT_PATH}/configs/milvus.yaml
, чтобы улучшить его производительность.
...
DiskIndex:
MaxDegree: 56
SearchListSize: 100
PQCodeBugetGBRatio: 0.125
SearchCacheBudgetGBRatio: 0.125
BeamWidthRatio: 4.0
...
Параметр | Описание | Диапазон значений | Значение по умолчанию |
---|---|---|---|
MaxDegree | Максимальная степень графа Vamana. Большее значение обеспечивает более высокую скорость отзыва, но увеличивает размер и время построения индекса. | [1, 512] | 56 |
SearchListSize | Размер списка кандидатов. Большее значение увеличивает время, затрачиваемое на построение индекса, но обеспечивает более высокий процент отзыва. Установите значение меньше, чем MaxDegree , если вам не нужно сокращать время построения индекса. | [1, int32_max] | 100 |
PQCodeBugetGBRatio | Ограничение на размер кода PQ. Большее значение обеспечивает более высокую скорость запоминания, но увеличивает потребление памяти. | (0.0, 0.25] | 0.125 |
SearchCacheBudgetGBRatio | Отношение кэшированных номеров узлов к исходным данным. Большее значение повышает производительность построения индексов, но увеличивает расход памяти. | [0.0, 0.3) | 0.10 |
BeamWidthRatio | Соотношение между максимальным количеством запросов ввода-вывода за итерацию поиска и количеством CPU. | [1, max(128 / количество CPU, 16)] | 4.0 |
Устранение неполадок
Как справиться с ошибкой
io_setup() failed; returned -11, errno=11:Resource temporarily unavailable
?Ядро Linux предоставляет функцию асинхронного неблокирующего ввода/вывода (AIO), которая позволяет процессу инициировать несколько операций ввода/вывода одновременно, не дожидаясь завершения ни одной из них. Это помогает увеличить производительность приложений, которые могут совмещать обработку и ввод-вывод.
Производительность можно настроить с помощью виртуального файла
/proc/sys/fs/aio-max-nr
в файловой системе proc. Параметрaio-max-nr
определяет максимальное количество допустимых одновременных запросов.Параметр
aio-max-nr
по умолчанию равен65535
, вы можете установить его на10485760
.