Технологии
Qdrant 1.18 получила TurboQuant: четырёхбитная квантизация векторов против SQ и BQ
Qdrant описала TurboQuant — квантизацию на основе случайного поворота вектора, которая вошла в релиз 1.18. Компания заявляет конкуренцию со скалярной квантизацией при половинной памяти и рост полноты поиска на 9–24 процентных пункта относительно бинарной. Разбор на Hugging Face повторяет сравнение на трёх наборах BEIR и добавляет к выводу оговорку про задержку.

Что изменилось в Qdrant 1.18
Qdrant включила в релиз 1.18 TurboQuant — метод векторной квантизации на основе поворота, пришедший из Google Research. Компания встраивает его в уже сложившуюся лестницу сжатия: float32 остаётся базой, скалярная квантизация (SQ) сжимает векторы вчетверо почти без потери полноты, а бинарная (BQ) упаковывает их в 16 или 32 раза. Разбор алгоритма и собственное сравнение конфигураций опубликовал Tarun Jain в блоге Hugging Face.
Экономия измеряется напрямую. По расчёту автора разбора, миллион векторов размерности 1024 в float32 занимает 4,096 ГБ, а при четырёх битах на координату коды требуют около 0,512 ГБ — восьмикратное сокращение без учёта метаданных, payload и графа HNSW. Один вектор той же размерности занимает 4096 байт в float32, 512 байт в TQ4, 256 байт в TQ2 и 128 байт в TQ1. До TurboQuant выбор был ограничен: SQ давала четырёхкратное сжатие, BQ — до 32-кратного, но с полнотой, сильно зависящей от распределения эмбеддингов, а product quantization требовала обучения и хранения кодовых книг.
Поворот вместо обучения на каждом наборе данных
Алгоритм начинается со случайного ортогонального поворота: он перемешивает координаты, сохраняя длину вектора, скалярное произведение и расстояние L2. После поворота координаты распределены почти одинаково, и каждую можно квантовать независимо по фиксированной кодовой книге Ллойда — Макса для стандартного нормального распределения.
Ключевое следствие — отказ от обучения на данных. Фиксированная кодовая книга выводится из известного распределения поворота и может быть рассчитана заранее, без подгонки под конкретный набор. Qdrant формулирует это жёстче: таблица один раз выводится из стандартного нормального распределения и универсальна — она работает для любого набора данных и любой размерности, тогда как product quantization требует обученной кодовой книги, которую нужно поставлять вместе с индексом.
Поиск идёт по повёрнутому запросу: близость оценивается прямо по индексам кодов, без обратного разворота сохранённых векторов. Метод поддерживает четыре режима — 8x (4 бита на координату), 16x (2 бита), примерно 21x (1,5 бита) и 32x (1 бит).
Что Qdrant добавила к оригинальной статье
Из двух вариантов оригинальной работы Qdrant выбрала MSE — вариант без однобитной коррекции смещения скалярного произведения — и расширила его. Первое расширение — перенормировка длины, заимствованная у RaBitQ: у MSE есть устойчивое смещение, из-за которого квантованные векторы систематически короче исходных. В те же четыре байта, что уже зарезервированы под норму L2, записывается отношение исходной длины вектора к длине его реконструкции по центроиду, и коэффициент домножается обратно при скоринге.
Второе — покоординатная калибровка, компенсация анизотропии. Поворот выравнивает распределения только на изотропных данных, а на реальных эмбеддингах часть координат уходит за пределы фиксированной кодовой книги, и точность теряется. Qdrant исправляет это по сегментам: перед квантизацией один раз оценивается пара shift и scale для каждой координаты после поворота, данные возвращаются на сетку кодовой книги, а сама пара сохраняется в метаданных сегмента и переиспользуется всеми запросами к нему. Калибровочный проход выполняется один раз на сегмент и занимает секунды на продакшн-размерах, на каждый запрос он не влияет.
Третье — метрики. Оригинальный TurboQuant предполагает векторы на единичной сфере, то есть только косинусную близость; Qdrant сохраняет исходную норму L2 и делает косинус, скалярное произведение и L2 равноправными при том же формате хранения. Исключением остаётся метрика L1: случайный ортогональный поворот сохраняет норму L2, но не L1, и восстанавливать её на каждый запрос смысла нет — при L1 авторы советуют остаться на SQ.
Бенчмарки: где выигрыш, а где осторожность
Qdrant сравнила конфигурации на десяти наборах эмбеддингов — от arXiv и DBpedia до каталога H&M, изображений LAION и рекламных эмбеддингов — при индексе HNSW с параметрами m=16 и ef_construct=128. Четырёхбитный TQ4 назван конкурентом SQ при вдвое меньшем объёме хранения: на девяти наборах из десяти разрыв по полноте укладывается в 2,5 процентного пункта в любую сторону, на трёх из них (DBpedia с эмбеддингами OpenAI ada-002, Cohere и LAION) TQ4 обгоняет SQ, причём на dbp-oai — до 4,6 п.п. Единственное исключение — arxiv-384, где TQ4 отстаёт от SQ на 2,3 п.п. Компания объясняет это тем, что адаптивный четырёхбитный квантователь с компенсацией анизотропии выигрывает там, где сетка int8 плохо совпадает с распределением эмбеддингов.
Ниже по битам разрыв становится больше. Двухбитный TQ2 обыгрывает двухбитный BQ на 9–24 п.п. при том же 16-кратном хранении, а однобитный TQ1 — на 9–21 п.п. против однобитного BQ при 32-кратном. Против более сильной асимметричной конфигурации BQ (один бит хранения, восемь бит на запрос) преимущество сохраняется на всех наборах, но сужается — от 0,1 п.п. на Cohere, где результат практически равен, до 10 п.п. на LAION. В итоговой формулировке компании выигрыш над BQ составляет согласованные 10–20 процентных пунктов полноты на всех протестированных моделях эмбеддингов.
Автор разбора на Hugging Face построил сравнение иначе: те же документы и запросы, предвычисленные эмбеддинги Cohere embed-english-v3.0 размерности 1024, три набора BEIR — SciFact, ArguAna и NFCorpus — и шесть конфигураций: F32, SQ8, BQ1, BQ2, TQ1 и TQ4. Метрики взяты шире, чем у вендора: Precision, Recall и nDCG при том же HNSW. Качественный вывод совпадает с вендорским — TQ4 вдвое сокращает номинальный размер кода относительно SQ8 при похожем качестве поиска, а среди однобитных вариантов выигрывает TQ1. Но автор добавляет оговорку: перед переходом нужно измерить задержку и пропускную способность, потому что выигрыш в полноте может не оправдать замедление поиска.
Что это значит на практике
Переход описывается как смена конфигурации и переиндексация: TurboQuant включается опцией quantization_config, а остальной код приложения не меняется. Релиз доступен в Qdrant Cloud и в стандартном Docker-образе.
Рекомендация зависит от точки старта: при работе на SQ переход на TQ4 даёт сопоставимую полноту при половинной памяти, при работе на BQ — ту же память при большей полноте. Остаться на BQ авторы советуют в двух случаях: если наблюдается заметное падение пропускной способности на рабочей нагрузке или если выигрыш в полноте слишком мал, чтобы иметь практическое значение. Отдельная оговорка — поиск по сжатым кодам приблизителен, и разрыв закрывают расширенной выборкой кандидатов и rescoring по сохранённым исходным векторам.