TL;DR

Bạn có thể export Small Language Models sang ONNX và chạy chúng trực tiếp trong trình duyệt bằng WebGPU - không cần server, không cần API key, không tốn tiền mỗi request. Liquid AI vừa open-source LiquidONNX, bộ tool chính thức để export LFM2/LFM2.5 sang ONNX và chạy inference trên web, edge, và thiết bị đầu cuối. Hỗ trợ đầy đủ text, vision-language, audio, và Mixture-of-Experts.

LiquidONNX - ONNX export và inference tool cho LFM models

Vấn đề với cloud API

Phần lớn AI engineer hiện tại đang build theo pattern quen thuộc: gửi request lên API - nhận kết quả về - render cho user. Pattern này hoạt động tốt... cho đến khi gặp những ràng buộc thực tế:

  • Data nhạy cảm không thể rời thiết bị: y tế, pháp lý, tài chính - nhiều use case không thể gửi dữ liệu lên server bên thứ ba
  • Chi phí scale theo user: mỗi inference là một lần billing, margin ăn dần khi lượng request tăng
  • Latency không kiểm soát được: network round-trip + queue time của provider = trải nghiệm khó đoán
  • Rate limit chặn throughput: burst traffic gặp 429, phải xử lý retry logic phức tạp
  • Offline là không thể: mất internet đồng nghĩa mất tính năng

Câu trả lời không phải là build thêm server - mà là chuyển inference hoàn toàn sang GPU của chính user, ngay trong tab trình duyệt.

Cơ chế hoạt động

Stack hoàn chỉnh gồm 3 lớp phối hợp với nhau:

  1. LiquidONNX - export LFM2/LFM2.5 (text, VL, audio, MoE) sang định dạng ONNX với nhiều mức quantization: fp32, fp16, q4, q8. Tool tự kiểm tra ONNX export so với PyTorch reference để đảm bảo accuracy
  2. ONNX Runtime Web v1.17+ - JavaScript runtime với WebGPU Execution Provider (EP). Dùng compute shaders để tận dụng GPU song song; hỗ trợ IO Binding (giữ tensor trên GPU xuyên suốt inference chain, tránh copy CPU-GPU tốn kém)
  3. Transformers.js v3 - abstraction layer phổ biến nhất, WebGPU acceleration mặc định, fallback tự động về WASM nếu browser không hỗ trợ

Khi user mở app lần đầu, model ONNX download về và cache vào IndexedDB hoặc Cache API. Các lần sau load tức thì. Inference chạy trong Web Worker tách biệt khỏi main UI thread - UI không bị đơ dù model đang xử lý.

Những gì bạn có thể làm

Tất cả chạy 100% client-side, không cần backend:

ModalityModel ví dụKích thước (q4)
Text generationLFM2-1.2B-ONNX~600MB
Vision-LanguageLFM2.5-VL-1.6B-ONNX~900MB
Audio (ASR + TTS)LFM2.5-Audio-1.5B-ONNX~900MB
MoE (8.3B tổng, 1.5B active)LFM2-8B-A1B-ONNX~2GB

Ngoài ra có các variant fine-tuned cho task cụ thể: RAG, Math, Tool-calling, dịch EN-JP. Toàn bộ đã được pre-export sẵn trên HuggingFace từ LiquidAIonnx-community - không cần tự export nếu chỉ muốn dùng.

Browser vs Cloud API: So sánh thẳng

Tiêu chíWebGPU BrowserCloud API
Data privacy100% on-deviceGửi lên server ngoài
LatencyKhông có network round-tripOverhead mỗi request
Chi phí inference$0 sau khi downloadPer-request billing
OfflineHoạt động sau khi cacheCần internet ổn định
Rate limitChỉ giới hạn bởi GPU userAPI quota, 429 errors

Số liệu benchmark thực tế: WebGPU nhanh hơn WASM tới 100x (Transformers.js v3). Đo trực tiếp trên Segment Anything với RTX 3060 + Core i9: encoder nhanh 19x, decoder nhanh 3.8x. Stable Diffusion Turbo generate ảnh dưới 1 giây trên RTX 4090 - hoàn toàn trong trình duyệt.

Bắt đầu thế nào

Cách nhanh nhất dùng Transformers.js (WebGPU tích hợp sẵn):

npm install @huggingface/transformers
import { pipeline } from '@huggingface/transformers';

const generator = await pipeline(
  'text-generation',
  'onnx-community/LFM2-1.2B-ONNX',
  { device: 'webgpu' }
);
const result = await generator('Giải thích WebGPU cho tôi.');

Nếu muốn dùng ONNX Runtime Web trực tiếp, chỉ cần đổi import:

// Thay vì: import * as ort from 'onnxruntime-web';
import * as ort from 'onnxruntime-web/webgpu';

const session = await ort.InferenceSession.create(modelPath, {
  executionProviders: ['webgpu', 'wasm'] // fallback tự động
});

Để tự export model bằng LiquidONNX:

pip install liquidonnx
python -m liquidonnx export --model LiquidAI/LFM2-1.2B --quantization q4

Deploy app trên Vercel hoặc Netlify (không phải GitHub Pages). Cần set 2 CORS headers để bật SharedArrayBuffer: Cross-Origin-Embedder-Policy: require-corpCross-Origin-Opener-Policy: same-origin.

Giới hạn cần biết

  • Browser support hẹp hơn: Chrome 113+ hoặc Edge 113+ (FP16 yêu cầu v121+). Firefox và Safari còn experimental
  • Q8 không chạy trong browser: chỉ hỗ trợ Q4 và FP16; Q8 chỉ dùng được trên server CPU/GPU
  • Download lần đầu lớn: model Q4 từ 600MB tới 2GB tùy size - user cần kết nối tốt lần đầu
  • Phần cứng tối thiểu: cần GPU tươm tất để có tốc độ hợp lý; máy yếu fallback về WASM, chậm hơn nhiều
  • GitHub Pages không tương thích: cần platform hỗ trợ custom CORS headers (Vercel, Netlify, HuggingFace Spaces)

Thử ngay - không cần cài gì

Liquid AI đã deploy live demos trên HuggingFace Spaces, mở Chrome lên là chạy được:

Nguồn: github.com/Liquid4All/onnx-export, Liquid Docs, Microsoft Open Source Blog.