Un Diffusion Transformer da 1,21 GB con pesi ternari
Bonsai Image Ternary 4B è un modello di diffusione testo-immagine compatto basato sull’architettura FLUX.2 Klein 4B. La sua innovazione principale è l’uso di pesi ternari — ogni peso assume un valore in {‑1, 0, +1} — che riduce il transformer da 7,75 GB a soli 1,21 GB (6,4× più piccolo). La progettazione ternaria orientata alla qualità aggiunge uno stato zero che migliora in modo dimostrabile la fedeltà visiva e la coerenza con il prompt.
Il modello gira nativamente su Linux e Windows tramite CUDA e il kernel a bit ridotti Gemlite, producendo un’immagine 1024×1024 in 4,5 s su una RTX 3080 e 2,8 s su una A100. Un campionatore FlowMatch‑Euler a 4 passi con guidance = 1,0 elimina la necessità di prompt negativi o CFG. È disponibile anche una variante per Apple Silicon.
Rappresentazione e archiviazione dei pesi ternari
Ogni peso ternario è definito come:
w_i = scale_g * t_i, t_i ∈ {−1, 0, +1}
Un unico fattore di scala FP16 condiviso è memorizzato per ogni gruppo di 128 pesi. I valori ternari trasportano log₂(3) ≈ 1,585 bit e, sommando il sovraccarico del fattore di scala, la larghezza effettiva in bit è di circa 1,71 bit/peso, una riduzione idealizzata di 9,4×. Tutti i 100 layer lineari pesanti in matmul — proiezioni Q/K/V, pesi MLP, layer lineari add‑K/Q/V a doppio flusso — sono ternari; i tensori di supporto sensibili alla precisione rimangono in FP16.
| Formato | Dimensione transformer | Riduzione | Rapporto |
|---|---|---|---|
| FP16 FLUX.2 Klein 4B | 7,75 GB | — | 1,0× |
| Ternary Bonsai 4B | 1,21 GB | 84,4% | 6,4× |
Il deployment CUDA utilizza un impacchettamento INT2 (2 bit per ternario), che porta a una rappresentazione su disco di 1,54 GB. Lo stato zero è la leva qualitativa che mantiene le prestazioni visive vicine a quelle del modello FP16 completo.
Architettura di deployment ed efficienza in esecuzione
La spina dorsale del modello è FLUX.2 Klein 4B, un transformer di diffusione MMDiT a 25 blocchi (5 a doppio flusso + 20 a flusso singolo). Il campionatore è FlowMatchEuler‑discreto con 4 passi, guidance = 1,0 e shift = 3,0.
In inferenza, il text encoder Qwen3‑4B viene compresso a 4 bit HQQ e scaricato immediatamente dopo la codifica del prompt. Il ciclo di denoising trasporta quindi solo il transformer ternario compatto e un VAE FP16 con decodifica a riquadri da 128 px. Il payload CUDA totale è di 4,55 GB:
| Componente | Dimensione |
|---|---|
| Transformer INT2 Gemlite | 1,54 GB |
| Text encoder HQQ a 4 bit | 2,84 GB |
| VAE FP16 | 0,17 GB |
Il picco di HBM a 1024² su una RTX 3080 è di circa 6,8 GiB end‑to‑end. Lo stack funziona nativamente su Linux x86_64 e Windows tramite gli stessi kernel CUDA/Gemlite.
Throughput e prestazioni benchmark
Throughput (4 passi di denoising, 1024² se non diversamente indicato)
| Piattaforma | 512² (s) | 1024² (s) |
|---|---|---|
| A100 (Colab) | 1,1 | 2,8 |
| RTX PRO 6000 Blackwell (Colab) | 1,0 | 2,1 |
| RTX 3080 10 GB | 1,4 | 4,5 |
| RTX 3060 6 GB (laptop) | 3,3 | 17,5 |
Benchmark — più alto è meglio. I modelli di confronto sono stati valutati con impostazioni corrispondenti; le spine dorsali più piccole sono state testate a 512×512 dove indicato.
| Modello | Transformer (GB) | GenEval | HPSv3 | DPG-Bench |
|---|---|---|---|---|
| Bonsai Ternary 4B | 1,21 | 0,723 | 12,22 | 0,851 |
| Bonsai Binary 4B | 0,93 | 0,671 | 11,15 | 0,822 |
| FLUX.2 Klein 4B (FP16) | 7,75 | 0,819 | 12,84 | 0,853 |
| FLUX.1-schnell | 23,8 | 0,716 | 12,67 | 0,848 |
| SDXL | 5,14 | 0,300 | 10,05 | 0,740 |
| PixArt-Σ XL 2 | 1,20 | 0,541 | 11,93 | 0,769 |
| Stable Diffusion 1.5 | 1,72 | 0,396 | 4,20 | 0,601 |
| BK-SDM-Small | 0,98 | 0,297 | 3,05 | 0,559 |
Bonsai Image 4B ternario si avvicina molto al FLUX.2 Klein 4B FP16 riducendo l’ingombro del transformer di 6,4×, spostando di fatto la frontiera qualità ‑impronta.
Casi d’uso e limitazioni
Casi d’uso
- Strumenti creativi locali su GPU consumer con CUDA.
- Generazione privata con residenza dei dati per flussi di lavoro sensibili alla conformità .
- Iterazione rapida grazie alla bassa latenza e all’assenza di code remote.
- Servizio su GPU commodity con pressione di memoria ridotta.
- Deployment nativo su Windows e Linux.
Limitazioni
- Non è identico a livello di bit al FLUX.2 Klein 4B FP16; la qualità dipende dalla complessità del prompt e dei dettagli.
- L’esecuzione ternaria si basa sui kernel GEMM a bassa bitness Gemlite, poiché i percorsi hardware standard non sono ancora completamente nativi per il ternario.
- Dopo la compressione del transformer, il VAE può diventare un collo di bottiglia di memoria visibile, mitigato dallo scaricamento del text encoder e dalla decodifica a riquadri.
git clone https://github.com/PrismML-Eng/Bonsai-Image-Demo.git cd Bonsai-Image-Demo ./setup.sh ./scripts/download_model.sh # ternary is the default ./scripts/serve.sh
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned # one-time .\setup.ps1 .\scripts\download_model.ps1 .\scripts\serve.ps1
from backend_gpu.server import build_pipeline pipe = build_pipeline(model_id="prism-ml/bonsai-image-ternary-4B-gemlite-2bit") image = pipe( prompt="A bonsai tree in a quiet ceramic studio, soft morning light", num_inference_steps=4, guidance_scale=1.0, height=1024, width=1024, ).images[0] image.save("bonsai.png")



