Closed ZhibinPeng closed 1 year ago
可以调整rank,可以每层的lora都给不同的rank。比如lora_conventional.yaml
里面定义的unet部分的lora。
lora_unet:
-
lr: 1e-4
rank: 8
layers:
- 're:.*\.attn.?$'
- 're:.*\.ff$'
rank可以是小数,表示按所在层输出维度的比例去设定rank。比如rank=0.025,对输出维度320的层,实际rank是8,对输出维度1280的层,rank是32。按比例给rank更合理一些。
比如这种写法,就给注意力层
和ff层
有不同的学习率和rank值(network_dim)
lora_unet:
-
lr: 1e-4
rank: 8
layers:
- 're:.*\.attn.?$'
-
lr: 2e-4
rank: 0.05
layers:
- 're:.*\.ff$'
lora_unet:
-
lr: 1e-4
rank: 32
layers:
- 're:.*\.attn.?$'
- 're:.*\.ff$'
直接写成这样是否可行?
比如rank=0.025,对输出维度320的层,实际rank是8,对输出维度1280的层,rank是32。按比例给rank更合理一些。 这里还不是很理解,可能再讲讲嘛,感谢感谢
比如rank=0.025,对输出维度320的层,实际rank是8,对输出维度1280的层,rank是32。按比例给rank更合理一些。 这里还不是很理解,可能再讲讲嘛,感谢感谢
unet部分,各个层的输出维度(dim)是不一样的,rank设置成小数就会根据输出维度,自动为各个层上的lora按比例分配不同的rank。
lr: 1e-4
rank: 8
layers:
- 're:.*\.attn.?$'
-
lr: 2e-4
rank: 0.05
layers:
- 're:.*\.ff$'
为什么ff层对应的就是0.05的rank值,而attention对应的是0.025×320=8的rank值
为什么ff层对应的就是0.05的rank值,而attention对应的是0.025×320=8的rank值
这个就是一个示例,可以根据你具体情况来做
rank=8是整数,不管输出是320,640,还是1280,lora的rank都是8。rank=0.025,实际rank就是0.025*输出维度
意思是当rank写小数的时候是按比例给的,整数就是维度×比例=这个整数嘛?
意思是当rank写小数的时候是按比例给的,整数就是维度×比例=这个整数嘛?
小数是按 维度×比例 给具体的rank,rank是整数就是强制对所有层都固定用这个rank,不管这个层原来什么样。
可以想lora-script一样能够通过network_dim调整模型大小吗?