Disty0/Qwen-Image-2512-SDNQ-4bit-dynamic

Disty0
Texto a imagen

Versión cuantizada dinámica a 4 bits de Qwen/Qwen-Image-2512 para generación de imágenes a partir de texto. Usa SDNQ con cuantización fina por capa, seleccionando dinámicamente el tipo de dato de cada capa hasta mantener la pérdida MSE normalizada por desviación estándar por debajo de 1e-2. Reduce el tamaño del modelo de 40,9 GB en BF16 a 12,0 GB, con una mezcla de precisiones int4, uint4, int5, float4_e3m0fn y float5_e3m1fn.

Como usar

Instalación y uso básico con Diffusers:

pip install -U diffusers transformers accelerate

import torch
from diffusers import DiffusionPipeline

# switch to "mps" for apple devices
pipe = DiffusionPipeline.from_pretrained("Disty0/Qwen-Image-2512-SDNQ-4bit-dynamic", dtype=torch.bfloat16, device_map="cuda")

prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(prompt).images[0]

Uso recomendado con SDNQ y opciones de cuantización:

pip install sdnq

import torch
import diffusers
from sdnq import SDNQConfig # import sdnq to register it into diffusers and transformers
from sdnq.common import use_torch_compile as triton_is_available
from sdnq.loader import apply_sdnq_options_to_model

pipe = diffusers.QwenImagePipeline.from_pretrained("Disty0/Qwen-Image-2512-SDNQ-4bit-dynamic", torch_dtype=torch.bfloat16)

# Enable INT8 MatMul for AMD, Intel ARC and Nvidia GPUs:
if triton_is_available and (torch.cuda.is_available() or torch.xpu.is_available()):
    pipe.transformer = apply_sdnq_options_to_model(pipe.transformer, use_quantized_matmul=True)
    pipe.text_encoder = apply_sdnq_options_to_model(pipe.text_encoder, use_quantized_matmul=True)

# pipe.transformer = torch.compile(pipe.transformer) # optional for faster speeds

pipe.enable_model_cpu_offload()

prompt = '''A 20-year-old East Asian girl with delicate, charming features and large, bright brown eyes—expressive and lively, with a cheerful or subtly smiling expression. Her naturally wavy long hair is either loose or tied in twin ponytails. She has fair skin and light makeup accentuating her youthful freshness. She wears a modern, cute dress or relaxed outfit in bright, soft colors—lightweight fabric, minimalist cut. She stands indoors at an anime convention, surrounded by banners, posters, or stalls. Lighting is typical indoor illumination—no staged lighting—and the image resembles a casual iPhone snapshot: unpretentious composition, yet brimming with vivid, fresh, youthful charm.'''
negative_prompt = "低分辨率,低画质,肢体畸形,手指畸形,画面过饱和,蜡像感,人脸无细节,过度光滑,画面具有AI感。构图混乱。文字模糊,扭曲。"

# Generate with different aspect ratios
aspect_ratios = {
    "1:1": (1328, 1328),
    "16:9": (1664, 928),
    "9:16": (928, 1664),
    "4:3": (1472, 1104),
    "3:4": (1104, 1472),
    "3:2": (1584, 1056),
    "2:3": (1056, 1584),
}

width, height = aspect_ratios["16:9"]

image = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    width=width,
    height=height,
    num_inference_steps=50,
    true_cfg_scale=4.0,
    generator=torch.Generator(device="cpu").manual_seed(42)
).images[0]

image.save("qwen-image-2512-sdnq-4bit-dynamic.png")

Funcionalidades

Generación texto-a-imagen con QwenImagePipeline y Diffusers.
Cuantización dinámica SDNQ con precisión mínima int4.
Cuantización granular por capa basada en prueba y error según umbral de pérdida.
Modelo mixto con dtypes int4, uint4, int5, float4_e3m0fn y float5_e3m1fn.
Soporte opcional para matmul cuantizado INT8 en GPUs AMD, Intel ARC y Nvidia cuando Triton está disponible.
Desactivación de cuantización SVD porque no aporta suficiente beneficio frente al coste de rendimiento en esta configuración.

Casos de uso

Generar imágenes desde prompts de texto con menor consumo de memoria que el modelo BF16 original.
Ejecutar Qwen-Image-2512 en hardware con restricciones de VRAM gracias a la reducción de tamaño a 12,0 GB.
Experimentar con generación de imágenes en múltiples relaciones de aspecto.
Probar cuantización SDNQ dinámica en pipelines Diffusers para modelos de imagen grandes.