Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
AUTOMATIC1111
GitHub Repository: AUTOMATIC1111/stable-diffusion-webui
Path: blob/master/extensions-builtin/Lora/network_glora.py
2447 views
1
2
import network
3
4
class ModuleTypeGLora(network.ModuleType):
5
def create_module(self, net: network.Network, weights: network.NetworkWeights):
6
if all(x in weights.w for x in ["a1.weight", "a2.weight", "alpha", "b1.weight", "b2.weight"]):
7
return NetworkModuleGLora(net, weights)
8
9
return None
10
11
# adapted from https://github.com/KohakuBlueleaf/LyCORIS
12
class NetworkModuleGLora(network.NetworkModule):
13
def __init__(self, net: network.Network, weights: network.NetworkWeights):
14
super().__init__(net, weights)
15
16
if hasattr(self.sd_module, 'weight'):
17
self.shape = self.sd_module.weight.shape
18
19
self.w1a = weights.w["a1.weight"]
20
self.w1b = weights.w["b1.weight"]
21
self.w2a = weights.w["a2.weight"]
22
self.w2b = weights.w["b2.weight"]
23
24
def calc_updown(self, orig_weight):
25
w1a = self.w1a.to(orig_weight.device)
26
w1b = self.w1b.to(orig_weight.device)
27
w2a = self.w2a.to(orig_weight.device)
28
w2b = self.w2b.to(orig_weight.device)
29
30
output_shape = [w1a.size(0), w1b.size(1)]
31
updown = ((w2b @ w1b) + ((orig_weight.to(dtype = w1a.dtype) @ w2a) @ w1a))
32
33
return self.finalize_updown(updown, orig_weight, output_shape)
34
35