Un Diffusion Transformer de 1.21 GB con pesos ternarios
Bonsai Image Ternary 4B es un modelo compacto de difusión texto‑imagen construido sobre la arquitectura FLUX.2 Klein 4B. Su innovación central es el uso de pesos ternarios — cada peso toma un valor en {‑1, 0, +1} — lo que reduce el transformer de 7.75 GB a tan solo 1.21 GB (6.4× más pequeño). El diseño ternario orientado a la calidad añade un estado cero que mejora demostrablemente la fidelidad visual y la coherencia con el prompt.
El modelo se ejecuta de forma nativa en Linux y Windows mediante CUDA y el kernel de bajo bit Gemlite, produciendo una imagen de 1024×1024 en 4.5 s en una RTX 3080 y 2.8 s en una A100. Un muestreador FlowMatch‑Euler de 4 pasos con guía = 1.0 elimina la necesidad de prompts negativos o CFG. También está disponible una variante para Apple Silicon.
Representación y almacenamiento de los pesos ternarios
Cada peso ternario se define como:
w_i = scale_g * t_i, t_i ∈ {−1, 0, +1}
Se almacena un único factor de escala FP16 compartido por cada grupo de 128 pesos. Los valores ternarios transportan log₂(3) ≈ 1.585 bits, y con la sobrecarga de la escala el ancho de bits efectivo es de aproximadamente 1.71 bits/peso, una reducción idealizada de 9.4×. Todas las 100 capas lineales intensivas en multiplicación matricial — proyecciones Q/K/V, pesos MLP, lineales add‑K/Q/V de doble flujo — son ternarias; los tensores auxiliares sensibles a la precisión se mantienen en FP16.
| Formato | Tamaño del transformer | Reducción | Ratio |
|---|---|---|---|
| FP16 FLUX.2 Klein 4B | 7.75 GB | — | 1.0× |
| Ternary Bonsai 4B | 1.21 GB | 84.4% | 6.4× |
El despliegue en CUDA utiliza un empaquetado INT2 (2 bits por ternario), resultando en una representación en disco de 1.54 GB. El estado cero es la palanca de calidad que mantiene el rendimiento visual cercano al modelo FP16 completo.
Arquitectura de despliegue y eficiencia en tiempo de ejecución
La columna vertebral del modelo es FLUX.2 Klein 4B, un transformer de difusión MMDiT de 25 bloques (5 de doble flujo + 20 de flujo único). El muestreador es FlowMatchEuler‑discrete con 4 pasos, guía = 1.0 y shift = 3.0.
Durante la inferencia, el Qwen3‑4B text encoder se comprime a 4‑bit HQQ y se descarga inmediatamente después de la codificación del prompt. El bucle de eliminación de ruido solo transporta el transformer ternario compacto y un VAE FP16 con decodificación por teselas de 128 px. La carga total en CUDA es de 4.55 GB:
| Componente | Tamaño |
|---|---|
| Transformer INT2 en Gemlite | 1.54 GB |
| Text encoder HQQ 4‑bit | 2.84 GB |
| VAE FP16 | 0.17 GB |
El pico de HBM a 1024² en una RTX 3080 es de ~6.8 GiB extremo a extremo. La solución funciona de manera nativa en Linux x86_64 y Windows a través de los mismos kernels CUDA/Gemlite.
Rendimiento y comparativas
Rendimiento (4 pasos de eliminación de ruido, 1024² salvo indicación)
| Plataforma | 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 (portátil) | 3.3 | 17.5 |
Comparativas — valores más altos son mejores. Los modelos comparados se evaluaron bajo configuraciones equivalentes; los backbones más pequeños se probaron a 512×512 donde se indica.
| Modelo | Transf. (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 Ternary Image 4B se sitúa muy próximo al modelo FP16 FLUX.2 Klein 4B al tiempo que reduce la huella del transformer en 6.4×, desplazando efectivamente la frontera entre calidad y tamaño.
Casos de uso y limitaciones
Casos de uso
- Herramientas creativas locales en GPUs de consumo con CUDA.
- Generación privada con residencia de datos para flujos de trabajo sensibles en materia de cumplimiento.
- Iteración rápida gracias a la baja latencia y a la ausencia de colas remotas.
- Servicio en GPUs de gama básica con menor presión de memoria.
- Despliegue nativo en Windows y Linux.
Limitaciones
- No es idéntico a nivel de bits respecto al modelo FP16 FLUX.2 Klein 4B; la calidad depende del prompt y de la complejidad de los detalles.
- La ejecución ternaria depende de los kernels GEMM de bajo bit de Gemlite, ya que las rutas de hardware estándar aún no son completamente nativas para operaciones ternarias.
- Tras comprimir el transformer, el VAE puede convertirse en un cuello de botella de memoria visible, mitigado mediante la descarga del text encoder y la decodificación por teselas.
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")



