Repolode
ashvardanian

ashvardanian/NumKong

SIMD-ускоренные математические ядра для вычисления расстояний, скалярных произведений и матричных операций с 15+ числовыми типами и привязками для Python, Rust, C/C++, JS, Swift и Go.

Звёзды
1,908
Форки
142
Открытые issues
59
Последний коммит
7 дней назад

Что это?

NumKong — библиотека для численных вычислений с векторами и матрицами, включая скалярные произведения, метрики расстояния и сходства, а также умножение матриц. Её ядра вручную оптимизированы с использованием SIMD для x86, Arm, RISC-V, LoongArch, Power и WebAssembly и поддерживают числовые типы от 4-битных целых чисел и 6-битных чисел с плавающей точкой до 128-битных комплексных чисел. Скалярные произведения и связанные с ними операции редукции накапливают результат в типах большей разрядности — например, Float16 в Float32 или Int8 в Int32, — поэтому переполнение не происходит незаметно.

Библиотека написана на C и предоставляет привязки для Python, Rust, C++, JavaScript, Swift и Go. Она сама не управляет потоками или памятью: вызывающий код задаёт модель многопоточности и передаёт буферы, а API упакованных матриц позволяют подготовить веса один раз и повторно использовать их для множества запросов. В проекте описана точность относительно эталонных вычислений с расширенной точностью, а также указано, что размер бинарного файла намного меньше, чем у нескольких альтернатив в стиле BLAS.

NumKong подходит для векторного поиска и извлечения данных, вычисления сходства эмбеддингов, научных вычислений с компенсированным суммированием и инференса с низкой точностью, использующего mini-float или целочисленные типы.

Ключевые возможности

  • 01Предоставляет SIMD-ядра для скалярных произведений, метрик расстояния и умножения матриц на основных CPU-архитектурах и WASM.
  • 02Поддерживает более 15 числовых типов, включая 4-битные целые числа, 6- и 8-битные числа с плавающей точкой, Float16, BFloat16 и комплексные числа.
  • 03Накапливает результаты в типах большей разрядности, чтобы избежать переполнения, и использует компенсированное суммирование для Float64.
  • 04Предоставляет привязки для Python, Rust, C/C++, JavaScript, Swift и Go.
  • 05Оставляет управление потоками и выделением памяти вызывающему коду, поэтому библиотека совместима с любой моделью параллелизма и любым аллокатором.
  • 06Предоставляет API упакованных матриц для однократной подготовки данных с последующей обработкой множества запросов.

Сценарии использования

  • Вычисление косинусного или евклидова сходства между большими наборами эмбеддингов для векторного поиска.
  • Запуск ядер инференса с низкой точностью на данных Float8, Float16 или Int8.
  • Встраивание быстрых вычислений расстояний в приложение на Python или Rust без подключения большой библиотеки BLAS.
  • Запуск численных ядер в браузерах или Node.js через привязку для JavaScript.

Темы

#simd#linear-algebra#vector-search#matrix-multiplication#blas#mixed-precision#distance-metrics#arm-neon#assembly#cpp

Частые вопросы

Что такое NumKong?
SIMD-ускоренные математические ядра для вычисления расстояний, скалярных произведений и матричных операций с 15+ числовыми типами и привязками для Python, Rust, C/C++, JS, Swift и Go. NumKong — библиотека для численных вычислений с векторами и матрицами, включая скалярные произведения, метрики расстояния и сходства, а также умножение матриц. Её ядра вручную оптимизированы с использованием SIMD для x86, Arm, RISC-V, LoongArch, Power и WebAssembly и поддерживают числовые типы от 4-битных целых чисел и 6-битных чисел с плавающей точкой до 128-битных комплексных чисел. Скалярные произведения и связанные с ними операции редукции накапливают результат в типах большей разрядности — например, Float16 в Float32 или Int8 в Int32, — поэтому переполнение не происходит незаметно.
NumKong можно использовать бесплатно? Какая у него лицензия?
NumKong распространяется с открытым исходным кодом под лицензией Apache-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
NumKong всё ещё поддерживается?
Активно поддерживается. Последний коммит в NumKong — 31 окт. 2026 г..
Для чего можно использовать NumKong?
Вычисление косинусного или евклидова сходства между большими наборами эмбеддингов для векторного поиска. Запуск ядер инференса с низкой точностью на данных Float8, Float16 или Int8. Встраивание быстрых вычислений расстояний в приложение на Python или Rust без подключения большой библиотеки BLAS. Запуск численных ядер в браузерах или Node.js через привязку для JavaScript.
Где скачать NumKong?
Исходный код и инструкции по установке — на GitHub: https://github.com/ashvardanian/NumKong

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты

Header-only библиотека C++ с ускорением на CUDA и Python-обёртками для переиспользуемых примитивов машинного обучения, линейной алгебры и информационного поиска на GPU NVIDIA.

1,1 тыс.+3 за неделю256CudaApache-2.0Активно поддерживаетсяОбновлён 24 часа назад

Однофайловая библиотека на C++ для приближённого поиска ближайших соседей и кластеризации векторов с биндингами для Python, JavaScript, Rust, Java, Go, Swift и других языков.

4,4 тыс.+6 за неделю372C++Apache-2.0Активно поддерживаетсяОбновлён 7 дней назад