TurboQuant-WASM: Mang công nghệ lượng tử hóa vector của Google vào trình duyệt

04 tháng 4, 2026·3 phút đọc

TurboQuant-WASM là bản dựng WebAssembly thử nghiệm giúp nén các vector nhúng (embeddings) gấp 6 lần trực tiếp trên trình duyệt, dựa trên nghiên cứu của Google. Công cụ này cho phép tìm kiếm và xử lý dữ liệu AI ngay trên client mà không cần tải về các tệp dữ liệu khổng lồ, giúp tối ưu hóa hiệu năng cho ứng dụng web.

TurboQuant-WASM: Mang công nghệ lượng tử hóa vector của Google vào trình duyệt

TurboQuant-WASM là phiên bản WebAssembly (WASM) thử nghiệm kết hợp với tập lệnh "relaxed SIMD", được xây dựng dựa trên dự án botirk38/turboquant để chạy trên trình duyệt và Node.js. Công cụ này dựa trên bài báo nghiên cứu "TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate" từ Google Research (ICLR 2026).

NPM VersionNPM Version

Tại sao cần TurboQuant?

Các chỉ mục nhúng (embedding indexes) dưới dạng Float32 thường có kích thước rất lớn. Ví dụ, với 1 triệu vector có chiều dữ liệu là 384, dung lượng sẽ lên tới 1,5GB. Dung lượng này không thể vừa với bộ nhớ RAM của các thiết bị di động, mất nhiều phút để tải xuống và việc nén bằng gzip chỉ giúp giảm khoảng 7% do entropy của dữ liệu Float32 quá cao.

TurboQuant giải quyết vấn đề này bằng cách nén dữ liệu gấp 6 lần (từ 1,5GB xuống còn 240MB). Điểm đặc biệt là công cụ cho phép tìm kiếm trực tiếp trên dữ liệu đã nén mà không cần bước giải nén. Hơn nữa, không cần bước huấn luyện (training step) như các phương pháp PQ/OPQ; bạn chỉ cần khởi tạo và mã hóa bất kỳ vector nào ngay lập tức.

Các tính năng chính

Dự án này bổ sung nhiều cải tiến quan trọng so với bản gốc:

  • Gói NPM tích hợp WASM: Dễ dàng cài đặt và nhúng vào dự án thông qua npm install turboquant-wasm.
  • Hỗ trợ Relaxed SIMD: Ánh xạ lệnh FMA (@mulAdd) thành f32x4.relaxed_madd để tối ưu hóa tốc độ xử lý.
  • Vector hóa QJL: Hỗ trợ đóng gói/gỡ gói (packing/unpacking) và scaling hiệu quả.
  • API TypeScript: Cung cấp giao diện dễ sử dụng với các phương thức TurboQuant.init(), encode(), decode(), và dot().
  • Kiểm tra chất lượng (Golden-value tests): Đảm bảo đầu ra tương đồng hoàn toàn (byte-identical) với bản tham chiếu bằng Zig.

Yêu cầu hệ thống

Vì tệp nhị phân WASM sử dụng các hướng dẫn relaxed SIMD, người dùng cần có phiên bản runtime tối thiểu sau:

RuntimePhiên bản tối thiểu
Chrome114+
Firefox128+
Safari18+
Node.js20+

Hiệu suất và Chất lượng

Theo các bài kiểm tra, TurboQuant duy trì được tích trong (inner products) với độ chính xác cao. Sai số tuyệt đối trung bình cho tích vectơ của các vector đơn vị ở chiều 128 nhỏ hơn 1,0. Đặc biệt, tính năng tìm kiếm theo lô (batch search) nhanh hơn 83 lần so với việc lặp qua từng vector sử dụng vòng lặp dot() thông thường.

Gzip SizeGzip Size

Hướng dẫn sử dụng nhanh

Dưới đây là ví dụ về cách sử dụng API của TurboQuant-WASM:

import { TurboQuant } from "turboquant-wasm";

// Khởi tạo với chiều vector và seed
const tq = await TurboQuant.init({ dim: 1024, seed: 42 });

// Nén một vector (~4.5 bits/dim, nén ~6 lần)
const compressed = tq.encode(myFloat32Array);

// Giải nén trở lại (nếu cần hiển thị)
const decoded = tq.decode(compressed);

// Tính tích chấm nhanh mà không cần giải nén
const score = tq.dot(queryVector, compressed);

// Tìm kiếm theo lô: một cuộc gọi WASM cho tất cả các vector
// (Nhanh hơn 83 lần so với việc lặp dot())
const allCompressed = new Uint8Array(/* các vector đã nén được nối lại */);
const scores = tq.dotBatch(queryVector, allCompressed, bytesPerVector);

// Dọn dẹp bộ nhớ khi không dùng nữa
tq.destroy();

Thông tin xây dựng

Dự án được cấp phép MIT và yêu cầu Zig 0.15.2 cùng Bun để tiến hành xây dựng (build). Để chạy thử nghiệm hoặc build toàn bộ gói npm, người dùng có thể sử dụng các lệnh tương ứng được cung cấp trong tài liệu của dự án.

LicenseLicense

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗