IrisRainbowNeko / HCP-Diffusion

A universal Stable-Diffusion toolbox
Apache License 2.0
899 stars 75 forks source link

lora模型大小是否可调? #25

Closed ZhibinPeng closed 1 year ago

ZhibinPeng commented 1 year ago

可以想lora-script一样能够通过network_dim调整模型大小吗?

IrisRainbowNeko commented 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更合理一些。

IrisRainbowNeko commented 1 year ago

比如这种写法,就给注意力层ff层有不同的学习率和rank值(network_dim)

lora_unet:
  -
    lr: 1e-4
    rank: 8
    layers:
      - 're:.*\.attn.?$'
  -
    lr: 2e-4
    rank: 0.05
    layers:
      - 're:.*\.ff$'
ZhibinPeng commented 1 year ago
lora_unet:
  -
    lr: 1e-4
    rank: 32
    layers:
      - 're:.*\.attn.?$'
      - 're:.*\.ff$'

直接写成这样是否可行?

ZhibinPeng commented 1 year ago

比如rank=0.025,对输出维度320的层,实际rank是8,对输出维度1280的层,rank是32。按比例给rank更合理一些。 这里还不是很理解,可能再讲讲嘛,感谢感谢

IrisRainbowNeko commented 1 year ago

比如rank=0.025,对输出维度320的层,实际rank是8,对输出维度1280的层,rank是32。按比例给rank更合理一些。 这里还不是很理解,可能再讲讲嘛,感谢感谢

unet部分,各个层的输出维度(dim)是不一样的,rank设置成小数就会根据输出维度,自动为各个层上的lora按比例分配不同的rank。

ZhibinPeng commented 1 year ago
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值

IrisRainbowNeko commented 1 year ago

为什么ff层对应的就是0.05的rank值,而attention对应的是0.025×320=8的rank值

这个就是一个示例,可以根据你具体情况来做

IrisRainbowNeko commented 1 year ago

rank=8是整数,不管输出是320,640,还是1280,lora的rank都是8。rank=0.025,实际rank就是0.025*输出维度

ZhibinPeng commented 1 year ago

意思是当rank写小数的时候是按比例给的,整数就是维度×比例=这个整数嘛?

IrisRainbowNeko commented 1 year ago

意思是当rank写小数的时候是按比例给的,整数就是维度×比例=这个整数嘛?

小数是按 维度×比例 给具体的rank,rank是整数就是强制对所有层都固定用这个rank,不管这个层原来什么样。