Biblioteca open source otimizada de álgebra linear BLAS e LAPACK para várias arquiteturas de CPU, sem suporte a GPUs.
ashvardanian/NumKong
Kernels matemáticos acelerados por SIMD para distâncias, produtos escalares e operações com matrizes em mais de 15 tipos numéricos, com bindings para Python, Rust, C/C++, JS, Swift e Go.
- Estrelas
- 1,907
- Forks
- 142
- Issues abertas
- 59
- Último commit
- há 6 dias
O que é?
NumKong é uma biblioteca numérica para operações com vetores e matrizes, como produtos escalares, métricas de distância e similaridade e multiplicação de matrizes. Seus kernels são ajustados manualmente com SIMD para x86, Arm, RISC-V, LoongArch, Power e WebAssembly, e abrangem tipos numéricos que vão de inteiros de 4 bits e floats de 6 bits a números complexos de 128 bits. Produtos escalares e reduções relacionadas acumulam valores em tipos mais largos, como Float16 para Float32 ou Int8 para Int32, para evitar que os resultados estourem silenciosamente.
A biblioteca é escrita em C e oferece bindings para Python, Rust, C++, JavaScript, Swift e Go. Ela não gerencia threads nem memória: quem a utiliza fornece seu próprio modelo de threading e buffers, e as APIs de matrizes compactadas permitem preparar os pesos uma vez e reutilizá-los em várias consultas. O projeto documenta sua precisão em comparação com referências de precisão estendida e relata um tamanho de binário muito menor que o de várias alternativas no estilo BLAS.
NumKong é adequado para busca e recuperação vetorial, cálculo de similaridade entre embeddings, computação científica que exige soma compensada e cargas de inferência de baixa precisão que usam mini-float ou tipos inteiros.
Recursos principais
- 01Oferece kernels SIMD para produtos escalares, métricas de distância e multiplicação de matrizes nos principais alvos de CPU e WASM.
- 02Suporta mais de 15 tipos numéricos, incluindo inteiros de 4 bits, floats de 6 e 8 bits, Float16, BFloat16 e números complexos.
- 03Acumula valores em tipos mais largos para evitar overflow e usa soma compensada para Float64.
- 04Oferece bindings para Python, Rust, C/C++, JavaScript, Swift e Go.
- 05Deixa o gerenciamento de threads e a alocação de memória a cargo de quem usa a biblioteca, permitindo trabalhar com qualquer modelo de paralelismo ou alocador.
- 06Oferece APIs de matrizes compactadas que preparam os dados uma vez para consultas repetidas.
Casos de uso
- Calcular similaridade por cosseno ou distância euclidiana entre grandes conjuntos de embeddings para busca vetorial.
- Executar kernels de inferência de baixa precisão com dados Float8, Float16 ou Int8.
- Incorporar cálculos rápidos de distância a uma aplicação Python ou Rust sem adicionar uma stack BLAS grande.
- Executar kernels numéricos em navegadores ou no Node.js por meio do binding para JavaScript.
Tópicos
Perguntas frequentes
- O que é NumKong?
- Kernels matemáticos acelerados por SIMD para distâncias, produtos escalares e operações com matrizes em mais de 15 tipos numéricos, com bindings para Python, Rust, C/C++, JS, Swift e Go. NumKong é uma biblioteca numérica para operações com vetores e matrizes, como produtos escalares, métricas de distância e similaridade e multiplicação de matrizes. Seus kernels são ajustados manualmente com SIMD para x86, Arm, RISC-V, LoongArch, Power e WebAssembly, e abrangem tipos numéricos que vão de inteiros de 4 bits e floats de 6 bits a números complexos de 128 bits. Produtos escalares e reduções relacionadas acumulam valores em tipos mais largos, como Float16 para Float32 ou Int8 para Int32, para evitar que os resultados estourem silenciosamente.
- NumKong é gratuito? Qual é a licença?
- NumKong é open source sob a licença Apache-2.0. Confira os termos da licença antes de usá-lo em produtos comerciais.
- NumKong ainda é mantido?
- Manutenção ativa. O último commit de NumKong foi em 31 de out. de 2026.
- Para que posso usar NumKong?
- Calcular similaridade por cosseno ou distância euclidiana entre grandes conjuntos de embeddings para busca vetorial. Executar kernels de inferência de baixa precisão com dados Float8, Float16 ou Int8. Incorporar cálculos rápidos de distância a uma aplicação Python ou Rust sem adicionar uma stack BLAS grande. Executar kernels numéricos em navegadores ou no Node.js por meio do binding para JavaScript.
- Onde consigo NumKong?
- O código-fonte e as instruções de instalação estão no GitHub: https://github.com/ashvardanian/NumKong
Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.
Projetos relacionados
Um índice vetorial em processo para Python e Rust que comprime embeddings para 2 ou 4 bits por dimensão com TurboQuant e faz buscas diretamente nos dados comprimidos.
Biblioteca C++ header-only acelerada por CUDA, com wrappers em Python de primitivas reutilizáveis para machine learning, álgebra linear e recuperação de informação em GPUs NVIDIA.
Biblioteca C++ de arquivo único para busca aproximada de vizinhos mais próximos e clustering de vetores, com bindings para Python, JavaScript, Rust, Java, Go, Swift e outras linguagens.
Framework de inferência de redes neurais de alto desempenho em C++ para executar modelos de deep learning em dispositivos móveis, embarcados e desktop.
Biblioteca otimizada para GPU e scripts de referência para treinar grandes modelos transformer com paralelismo multidimensional.