Новая модель EmbeddingGemma 2 от Google может работать на телефоне. Модель очень легкая, но векторы требуют собственного «чемодана». При объеме в 10 миллионов документов только полноразмерные векторы в формате float32 занимают 30,7 ГБ оперативной памяти.
Мы получили ранний доступ перед сегодняшним релизом Google DeepMind и протестировали, сколько памяти можно сэкономить в Qdrant. Квантованные полноразмерные векторы сохранили 99% качества поиска при использовании в 30 раз меньшего объема оперативной памяти. Более короткие векторы с переранжированием (rescoring) позволили сократить потребление оперативной памяти в 77 раз при сохранении 94,5% качества.
Мы попробовали оба способа экономии памяти: использование более коротких векторов и уменьшение количества бит на измерение. На графике они сравниваются с точным поиском по полноразмерным векторам float32 на пяти наборах данных для текстового поиска. Качество — это процент сохраненного показателя nDCG@10 от базового уровня, который оценивает, насколько хорошо топ-10 результатов ранжируют релевантные документы.
Сохраненный nDCG@10 в зависимости от оперативной памяти для векторов, 1-битный TurboQuant, % от точного поиска float32 768d, 0, 20, 40, 60, 80, 100, float32, 768d, базовый уровень, 100.0, в 30 раз меньше RAM, 768d, без переранжирования, 99.0, в 30 раз меньше RAM, 768d, с переранжированием, 99.7, в 43 раза меньше RAM, 512d, без переранжирования, 97.3, в 43 раза меньше RAM, 512d, с переранжированием, 98.8, в 77 раз меньше RAM, 256d, без переранжирования, 88.1, в 77 раз меньше RAM, 256d, с переранжированием, 94.5, % сохраненного nDCG@10 (переранжирование: избыточная выборка 4)
EmbeddingGemma 2 — это открытая модель эмбеддингов, построенная на базе Gemma 4. Она отображает текст, код, изображения, видео и аудио в единое 768-мерное пространство. Ее путь только для текста содержит 270 млн параметров. Google сообщает о 14% приросте качества поиска по коду по сравнению с первой версией EmbeddingGemma и контекстном окне на 8 тысяч токенов.
Обучение представлений Matryoshka (Matryoshka Representation Learning) позволяет сохранять первые 512, 256 или 128 измерений без повторного создания эмбеддингов ваших данных. Эти первые измерения остаются полезными сами по себе. Квантование позволяет сэкономить еще больше памяти за счет хранения каждого измерения с использованием меньшего количества бит.
Начните с полноразмерных 1-битных векторов
С этого мы бы и начали: сохраните все 768 измерений, используйте 1-битный TurboQuant и оставьте переранжирование выключенным. Каждый вектор занимает 104 байта вместо 3072. Это позволяет разместить векторы для 10 миллионов документов примерно в 1 ГБ оперативной памяти.
Отключение переранжирования также позволяет избежать чтения исходных векторов во время поиска. На 523 тысячах документов Quora эта настройка потребовала менее половины времени выполнения запроса по сравнению с поиском float32 и сохранила 99,0% качества поиска.
Высокая релевантность не означает идентичные результаты. Без переранжирования около 74% результатов из топ-10 совпали с точным поиском. Попробуйте переранжирование, если вашему приложению критически важно находить те же самые ближайшие соседи.
Сокращение размерности кажется очевидным способом экономии памяти. В этих тестах мы бы сначала уменьшили количество бит. При 72 байтах на вектор 512 измерений с 1 битом сохранили 97,3% базового уровня. При аналогичном бюджете памяти 128-мерная 4-битная настройка сохранила 84,0%. Попробуйте сначала сохранить больше измерений, но сильнее сжать каждое из них.
Поместитесь в 77 раз меньший объем оперативной памяти с помощью переранжирования
Если вы считаете каждый байт, стоит обратить внимание на 256 измерений. Оставьте 1-битный TurboQuant. Каждый вектор занимает 40 байт в оперативной памяти. С переранжированием эта настройка сохранила 94,5% базового уровня. Без него показатель упал до 88,1%. Если полноразмерная настройка все еще требует слишком много оперативной памяти, стоит протестировать этот вариант. Проверьте, подходят ли вашему приложению потеря релевантности и время на переранжирование.
Типы данных векторов в Qdrant позволяют хранить исходные данные в формате float16 или turbo4 для экономии места на диске. Мы еще не пробовали эти варианты. Это тема для другого эксперимента.
Попробуйте на своих данных
Начните с базовой конфигурации: полноразмерные векторы, 1-битный TurboQuant, переранжирование выключено. Она показала себя достаточно хорошо, чтобы стать первым тестом. Сравните релевантность и задержку с неквантованной коллекцией на ваших собственных запросах. Попробуйте переранжирование, если вам нужно лучшее восстановление соседей. Сокращайте векторы, если вам все еще нужно экономить память.
Благодарности
Спасибо Google DeepMind за EmbeddingGemma 2 и за ранний доступ к модели.










