mirror of
https://github.com/modelscope/DiffSynth-Studio.git
synced 2026-03-23 17:38:10 +00:00
Fix LoRA compatibility issues. (#1320)
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import torch
|
import torch, warnings
|
||||||
|
|
||||||
|
|
||||||
class GeneralLoRALoader:
|
class GeneralLoRALoader:
|
||||||
@@ -26,7 +26,11 @@ class GeneralLoRALoader:
|
|||||||
keys.pop(0)
|
keys.pop(0)
|
||||||
keys.pop(-1)
|
keys.pop(-1)
|
||||||
target_name = ".".join(keys)
|
target_name = ".".join(keys)
|
||||||
lora_name_dict[target_name] = (key, key.replace(lora_B_key, lora_A_key))
|
# Alpha: Deprecated but retained for compatibility.
|
||||||
|
key_alpha = key.replace(lora_B_key + ".weight", "alpha").replace(lora_B_key + ".default.weight", "alpha")
|
||||||
|
if key_alpha == key or key_alpha not in lora_state_dict:
|
||||||
|
key_alpha = None
|
||||||
|
lora_name_dict[target_name] = (key, key.replace(lora_B_key, lora_A_key), key_alpha)
|
||||||
return lora_name_dict
|
return lora_name_dict
|
||||||
|
|
||||||
|
|
||||||
@@ -36,6 +40,10 @@ class GeneralLoRALoader:
|
|||||||
for name in name_dict:
|
for name in name_dict:
|
||||||
weight_up = state_dict[name_dict[name][0]]
|
weight_up = state_dict[name_dict[name][0]]
|
||||||
weight_down = state_dict[name_dict[name][1]]
|
weight_down = state_dict[name_dict[name][1]]
|
||||||
|
if name_dict[name][2] is not None:
|
||||||
|
warnings.warn("Alpha detected in the LoRA file. This may be a LoRA model not trained by DiffSynth-Studio. To ensure compatibility, the LoRA weights will be converted to weight * alpha / rank.")
|
||||||
|
alpha = state_dict[name_dict[name][2]] / weight_down.shape[0]
|
||||||
|
weight_down = weight_down * alpha
|
||||||
state_dict_[name + f".lora_B{suffix}"] = weight_up
|
state_dict_[name + f".lora_B{suffix}"] = weight_up
|
||||||
state_dict_[name + f".lora_A{suffix}"] = weight_down
|
state_dict_[name + f".lora_A{suffix}"] = weight_down
|
||||||
return state_dict_
|
return state_dict_
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ lora = ModelConfig(
|
|||||||
model_id="lightx2v/Qwen-Image-Edit-2511-Lightning",
|
model_id="lightx2v/Qwen-Image-Edit-2511-Lightning",
|
||||||
origin_file_pattern="Qwen-Image-Edit-2511-Lightning-4steps-V1.0-bf16.safetensors"
|
origin_file_pattern="Qwen-Image-Edit-2511-Lightning-4steps-V1.0-bf16.safetensors"
|
||||||
)
|
)
|
||||||
pipe.load_lora(pipe.dit, lora, alpha=8/64)
|
pipe.load_lora(pipe.dit, lora, alpha=1)
|
||||||
pipe.scheduler = FlowMatchScheduler("Qwen-Image-Lightning")
|
pipe.scheduler = FlowMatchScheduler("Qwen-Image-Lightning")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ lora = ModelConfig(
|
|||||||
model_id="lightx2v/Qwen-Image-Edit-2511-Lightning",
|
model_id="lightx2v/Qwen-Image-Edit-2511-Lightning",
|
||||||
origin_file_pattern="Qwen-Image-Edit-2511-Lightning-4steps-V1.0-bf16.safetensors"
|
origin_file_pattern="Qwen-Image-Edit-2511-Lightning-4steps-V1.0-bf16.safetensors"
|
||||||
)
|
)
|
||||||
pipe.load_lora(pipe.dit, lora, alpha=8/64)
|
pipe.load_lora(pipe.dit, lora, alpha=1)
|
||||||
pipe.scheduler = FlowMatchScheduler("Qwen-Image-Lightning")
|
pipe.scheduler = FlowMatchScheduler("Qwen-Image-Lightning")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "diffsynth"
|
name = "diffsynth"
|
||||||
version = "2.0.4"
|
version = "2.0.5"
|
||||||
description = "Enjoy the magic of Diffusion models!"
|
description = "Enjoy the magic of Diffusion models!"
|
||||||
authors = [{name = "ModelScope Team"}]
|
authors = [{name = "ModelScope Team"}]
|
||||||
license = {text = "Apache-2.0"}
|
license = {text = "Apache-2.0"}
|
||||||
|
|||||||
Reference in New Issue
Block a user