Chargement du reste de cette comparaison.

sdxl_permutation_spec

Créé Le diff n'expire jamais
16 suppressions
250 lignes
34 ajouts
269 lignes
from modules.merging.merge_rebasin import PermutationSpec, permutation_spec_from_axes_to_perm
# Ref: https://github.com/vladmandic/automatic/blob/dev/modules/merging/merge_PermSpec_SDXL.py
# Tldr: Awful. So many layers are incorrect and missing!

from PermSpec_Base import PermutationSpec, permutation_spec_from_axes_to_perm


def sdxl_permutation_spec() -> PermutationSpec:
def sdxl_permutation_spec() -> PermutationSpec:
conv = lambda name, p_in, p_out: { # pylint: disable=unnecessary-lambda-assignment
conv = lambda name, p_in, p_out: { # pylint: disable=unnecessary-lambda-assignment
f"{name}.weight": (
f"{name}.weight": (
p_out,
p_out,
p_in,
p_in,
),
),
f"{name}.bias": (p_out,),
f"{name}.bias": (p_out,),
}
}
norm = lambda name, p: {f"{name}.weight": (p,), f"{name}.bias": (p,)} # pylint: disable=unnecessary-lambda-assignment
norm = lambda name, p: {f"{name}.weight": (p,), f"{name}.bias": (p,)} # pylint: disable=unnecessary-lambda-assignment
dense = (
dense = (
lambda name, p_in, p_out, bias=True: { # pylint: disable=unnecessary-lambda-assignment
lambda name, p_in, p_out, bias=True: { # pylint: disable=unnecessary-lambda-assignment
f"{name}.weight": (p_out, p_in),
f"{name}.weight": (p_out, p_in),
f"{name}.bias": (p_out,),
f"{name}.bias": (p_out,),
}
}
if bias
if bias
else {f"{name}.weight": (p_out, p_in)}
else {f"{name}.weight": (p_out, p_in)}
)
)
# Layer name is somehow changed!
dense2 = (
lambda name, p_in, p_out, bias=True: { # pylint: disable=unnecessary-lambda-assignment
f"{name}_weight": (p_out, p_in),
f"{name}_bias": (p_out,),
}
if bias
else {f"{name}_weight": (p_out, p_in)}
)
skip = lambda name, p_in, p_out: { # pylint: disable=unnecessary-lambda-assignment
skip = lambda name, p_in, p_out: { # pylint: disable=unnecessary-lambda-assignment
f"{name}": (
f"{name}": (
p_out,
p_out,
p_in,
p_in,
None,
None,
None,
None,
)
)
}
}


# Unet Res blocks
# Unet Res blocks
easyblock = lambda name, p_in, p_out: { # pylint: disable=unnecessary-lambda-assignment
easyblock = lambda name, p_in, p_out: { # pylint: disable=unnecessary-lambda-assignment
**norm(f"{name}.in_layers.0", p_in),
**norm(f"{name}.in_layers.0", p_in),
**conv(f"{name}.in_layers.2", p_in, f"P_{name}_inner"),
**conv(f"{name}.in_layers.2", p_in, f"P_{name}_inner"),
**dense(
**dense(
f"{name}.emb_layers.1", f"P_{name}_inner2", f"P_{name}_inner3", bias=True
f"{name}.emb_layers.1", f"P_{name}_inner2", f"P_{name}_inner3", bias=True
),
),
**norm(f"{name}.out_layers.0", f"P_{name}_inner4"),
**norm(f"{name}.out_layers.0", f"P_{name}_inner4"),
**conv(f"{name}.out_layers.3", f"P_{name}_inner4", p_out),
**conv(f"{name}.out_layers.3", f"P_{name}_inner4", p_out),
}
}


# Text Encoder blocks
easyblock2 = lambda name, p: {
**norm(f"{name}.norm1", p),
**conv(f"{name}.conv1", p, f"P_{name}_inner"),
**norm(f"{name}.norm2", f"P_{name}_inner"),
**conv(f"{name}.conv2", f"P_{name}_inner", p),
}

# This is for blocks that use a residual connection, but change the number of channels via a Conv.
shortcutblock = lambda name, p_in, p_out: {
**norm(f"{name}.norm1", p_in),
**conv(f"{name}.conv1", p_in, f"P_{name}_inner"),
**norm(f"{name}.norm2", f"P_{name}_inner"),
**conv(f"{name}.conv2", f"P_{name}_inner", p_out),
**conv(f"{name}.nin_shortcut", p_in, p_out),
**norm(f"{name}.nin_shortcut", p_out),
}

return permutation_spec_from_axes_to_perm(
return permutation_spec_from_axes_to_perm(
{
{
# Skipped Layers
# Skipped Layers
**skip("betas", None, None),
**skip("betas", None, None),
**skip("alphas_cumprod", None, None),
**skip("alphas_cumprod", None, None),
**skip("alphas_cumprod_prev", None, None),
**skip("alphas_cumprod_prev", None, None),
**skip("sqrt_alphas_cumprod", None, None),
**skip("sqrt_alphas_cumprod", None, None),
**skip("sqrt_one_minus_alphas_cumprod", None, None),
**skip("sqrt_one_minus_alphas_cumprod", None, None),
**skip("log_one_minus_alphas_cumprods", None, None),
**skip("log_one_minus_alphas_cumprods", None, None),
**skip("sqrt_recip_alphas_cumprod", None, None),
**skip("sqrt_recip_alphas_cumprod", None, None),
**skip("sqrt_recipm1_alphas_cumprod", None, None),
**skip("sqrt_recipm1_alphas_cumprod", None, None),
**skip("posterior_variance", None, None),
**skip("posterior_variance", None, None),
**skip("posterior_log_variance_clipped", None, None),
**skip("posterior_log_variance_clipped", None, None),
**skip("posterior_mean_coef1", None, None),
**skip("posterior_mean_coef1", None, None),
**skip("posterior_mean_coef2", None, None),
**skip("posterior_mean_coef2", None, None),
**skip("log_one_minus_alphas_cumprod", None, None),
**skip("log_one_minus_alphas_cumprod", None, None),
**skip("model_ema.decay", None, None),
**skip("model_ema.decay", None, None),
**skip("model_ema.num_updates", None, None),
**skip("model_ema.num_updates", None, None),
**skip("conditioner.embedders.0.transformer.text_model.embeddings.position_ids", None, None),
**skip("conditioner.embedders.1.model.logit_scale", None, None),
**skip("conditioner.embedders.1.model.positional_embedding", None, None),
**skip("conditioner.embedders.1.model.text_projection", None, None),
**conv("model.diffusion_model.input_blocks.0.0", "P_bg0", "P_bg1"),
**conv("model.diffusion_model.input_blocks.0.0", "P_bg0", "P_bg1"),
**easyblock("model.diffusion_model.input_blocks.1.0", "P_bg2", "P_bg3"),
**easyblock("model.diffusion_model.input_blocks.1.0", "P_bg2", "P_bg3"),
**easyblock("model.diffusion_model.input_blocks.2.0", "P_bg4", "P_bg5"),
**easyblock("model.diffusion_model.input_blocks.2.0", "P_bg4", "P_bg5"),
**conv("model.diffusion_model.input_blocks.3.0.op", "P_bg6", "P_bg7"),
**conv("model.diffusion_model.input_blocks.3.0.op", "P_bg6", "P_bg7"),
**easyblock("model.diffusion_model.input_blocks.4.0", "P_bg8", "P_bg9"),
**easyblock("model.diffusion_model.input_blocks.4.0", "P_bg8", "P_bg9"),
**conv("model.diffusion_model.input_blocks.4.0.skip_connection", "P_bg10", "P_bg11"),
**conv("model.diffusion_model.input_blocks.4.0.skip_connection", "P_bg10", "P_bg11"),
**norm("model.diffusion_model.input_blocks.4.1.norm", "P_bg12"),
**norm("model.diffusion_model.input_blocks.4.1.norm", "P_bg12"),
**conv("model.diffusion_model.input_blocks.4.1.proj_in", "P_bg12", "P_bg13"),
**conv("model.diffusion_model.input_blocks.4.1.proj_in", "P_bg12", "P_bg13"),
**conv("model.diffusion_model.input_blocks.4.1.proj_out", "P_bg14", "P_bg15"),
**conv("model.diffusion_model.input_blocks.4.1.proj_out", "P_bg14", "P_bg15"),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn1.to_k", "P_bg16", "P_bg17", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn1.to_k", "P_bg16", "P_bg17", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn1.to_out.0", "P_bg16", "P_bg17", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn1.to_out.0", "P_bg16", "P_bg17", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn1.to_q", "P_bg16", "P_bg17", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn1.to_q", "P_bg16", "P_bg17", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn1.to_v", "P_bg16", "P_bg17", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn1.to_v", "P_bg16", "P_bg17", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn2.to_k", "P_bg18", "P_bg19", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn2.to_k", "P_bg18", "P_bg19", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn2.to_out.0", "P_bg20", "P_bg21", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn2.to_out.0", "P_bg20", "P_bg21", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn2.to_q", "P_bg20", "P_bg21", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn2.to_q", "P_bg20", "P_bg21", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn2.to_v", "P_bg18", "P_bg19", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn2.to_v", "P_bg18", "P_bg19", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.ff.net.0.proj", "P_bg22", "P_bg23", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.ff.net.0.proj", "P_bg22", "P_bg23", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.ff.net.2", "P_bg24", "P_bg25", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.ff.net.2", "P_bg24", "P_bg25", bias=True),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.norm1", "P_bg26"),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.norm1", "P_bg26"),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.norm2", "P_bg26"),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.norm2", "P_bg26"),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.norm3", "P_bg26"),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.0.norm3", "P_bg26"),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn1.to_k", "P_bg27", "P_bg28", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn1.to_k", "P_bg27", "P_bg28", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn1.to_out.0", "P_bg27", "P_bg28", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn1.to_out.0", "P_bg27", "P_bg28", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn1.to_q", "P_bg27", "P_bg28", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn1.to_q", "P_bg27", "P_bg28", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn1.to_v", "P_bg27", "P_bg28", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn1.to_v", "P_bg27", "P_bg28", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn2.to_k", "P_bg29", "P_bg30", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn2.to_k", "P_bg29", "P_bg30", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn2.to_out.0", "P_bg31", "P_bg32", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn2.to_out.0", "P_bg31", "P_bg32", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn2.to_q", "P_bg31", "P_bg32", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn2.to_q", "P_bg31", "P_bg32", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn2.to_v", "P_bg33", "P_bg34", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.attn2.to_v", "P_bg33", "P_bg34", bias=False),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.ff.net.0.proj", "P_bg35", "P_bg36", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.ff.net.0.proj", "P_bg35", "P_bg36", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.ff.net.2", "P_bg37", "P_bg38", bias=True),
**dense("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.ff.net.2", "P_bg37", "P_bg38", bias=True),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.norm1", "P_bg39"),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.norm1", "P_bg39"),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.norm2", "P_bg39"),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.norm2", "P_bg39"),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.norm3", "P_bg39"),
**norm("model.diffusion_model.input_blocks.4.1.transformer_blocks.1.norm3", "P_bg39"),
**easyblock("model.diffusion_model.input_blocks.5.0", "P_bg40", "P_bg41"),
**easyblock("model.diffusion_model.input_blocks.5.0", "P_bg40", "P_bg41"),
**norm("model.diffusion_model.input_blocks.5.1.norm", "P_bg42"),
**norm("model.diffusion_model.input_blocks.5.1.norm", "P_bg42"),
**conv("model.diffusion_model.input_blocks.5.1.proj_in", "P_bg43", "P_bg44"),
**conv("model.diffusion_model.input_blocks.5.1.proj_in", "P_bg43", "P_bg44"),
**conv("model.diffusion_model.input_blocks.5.1.proj_out", "P_bg45", "P_bg46"),
**conv("model.diffusion_model.input_blocks.5.1.proj_out", "P_bg45", "P_bg46"),
**dense("model.diffusion_model.input_blocks.5.1.transformer_blocks.0.attn1.to_k", "P_bg47", "P_bg48", bias=False),
**dense("model.diffusion_model.input_blocks.5.1.transformer_blocks.0.attn1.to_k", "P_bg47", "P_bg48", bias=False),