mirror of
https://github.com/vladmandic/sdnext.git
synced 2026-10-12 02:24:13 +00:00
add support for nunchaku-lite models and engine
Signed-off-by: Vladimir Mandic <[email protected]>
This commit is contained in:
@@ -10,7 +10,12 @@
|
||||
- [Microsoft Mage-Flow](https://huggingface.co/mage-flow-community/Mage-Flow) in *Base* and *Turbo* (distilled) variants
|
||||
Mage-Flow is a 4B-scale generative stack for efficient text-to-image generation and instruction-based image editing
|
||||
*note*: Microsoft released and then unpublished the model, but we still have a mirror available for download
|
||||
- [Nunchaku-Lite](https://huggingface.co/lite-infer) pre-quantized models
|
||||
included: *Z-Image, Flux.1-Dev/Schnell/Krea/Kontex, Qwen-Image/Image-Edit, Ernie-Image*
|
||||
- **Features**
|
||||
- add support for [Nunchaku-Lite](https://github.com/rootonchair/nunchaku-lite) inference engine
|
||||
unlike Nunchaku, Nunchaku-Lite is based on Kernels and does not require any additional packages to be installed
|
||||
but like original Nunchaku, it is only available for CUDA and right now only for `torch==2.11/2.12`
|
||||
- storage analyzer: new feature that analyzes your storage used by sdnext per type and location
|
||||
*system -> storage*
|
||||
- video: support for scripts/extensions
|
||||
@@ -30,6 +35,7 @@
|
||||
- sdnq check contiguous
|
||||
- torch reset compile cache on reload
|
||||
- bypass sdna for caption/prompt-enhance calls
|
||||
- skip sdnq for small weights
|
||||
|
||||
## Update for 2026-07-23
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
|
||||
### Unassigned
|
||||
|
||||
- [Nunchaku Lite](https://github.com/huggingface/diffusers/pull/14100)
|
||||
- [Object clear](https://huggingface.co/jixin0101/ObjectClear) remover for Kanvas
|
||||
- Video models: add to Reference
|
||||
- Video models: support custom entries, finetunes
|
||||
|
||||
@@ -702,6 +702,7 @@ def search(repo_id: str) -> int:
|
||||
"pipeline": pipeline_value,
|
||||
"gated": gated_value,
|
||||
"size": size_total_raw,
|
||||
"size_gb": round(size_total_raw / (1024**3), 2) if isinstance(size_total_raw, int) else None,
|
||||
"class": model_class,
|
||||
"dit": ", ".join(main_dit_entries) if len(main_dit_entries) > 0 else None,
|
||||
"dit_params": model_params_raw,
|
||||
|
||||
@@ -212,5 +212,67 @@
|
||||
"extras": "sampler: Default, cfg_scale: 1.0, steps: 4",
|
||||
"size": 19.38,
|
||||
"date": "2023 November"
|
||||
},
|
||||
"Z-Image-Turbo Nunchaku-Lite": {
|
||||
"path": "lite-infer/z-image-turbo-nunchaku-lite-int4_r32-bnb4-text-encoder",
|
||||
"preview": "Tongyi-MAI--Z-Image-Turbo.jpg",
|
||||
"extras": "sampler: Default, cfg_scale: 1.0, steps: 9",
|
||||
"desc": "Nunchaku-Lite quantization using precompiled Kernels",
|
||||
"size": 6.17,
|
||||
"date": "2026 July"
|
||||
},
|
||||
"Baidu ERNIE-Image Nunchaku-Lite": {
|
||||
"path": "lite-infer/ERNIE-Image-Turbo-nunchaku-lite-int4-bnb4-text-encoder",
|
||||
"preview": "baidu--ERNIE-Image.jpg",
|
||||
"extras": "sampler: Default, cfg_scale: 4.0, steps: 50",
|
||||
"desc": "Nunchaku-Lite quantization using precompiled Kernels",
|
||||
"size": 6.88,
|
||||
"date": "2026 July"
|
||||
},
|
||||
"BFL FLUX.1 Dev Nunchaku-Lite": {
|
||||
"path": "lite-infer/flux.1-dev-nunchaku-lite-int4_r32-bnb4-text-encoder",
|
||||
"preview": "black-forest-labs--FLUX.1-dev.jpg",
|
||||
"extras": "sampler: Default, cfg_scale: 3.5",
|
||||
"desc": "Nunchaku-Lite quantization using precompiled Kernels",
|
||||
"size": 10.97,
|
||||
"date": "2026 July"
|
||||
},
|
||||
"BFL FLUX.1 Schnell Nunchaku-Lite": {
|
||||
"path": "lite-infer/flux.1-schnell-nunchaku-lite-int4_r32-bnb4-text-encoder",
|
||||
"preview": "black-forest-labs--FLUX.1-schnell.jpg",
|
||||
"extras": "sampler: Default, cfg_scale: 3.5",
|
||||
"desc": "Nunchaku-Lite quantization using precompiled Kernels",
|
||||
"size": 10.95,
|
||||
"date": "2026 July"
|
||||
},
|
||||
"BFL FLUX.1 Kontext Nunchaku-Lite": {
|
||||
"path": "lite-infer/flux.1-kontext-dev-nunchaku-lite-int4_r32-bnb4-text-encoder",
|
||||
"preview": "black-forest-labs--FLUX.1-Kontext-dev.jpg",
|
||||
"extras": "sampler: Default, cfg_scale: 3.5",
|
||||
"desc": "Nunchaku-Lite quantization using precompiled Kernels",
|
||||
"size": 10.97,
|
||||
"date": "2026 July"
|
||||
},
|
||||
"BFL FLUX.1 Krea Nunchaku-Lite": {
|
||||
"path": "lite-infer/flux.1-krea-dev-nunchaku-lite-int4_r32-bnb4-text-encoder",
|
||||
"preview": "black-forest-labs--FLUX.1-Krea-dev.jpg",
|
||||
"extras": "sampler: Default, cfg_scale: 4.5",
|
||||
"desc": "Nunchaku-Lite quantization using precompiled Kernels",
|
||||
"size": 10.97,
|
||||
"date": "2026 July"
|
||||
},
|
||||
"Qwen-Image Nunchaku-Lite": {
|
||||
"path": "lite-infer/Qwen-Image-nunchaku-lite-int4_r32-bnb4-text-encoder",
|
||||
"preview": "Qwen--Qwen-Image.jpg",
|
||||
"desc": "Nunchaku-Lite quantization using precompiled Kernels",
|
||||
"size": 16.81,
|
||||
"date": "2026 July"
|
||||
},
|
||||
"Qwen-Image-Edit-2509 Nunchaku-Lite": {
|
||||
"path": "lite-infer/qwen-image-edit-2509-nunchaku-lite-int4_r32-bnb4-text-encoder",
|
||||
"preview": "Qwen--Qwen-Image-Edit-2509.jpg",
|
||||
"desc": "Nunchaku-Lite quantization using precompiled Kernels",
|
||||
"size": 16.81,
|
||||
"date": "2026 July"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1377,6 +1377,7 @@ def set_environment():
|
||||
os.environ.setdefault('CUDA_MODULE_LOADING', 'LAZY')
|
||||
os.environ.setdefault('DO_NOT_TRACK', '1')
|
||||
os.environ.setdefault('FORCE_CUDA', '1')
|
||||
os.environ.setdefault('DIFFUSERS_TRUST_REMOTE_KERNELS', 'true')
|
||||
os.environ.setdefault('GRADIO_ANALYTICS_ENABLED', 'False')
|
||||
os.environ.setdefault('K_DIFFUSION_USE_COMPILE', '0')
|
||||
os.environ.setdefault('KINETO_LOG_LEVEL', '3')
|
||||
|
||||
@@ -291,7 +291,7 @@ def set_diffusers_attention(pipe, quiet = False):
|
||||
orig_get_kernel = None
|
||||
def get_kernel_hijack(repo_id, revision=None, version=None, backend=None, user_agent=None, trust_remote_code: bool | list[str] = False): # pylint: disable=unused-argument
|
||||
log.debug(f'Attention dispatcher hub: repo="{repo_id}" revision={revision} version={version} backend={backend}')
|
||||
user_agent = 'kernels/0.14.1'
|
||||
user_agent = 'kernels/0.16.0'
|
||||
module = None
|
||||
try:
|
||||
module = orig_get_kernel(repo_id, revision=revision, version=version, backend=backend, user_agent=user_agent, trust_remote_code=True)
|
||||
@@ -309,7 +309,7 @@ def get_hf_api_hijack(user_agent = None): # pylint: disable=unused-argument
|
||||
def hijack_kernels():
|
||||
global orig_get_kernel # pylint: disable=global-statement
|
||||
try:
|
||||
install('kernels==0.14.1')
|
||||
install('kernels==0.16.0')
|
||||
import kernels
|
||||
import kernels.utils
|
||||
log.debug(f'Attention dispatcher: kernels={kernels.__version__}')
|
||||
|
||||
@@ -198,6 +198,8 @@ def check_nunchaku(module: str = ''):
|
||||
from modules import shared
|
||||
if 'nunchaku' not in shared.opts.sd_model_checkpoint.lower():
|
||||
return False
|
||||
if 'nunchaku-lite' in shared.opts.sd_model_checkpoint.lower():
|
||||
return False
|
||||
base_path = shared.opts.sd_model_checkpoint.split('+')[0]
|
||||
for v in shared.reference_models.values():
|
||||
if v.get('path', '') != base_path:
|
||||
|
||||
@@ -14,6 +14,10 @@ def load_ernie_image(checkpoint_info, diffusers_load_config=None):
|
||||
load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config, allow_quant=False)
|
||||
log.debug(f'Load model: type=ERNIE-Image repo="{repo_id}" offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args} pe={shared.opts.model_ernie_enable_pe}')
|
||||
|
||||
if 'nunchaku-lite' in repo_id.lower():
|
||||
from modules.attention import hijack_kernels
|
||||
hijack_kernels()
|
||||
|
||||
from pipelines.ernie import ERNIE_SPEC
|
||||
transformer = generic.load_transformer(
|
||||
repo_id,
|
||||
|
||||
@@ -46,6 +46,10 @@ def load_flux(checkpoint_info, diffusers_load_config=None):
|
||||
from pipelines.flux.flux_nunchaku import load_flux_nunchaku
|
||||
transformer = load_flux_nunchaku(repo_id)
|
||||
|
||||
if 'nunchaku-lite' in repo_id.lower():
|
||||
from modules.attention import hijack_kernels
|
||||
hijack_kernels()
|
||||
|
||||
# finally load transformer and text encoder if not already loaded
|
||||
if transformer is None:
|
||||
transformer = generic.load_transformer(repo_id, cls_name=diffusers.FluxTransformer2DModel, load_config=diffusers_load_config)
|
||||
|
||||
@@ -16,6 +16,10 @@ def load_qwen(checkpoint_info, diffusers_load_config=None):
|
||||
load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config, module='Model')
|
||||
log.debug(f'Load model: type=Qwen model="{checkpoint_info.name}" repo="{repo_id}" offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}')
|
||||
|
||||
if 'nunchaku-lite' in repo_id.lower():
|
||||
from modules.attention import hijack_kernels
|
||||
hijack_kernels()
|
||||
|
||||
if '2509' in repo_id or '2511' in repo_id:
|
||||
cls_name = diffusers.QwenImageEditPlusPipeline
|
||||
diffusers.pipelines.auto_pipeline.AUTO_TEXT2IMAGE_PIPELINES_MAPPING["qwen-image"] = diffusers.QwenImageEditPlusPipeline
|
||||
|
||||
@@ -43,6 +43,9 @@ def load_z_image(checkpoint_info, diffusers_load_config=None):
|
||||
transformer = None
|
||||
if model_quant.check_nunchaku('Model'): # only available model
|
||||
transformer = init_nunchaku()
|
||||
if 'nunchaku-lite' in repo_id.lower():
|
||||
from modules.attention import hijack_kernels
|
||||
hijack_kernels()
|
||||
if transformer is None:
|
||||
transformer = generic.load_transformer(repo_id, cls_name=diffusers.ZImageTransformer2DModel, load_config=diffusers_load_config)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user