diff --git a/data/reference-nunchaku.json b/data/reference-nunchaku.json index 75d0d4a92..a22be9e91 100644 --- a/data/reference-nunchaku.json +++ b/data/reference-nunchaku.json @@ -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", diff --git a/pipelines/model_qwen.py b/pipelines/model_qwen.py index 3bea5c121..546e755cc 100644 --- a/pipelines/model_qwen.py +++ b/pipelines/model_qwen.py @@ -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, diff --git a/pipelines/qwen/qwen_nunchaku.py b/pipelines/qwen/qwen_nunchaku.py index b9f331f60..4fd964df3 100644 --- a/pipelines/qwen/qwen_nunchaku.py +++ b/pipelines/qwen/qwen_nunchaku.py @@ -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: