feat: add 4-step Nunchaku variants for Qwen-Lightning models

Add 4-step distilled Nunchaku SVDQuant entries for Qwen-Lightning and
Qwen-Lightning-Edit alongside the existing 8-step variants. Step count
is now shown in the reference name (e.g. "Qwen-Lightning (4-step)").

- Add subfolder parameter to load_qwen_nunchaku to distinguish
  4-step (nunchaku-4step) from 8-step (nunchaku) variants
- Route to correct safetensors: lightningv1.0-4steps vs
  lightningv1.1-8steps for gen, lightningv1.0-4steps vs
  lightningv1.0-8steps for edit
- Strip nunchaku subfolder before pipeline from_pretrained since
  it does not exist in the base HuggingFace repos
pull/4634/head
CalamitousFelicitousness 2026-02-06 00:10:27 +00:00
parent c8597ca84e
commit 33de04a0c7
3 changed files with 42 additions and 9 deletions

View File

@ -90,7 +90,7 @@
"size": 0,
"date": "2025 June"
},
"Qwen-Lightning Nunchaku SVDQuant": {
"Qwen-Lightning (8-step) Nunchaku SVDQuant": {
"path": "vladmandic/Qwen-Lightning",
"subfolder": "nunchaku",
"preview": "vladmandic--Qwen-Lightning.jpg",
@ -102,6 +102,18 @@
"size": 0,
"date": "2025 June"
},
"Qwen-Lightning (4-step) Nunchaku SVDQuant": {
"path": "vladmandic/Qwen-Lightning",
"subfolder": "nunchaku-4step",
"preview": "vladmandic--Qwen-Lightning.jpg",
"desc": "Nunchaku SVDQuant quantization of Qwen-Lightning (4-step distilled) transformer with INT4 and SVD rank 128",
"skip": true,
"nunchaku": ["Model"],
"tags": "nunchaku",
"extras": "steps: 4",
"size": 0,
"date": "2025 June"
},
"Qwen-Image-Edit Nunchaku SVDQuant": {
"path": "Qwen/Qwen-Image-Edit",
"subfolder": "nunchaku",
@ -113,7 +125,7 @@
"size": 0,
"date": "2025 June"
},
"Qwen-Lightning-Edit Nunchaku SVDQuant": {
"Qwen-Lightning-Edit (8-step) Nunchaku SVDQuant": {
"path": "vladmandic/Qwen-Lightning-Edit",
"subfolder": "nunchaku",
"preview": "vladmandic--Qwen-Lightning-Edit.jpg",
@ -125,6 +137,18 @@
"size": 0,
"date": "2025 June"
},
"Qwen-Lightning-Edit (4-step) Nunchaku SVDQuant": {
"path": "vladmandic/Qwen-Lightning-Edit",
"subfolder": "nunchaku-4step",
"preview": "vladmandic--Qwen-Lightning-Edit.jpg",
"desc": "Nunchaku SVDQuant quantization of Qwen-Lightning-Edit (4-step distilled editing) transformer with INT4 and SVD rank 128",
"skip": true,
"nunchaku": ["Model"],
"tags": "nunchaku",
"extras": "steps: 4",
"size": 0,
"date": "2025 June"
},
"Qwen-Image-Edit-2509 Nunchaku SVDQuant": {
"path": "Qwen/Qwen-Image-Edit-2509",
"subfolder": "nunchaku",

View File

@ -37,7 +37,7 @@ def load_qwen(checkpoint_info, diffusers_load_config=None):
diffusers.pipelines.auto_pipeline.AUTO_INPAINT_PIPELINES_MAPPING["qwen-image"] = diffusers.QwenImageInpaintPipeline
if model_quant.check_nunchaku('Model'):
transformer = qwen.load_qwen_nunchaku(repo_id)
transformer = qwen.load_qwen_nunchaku(repo_id, subfolder=repo_subfolder)
if 'Qwen-Image-Distill-Full' in repo_id:
repo_transformer = repo_id
@ -63,6 +63,8 @@ def load_qwen(checkpoint_info, diffusers_load_config=None):
text_encoder = generic.load_text_encoder(repo_te, cls_name=transformers.Qwen2_5_VLForConditionalGeneration, load_config=diffusers_load_config)
repo_id, repo_subfolder = qwen.check_qwen_pruning(repo_id, repo_subfolder)
if repo_subfolder is not None and repo_subfolder.startswith('nunchaku'):
repo_subfolder = None
pipe = cls_name.from_pretrained(
repo_id,
transformer=transformer,

View File

@ -1,11 +1,12 @@
from modules import shared, devices
def load_qwen_nunchaku(repo_id):
def load_qwen_nunchaku(repo_id, subfolder=None):
import nunchaku
nunchaku_precision = nunchaku.utils.get_precision()
nunchaku_repo = None
transformer = None
four_step = subfolder is not None and '4step' in subfolder
try:
from nunchaku.models.transformers.transformer_qwenimage import NunchakuQwenImageTransformer2DModel
except Exception:
@ -14,15 +15,21 @@ def load_qwen_nunchaku(repo_id):
if 'pruning' in repo_id.lower() or 'distill' in repo_id.lower():
return None
elif repo_id.lower().endswith('qwen-image'):
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image/svdq-{nunchaku_precision}_r128-qwen-image.safetensors" # r32 vs r128
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image/svdq-{nunchaku_precision}_r128-qwen-image.safetensors"
elif repo_id.lower().endswith('qwen-lightning'):
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image/svdq-{nunchaku_precision}_r128-qwen-image-lightningv1.1-8steps.safetensors" # 8-step variant
if four_step:
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image/svdq-{nunchaku_precision}_r128-qwen-image-lightningv1.0-4steps.safetensors"
else:
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image/svdq-{nunchaku_precision}_r128-qwen-image-lightningv1.1-8steps.safetensors"
elif repo_id.lower().endswith('qwen-image-edit-2509'):
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image-edit-2509/svdq-{nunchaku_precision}_r128-qwen-image-edit-2509.safetensors" # 8-step variant
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image-edit-2509/svdq-{nunchaku_precision}_r128-qwen-image-edit-2509.safetensors"
elif repo_id.lower().endswith('qwen-image-edit'):
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image-edit/svdq-{nunchaku_precision}_r128-qwen-image-edit.safetensors" # 8-step variant
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image-edit/svdq-{nunchaku_precision}_r128-qwen-image-edit.safetensors"
elif repo_id.lower().endswith('qwen-lightning-edit'):
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image-edit/svdq-{nunchaku_precision}_r128-qwen-image-edit-lightningv1.0-8steps.safetensors" # 8-step variant
if four_step:
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image-edit/svdq-{nunchaku_precision}_r128-qwen-image-edit-lightningv1.0-4steps.safetensors"
else:
nunchaku_repo = f"nunchaku-ai/nunchaku-qwen-image-edit/svdq-{nunchaku_precision}_r128-qwen-image-edit-lightningv1.0-8steps.safetensors"
else:
shared.log.error(f'Load module: quant=Nunchaku module=transformer repo="{repo_id}" unsupported')
if nunchaku_repo is not None: