Repolode
ashvardanian

ashvardanian/NumKong

Kernels matemáticos acelerados con SIMD para distancias, productos punto y operaciones con matrices en más de 15 tipos numéricos, con bindings para Python, Rust, C/C++, JS, Swift y Go.

Estrellas
1,907
Forks
142
Issues abiertos
59
Último commit
hace 7 días

¿Qué es?

NumKong es una biblioteca numérica para operaciones con vectores y matrices, como productos punto, métricas de distancia y similitud, y multiplicación de matrices. Sus kernels están optimizados a mano con SIMD para x86, Arm, RISC-V, LoongArch, Power y WebAssembly, y admiten tipos numéricos que van desde enteros de 4 bits y flotantes de 6 bits hasta números complejos de 128 bits. Los productos punto y otras reducciones similares acumulan los valores en tipos más amplios, como Float16 en Float32 o Int8 en Int32, para evitar desbordamientos silenciosos.

La biblioteca está escrita en C y ofrece bindings para Python, Rust, C++, JavaScript, Swift y Go. No gestiona por sí misma los hilos ni la memoria: quienes la usan proporcionan su propio modelo de concurrencia y sus propios buffers, y las API de matrices empaquetadas permiten preparar los pesos una sola vez y reutilizarlos en muchas consultas. El proyecto documenta su precisión frente a referencias de precisión extendida e informa que su binario es mucho más pequeño que el de varias alternativas de estilo BLAS.

NumKong es adecuada para búsqueda y recuperación vectorial, cálculo de similitud entre embeddings, computación científica que requiere suma compensada y cargas de inferencia de baja precisión que utilizan tipos mini-float o enteros.

Funciones clave

  • 01Ofrece kernels SIMD para productos punto, métricas de distancia y multiplicación de matrices en las principales plataformas de CPU y WASM.
  • 02Admite más de 15 tipos numéricos, incluidos enteros de 4 bits, flotantes de 6 y 8 bits, Float16, BFloat16 y números complejos.
  • 03Acumula los valores en tipos más amplios para evitar desbordamientos y usa suma compensada para Float64.
  • 04Ofrece bindings para Python, Rust, C/C++, JavaScript, Swift y Go.
  • 05Deja los hilos y la asignación de memoria a quien la usa, por lo que funciona con cualquier modelo de paralelismo o asignador.
  • 06Ofrece API de matrices empaquetadas que permiten preparar los datos una sola vez para consultas repetidas.

Casos de uso

  • Calcular la similitud coseno o euclidiana entre grandes conjuntos de embeddings para búsqueda vectorial.
  • Ejecutar kernels de inferencia de baja precisión con datos Float8, Float16 o Int8.
  • Integrar cálculos rápidos de distancia en una aplicación de Python o Rust sin incorporar una pila BLAS de gran tamaño.
  • Ejecutar kernels numéricos en navegadores o Node.js mediante el binding de JavaScript.

Temas

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

Preguntas frecuentes

¿Qué es NumKong?
Kernels matemáticos acelerados con SIMD para distancias, productos punto y operaciones con matrices en más de 15 tipos numéricos, con bindings para Python, Rust, C/C++, JS, Swift y Go. NumKong es una biblioteca numérica para operaciones con vectores y matrices, como productos punto, métricas de distancia y similitud, y multiplicación de matrices. Sus kernels están optimizados a mano con SIMD para x86, Arm, RISC-V, LoongArch, Power y WebAssembly, y admiten tipos numéricos que van desde enteros de 4 bits y flotantes de 6 bits hasta números complejos de 128 bits. Los productos punto y otras reducciones similares acumulan los valores en tipos más amplios, como Float16 en Float32 o Int8 en Int32, para evitar desbordamientos silenciosos.
¿NumKong es gratuito? ¿Qué licencia tiene?
NumKong es open source bajo la licencia Apache-2.0. Revisa los términos de la licencia antes de usarlo en productos comerciales.
¿NumKong sigue mantenido?
Mantenimiento activo. El último commit de NumKong fue el 31 oct 2026.
¿Para qué puedo usar NumKong?
Calcular la similitud coseno o euclidiana entre grandes conjuntos de embeddings para búsqueda vectorial. Ejecutar kernels de inferencia de baja precisión con datos Float8, Float16 o Int8. Integrar cálculos rápidos de distancia en una aplicación de Python o Rust sin incorporar una pila BLAS de gran tamaño. Ejecutar kernels numéricos en navegadores o Node.js mediante el binding de JavaScript.
¿Dónde consigo NumKong?
El código fuente y las instrucciones de instalación están en GitHub: https://github.com/ashvardanian/NumKong

Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.

Proyectos relacionados