
2026/04/04 23:53
**Show HN: TurboQuant‑WASM ― ブラウザ上で動く Google のベクトル量子化**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
(以下は日本語訳です)
Summary
この記事では、botirk38/turboquant の新しい実験的 WebAssembly ビルドを発表しています。これは npm パッケージ
turboquant-wasm として配布されます。このビルドは Zig 0.15.2 と Bun ツールチェーンのおかげで、Web ブラウザと Node.js の両方で動作します。WASM バイナリは緩和された SIMD 命令セット(@mulAdd FMA → f32x4.relaxed_madd)を使用し、ベクトル化された QJL 符号のパッキング/アンパックとスケーリングを実現します。簡易 TypeScript API(TurboQuant.init()、encode()、decode()、dot())により、開発者は高次元ベクトルを圧縮しつつ内積精度を保持できます;出力は金額値テストで検証され、オリジナルの Zig 参照と完全に一致します。
主な技術的詳細:
- 実行環境要件:Chrome 114+、Firefox 128+、Safari 18+;Node.js 20+。
- 圧縮性能:1024 次元ベクトルで約 4.5 ビット/次元(約 6 倍圧縮)。
- ドット積精度:
はデコードせずにドット積を計算し、単位ベクトルで dim = 128 の場合、平均絶対誤差 < 1.0。dot()
リリースは Google Research の TurboQuant 論文(ICLR 2026)を基盤としており、botirk38/turboquant のオリジナル Zig 実装に感謝しています。将来のアップデートではブラウザ/Node.js サポートの拡大や、より高い次元での圧縮率・誤差メトリックの改善が期待されます。Web とサーバー環境で効率的かつ忠実なベクトル圧縮を可能にすることで、
turboquant-wasm は開発者が帯域幅とストレージ負荷を削減しながら計算精度を維持できるよう支援します。本文
実験的 WASM + relaxed SIMD ビルド(botirk38/turboquant)のブラウザ・Node.js 用バージョン
Google Research の論文 TurboQuant: Online Vector Quantization with Near‑optimal Distortion Rate(ICLR 2026)に基づいています。
ライブデモ
ブラウザ上で動作するベクトル検索、画像類似度判定、および 3D ガウススプラッティング圧縮を体験できます。
このリリースの特徴
- npm パッケージ:WASM が埋め込まれた
をturboquant-wasm
でインストールnpm install turboquant-wasm - Relaxed SIMD:
は@mulAdd FMA
にマップf32x4.relaxed_madd - SIMD ベクトル化された QJL の符号パッキング/アンパックとスケーリング
- TypeScript API:
TurboQuant.init() / encode() / decode() / dot() - ゴールデンテスト:参照 Zig 実装とのバイト単位で同一の出力を保証
ブラウザ/Node.js 要件
| ランタイム | 最小バージョン |
|---|---|
| Chrome | 114+ |
| Firefox | 128+ |
| Safari | 18+ |
| Node.js | 20+ |
WASM バイナリは relaxed SIMD 命令を使用しています。
クイックスタート
import { TurboQuant } from "turboquant-wasm"; const tq = await TurboQuant.init({ dim: 1024, seed: 42 }); // ベクトルの圧縮(≈ 4.5 bits/dim、約6倍圧縮) const compressed = tq.encode(myFloat32Array); // 復号 const decoded = tq.decode(compressed); // 復号せずに高速ドット積計算 const score = tq.dot(queryVector, compressed); tq.destroy();
API
class TurboQuant { static async init(config: { dim: number; seed: number }): Promise<TurboQuant>; encode(vector: Float32Array): Uint8Array; decode(compressed: Uint8Array): Float32Array; dot(query: Float32Array, compressed: Uint8Array): number; destroy(): void; }
ビルド手順
# テスト実行(Zig 0.15.2 必須) zig test -target aarch64-macos src/turboquant.zig # npm パッケージ全体ビルド(Zig → wasm‑opt → base64 埋め込み → Bun + tsc) bun run build # WASM のみビルド bun run build:zig
Zig 0.15.2 と Bun が必要です。
品質保証
- エンコードは内積を保全
- ユニットベクトルで MSE は次元が増えるほど低下
- bits/dim ≈ 4.5(ヘッダー22バイト除く)
- 内積保持:平均絶対誤差 < 1.0(dim = 128 のユニットベクトルで)
- ビット単位で同一:
と同じ入力・シードの場合、出力は完全に一致botirk38/turboquant
クレジット
– 元の Zig 実装botirk38/turboquant- TurboQuant 論文(Google Research, ICLR 2026)– アルゴリズム設計
ライセンス
MIT