Présentation de Nunchaku

Nunchaku est un moteur d'inférence qui utilise la méthode de quantification SVDQuant pour réduire la consommation de mémoire et améliorer les performances. Cette méthode est différente des autres méthodes de quantification qui ne stockent que les poids en faible précision et les déquantifient à la volée.

Fonctionnement de Nunchaku Lite

Nunchaku Lite est une nouvelle intégration de Nunchaku dans Diffusers. Elle permet de charger des points de contrôle Nunchaku sans pipeline personnalisé ni moteur d'inférence séparé. Nunchaku Lite utilise des couches linéaires SVDQ/AWQ à l'exécution pour patcher les modules nn.Linear pertinents d'un modèle Diffusers standard avant de charger le point de contrôle.

pipe = ErnieImagePipeline.from_pretrained(
    "lite-infer/ERNIE-Image-Turbo-nunchaku-lite-nvfp4_r32-bnb4-text-encoder",
    torch_dtype=torch.bfloat16,
).to("cuda")

Performances et limites

Les performances de Nunchaku Lite sont meilleures que celles des autres méthodes de quantification, avec une réduction de la consommation de mémoire de 30% et une accélération des performances de 1,8x. Cependant, Nunchaku Lite ne peut pas atteindre les mêmes niveaux de performances que le moteur d'inférence Nunchaku original en raison de l'absence de noyaux d'exécution fusionnés et de modules spécifiques à l'architecture.

Exemples d'utilisation

Voici un exemple de code pour utiliser Nunchaku Lite avec Diffusers :

image = pipe(
    prompt="A cinematic portrait of a red fox in a misty forest at sunrise, "
           "detailed fur, volumetric light",
    height=1024,
    width=1024,
    num_inference_steps=8,
    guidance_scale=1.0,
    generator=torch.Generator("cuda").manual_seed(42),
).images[0]