Модели и платформы ИИ
В Faiss 1.16.0 от Meta добавлен E-Means для ускорения кластеризации больших массивов данных

Сопровождающие Faiss специалисты Meta выпустили версию 1.16.0 10 ноября 2026 года. В неё вошёл алгоритм кластеризации e-means от FAIR at Meta с реализациями для CPU, GPU и распределённых систем. По данным исследователей, алгоритм достигает значения функции потерь ниже, чем у k-means Ллойда, за 1,4–2,6 эпохи вместо 25, а ускорение по времени работы на GPU относительно сравниваемых реализаций составляет 10–45×.
Релиз программы последовал за подачей препринта исследования на arXiv 6 ноября 2026 года и не стал первым публичным представлением алгоритма. Исследование выполнено специалистами FAIR at Meta и École Nationale des Ponts et Chaussées.
В версии 1.16.0 появились эталонные реализации e-means, распределённое обучение и обучение с разбиением центроидов по шардам, бэкенды назначения Triton и CuTe, назначение с пониженной точностью и тесты для воспроизведения результатов исследования. В релиз также вошли демонстрационные примеры с DINO, в которых данные либо остаются в памяти, либо считываются с SSD.
Как E-Means обновляет центроиды
Алгоритм k-means ищет центроиды, минимизирующие среднее квадратичное расстояние между векторами и ближайшими к ним центроидами. Его применяют для поиска, квантования и подготовки данных. Алгоритм Ллойда назначает каждую точку ближайшему центроиду, а затем пересчитывает сумму векторов и количество точек в каждом кластере по всему набору данных. В отличие от него, e-means обновляет экспоненциально затухающие суммы и количества на мини-пакетах, поэтому влияние более ранних назначений постепенно ослабевает; каждый центроид по-прежнему равен отношению текущей суммы векторов к текущему количеству точек. Если использовать весь набор данных как один пакет и задать шаг 1, получится одна итерация алгоритма Ллойда.
Два подобранных закона масштабирования определяют размер пакета и начальный шаг на основе размера набора данных, количества кластеров и заданного бюджета эпох, устраняя необходимость в отдельном переборе гиперпараметров, который требовался для прежних подходов с мини-пакетами. При косинусном расписании шаг уменьшается до одной десятой от начального значения. В выпущенном классе по умолчанию задано пять проходов обучения; можно также указать дробное число проходов.
Авторы подобрали законы масштабирования на основе 75 000 запусков оптимизации для конфигураций DEEP. По их данным, медианное превышение ошибки на отложенных наборах данных — то есть ошибка сверх результата при наилучшей настройке из сетки — составляет 0,07% для закона выбора шага и 0,19% для используемого по умолчанию закона выбора размера пакета. Алгоритм также восстанавливает недостаточно заполненные кластеры, разделяя кластер-донор, а затем завершает работу, вычисляя точное среднее для каждого кластера по назначениям последней эпохи. Отдельный вариант финализации с медленно меняющимся скользящим средним вместо этого нацелен на ошибку на новых данных.
Тестирование охватывает до десяти миллиардов векторов
В полной версии статьи описана проверка на наборах данных с эмбеддингами и синтетических данных. Основные сравнения на GPU проводились на H100 с 80 ГБ памяти, а эксперименты на CPU — на Xeon Platinum 8462Y+ с 64 ядрами. В 11 тестах на эмбеддингах VIBE, по данным авторов, e-means требовалось 1,6–2,6 эпохи, чтобы достичь ошибки алгоритма Ллойда после 25 эпох. Ускорение относительно Flash-KMeans на одной H100 составило 8,0–22,8×, а относительно Faiss на CPU с 64 ядрами — 9,0–15,0×; для каждого теста использовалось 20 разных начальных значений генератора случайных чисел.
В самом крупном эксперименте авторы разбили DINO10B — набор из 10 миллиардов эмбеддингов патчей DINO размерностью 1 024 — на приблизительно 16,7 миллиона кластеров за 2,5 эпохи, используя точное назначение. Ошибка на тестовых данных оказалась немного ниже, чем у базового варианта с алгоритмом Ллойда после 25 эпох. Этот запуск потребовал 779 GPU-часов на 32 машинах. В отдельном запуске с приближённым поиском ближайшего центроида через индекс инвертированных файлов (IVF) результат базового варианта был превзойдён после трёх эпох; запуск потребовал 23,2 GPU-часа на одной машине с восемью GPU. Подход IVF ищет центроиды только в выбранных группах, а не сравнивает каждую точку со всеми центроидами.
Согласно статье, при работе с десятью миллиардами векторов назначение через IVF обходится в 34 раза дешевле точного, однако при 100 миллионах векторов преимуществ не даёт. Это показывает, почему одного лишь числа эпох недостаточно для оценки требований к инфраструктуре: необходимый для запуска объём аппаратных ресурсов зависит от реализации и метода назначения.
Доступность и документированные ограничения
В официальном руководстве пользователя приведены NumpyEmeans для данных NumPy и Emeans для тензоров PyTorch. Сам Faiss поддерживает только выполнение на CPU; для работы на GPU требуется PyTorch с поддержкой CUDA. Ядра CuTe доступны на H100 и H200, а Triton — на других поддерживаемых современных GPU NVIDIA. Пониженная точность используется на GPU только при назначении ближайших центроидов; центроиды, текущие суммы и возвращаемые расстояния по-прежнему представлены в формате FP32. Классы с реплицированными и разделёнными на шарды центроидами поддерживают обучение на нескольких GPU. В статье отмечается, что суммы FP32 для 16 миллионов центроидов занимают 64 ГиБ, поэтому при таком масштабе необходимо распределять данные по шардам.
Законы масштабирования настраивались для относительно высокоразмерных данных и не оптимальны для очень низкоразмерных или небольших наборов. Поэтому в выпущенной версии по умолчанию для размерности 16 и ниже выбирается закон выбора размера пакета, ориентированный на качество, а для размерности 2 и ниже отключается восстановление кластеров. В руководстве также предупреждают, что возвращаемые метки обучения соответствуют последнему проходу и не обязательно отражают назначения относительно итоговых центроидов. Кроме того, реализация для GPU не проверяет входные данные на наличие значений NaN или бесконечности.
Для конвейеров ИИ, в которых кластеризуются большие коллекции эмбеддингов, этот релиз наглядно демонстрирует компромисс: библиотека с поддержкой и сопровождением позволяет сократить число проходов обучения, однако наибольшее снижение затрат GPU зависит от масштаба задачи, аппаратного обеспечения и того, подходит ли для неё приближённое назначение.












