diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2023-12-14 07:10:43 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-14 07:10:43 +0000 |
commit | 097140ac1a3caf6e3c9980a757d4b52e6a76b789 (patch) | |
tree | c31cf29908f94e7f6792b063df4543d6f83b423c /extensions-builtin/Lora/network_glora.py | |
parent | bda86f0fd9653657c146f7c1128f92771d16ad4e (diff) | |
parent | 778a30a95e216f9f7ce0126dbbdb1334afc3d796 (diff) | |
download | stable-diffusion-webui-gfx803-097140ac1a3caf6e3c9980a757d4b52e6a76b789.tar.gz stable-diffusion-webui-gfx803-097140ac1a3caf6e3c9980a757d4b52e6a76b789.tar.bz2 stable-diffusion-webui-gfx803-097140ac1a3caf6e3c9980a757d4b52e6a76b789.zip |
Merge branch 'dev' into master
Diffstat (limited to 'extensions-builtin/Lora/network_glora.py')
-rw-r--r-- | extensions-builtin/Lora/network_glora.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/extensions-builtin/Lora/network_glora.py b/extensions-builtin/Lora/network_glora.py new file mode 100644 index 00000000..492d4870 --- /dev/null +++ b/extensions-builtin/Lora/network_glora.py @@ -0,0 +1,33 @@ + +import network + +class ModuleTypeGLora(network.ModuleType): + def create_module(self, net: network.Network, weights: network.NetworkWeights): + if all(x in weights.w for x in ["a1.weight", "a2.weight", "alpha", "b1.weight", "b2.weight"]): + return NetworkModuleGLora(net, weights) + + return None + +# adapted from https://github.com/KohakuBlueleaf/LyCORIS +class NetworkModuleGLora(network.NetworkModule): + def __init__(self, net: network.Network, weights: network.NetworkWeights): + super().__init__(net, weights) + + if hasattr(self.sd_module, 'weight'): + self.shape = self.sd_module.weight.shape + + self.w1a = weights.w["a1.weight"] + self.w1b = weights.w["b1.weight"] + self.w2a = weights.w["a2.weight"] + self.w2b = weights.w["b2.weight"] + + def calc_updown(self, orig_weight): + w1a = self.w1a.to(orig_weight.device, dtype=orig_weight.dtype) + w1b = self.w1b.to(orig_weight.device, dtype=orig_weight.dtype) + w2a = self.w2a.to(orig_weight.device, dtype=orig_weight.dtype) + w2b = self.w2b.to(orig_weight.device, dtype=orig_weight.dtype) + + output_shape = [w1a.size(0), w1b.size(1)] + updown = ((w2b @ w1b) + ((orig_weight @ w2a) @ w1a)) + + return self.finalize_updown(updown, orig_weight, output_shape) |