Repolode
ashvardanian

ashvardanian/NumKong

15種類以上の数値型に対応し、距離・内積・行列演算をSIMDで高速化する数学カーネル。Python、Rust、C/C++、JS、Swift、Go向けのバインディングを提供します。

スター
1,907
フォーク
142
未解決の Issue
59
最終コミット
6 日前

これは何?

NumKongは、内積、距離・類似度の指標、行列乗算などのベクトル・行列演算を行う数値計算ライブラリです。カーネルはx86、Arm、RISC-V、LoongArch、Power、WebAssembly向けにSIMDを用いて手作業で最適化されており、4ビット整数や6ビット浮動小数点数から128ビット複素数まで、幅広い数値型を扱えます。内積などのリダクションでは、Float16からFloat32、Int8からInt32のように、より広い型で累算するため、結果が気づかないうちにオーバーフローすることはありません。

ライブラリはCで実装され、Python、Rust、C++、JavaScript、Swift、Go向けのバインディングを提供します。スレッドやメモリの管理は行わないため、呼び出し側がスレッドモデルとバッファを用意します。また、packed-matrix APIを使えば、重みを一度準備して複数のクエリで再利用できます。精度については拡張精度を使った基準値との比較を公開しており、複数のBLAS系代替ライブラリよりバイナリサイズが大幅に小さいことも報告しています。

NumKongは、ベクトル検索や情報検索、埋め込みの類似度計算、補償和が必要な科学計算、mini-floatや整数型を使う低精度推論のワークロードに適しています。

主な機能

  • 01主要なCPUおよびWASMターゲット向けに、内積、距離指標、行列乗算のSIMDカーネルを提供します。
  • 024ビット整数、6ビット・8ビット浮動小数点数、Float16、BFloat16、複素数など、15種類以上の数値型に対応します。
  • 03オーバーフローを防ぐためにより広い型で累算し、Float64では補償和を使用します。
  • 04Python、Rust、C/C++、JavaScript、Swift、Go向けのバインディングを提供します。
  • 05スレッド管理とメモリ確保は呼び出し側に任せるため、任意の並列化モデルやアロケータで利用できます。
  • 06データを一度準備して繰り返しクエリに使える、packed-matrix APIを提供します。

ユースケース

  • ベクトル検索向けに、大規模な埋め込み集合間のコサイン類似度やユークリッド距離を計算する。
  • Float8、Float16、Int8データを使った低精度推論カーネルを実行する。
  • 大規模なBLAS一式を導入せずに、PythonやRustのアプリケーションへ高速な距離計算を組み込む。
  • JavaScriptバインディングを介して、ブラウザやNode.jsで数値カーネルを実行する。

トピック

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

よくある質問

NumKong とは?
15種類以上の数値型に対応し、距離・内積・行列演算をSIMDで高速化する数学カーネル。Python、Rust、C/C++、JS、Swift、Go向けのバインディングを提供します。 NumKongは、内積、距離・類似度の指標、行列乗算などのベクトル・行列演算を行う数値計算ライブラリです。カーネルはx86、Arm、RISC-V、LoongArch、Power、WebAssembly向けにSIMDを用いて手作業で最適化されており、4ビット整数や6ビット浮動小数点数から128ビット複素数まで、幅広い数値型を扱えます。内積などのリダクションでは、Float16からFloat32、Int8からInt32のように、より広い型で累算するため、結果が気づかないうちにオーバーフローすることはありません。
NumKong は無料で使えますか?ライセンスは?
NumKong は Apache-2.0 ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
NumKong は今もメンテナンスされていますか?
活発にメンテナンス中。NumKong の最終コミットは 2026年10月31日 です。
NumKong は何に使えますか?
ベクトル検索向けに、大規模な埋め込み集合間のコサイン類似度やユークリッド距離を計算する。 Float8、Float16、Int8データを使った低精度推論カーネルを実行する。 大規模なBLAS一式を導入せずに、PythonやRustのアプリケーションへ高速な距離計算を組み込む。 JavaScriptバインディングを介して、ブラウザやNode.jsで数値カーネルを実行する。
NumKong はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/ashvardanian/NumKong

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト