GDPO / GDPOSR /mergelora.py
Joypop's picture
Add model weights
c3e16bb verified
Raw History Blame Contribute Delete
3.04 kB
import os
import requests
import sys
import copy
import random
import time
import glob
import math
import yaml
import torch
import torch.nn as nn
import torch.nn.functional as F
from tqdm import tqdm
from peft import LoraConfig
from types import SimpleNamespace
import sys
sys.path.append("./")
from diffusermodels.autoencoder_kl import AutoencoderKL as AutoencoderKLMerge
from diffusermodels.unet_2d_condition import UNet2DConditionModel as UNet2DConditionModelMerge
def UNetMergeLoRA(basemodel_path='', trainedmodel_path='', savepath='', savename=''):
loraweight = torch.load(trainedmodel_path)
# vae = AutoencoderKL.from_pretrained(pretrained_model_name_or_path, subfolder="vae")
unet = UNet2DConditionModelMerge.from_pretrained(basemodel_path, subfolder="unet")
# load unet lora
lora_conf_encoder = LoraConfig(r=loraweight["rank_unet"], init_lora_weights="gaussian", target_modules=loraweight["unet_lora_encoder_modules"])
lora_conf_decoder = LoraConfig(r=loraweight["rank_unet"], init_lora_weights="gaussian", target_modules=loraweight["unet_lora_decoder_modules"])
lora_conf_others = LoraConfig(r=loraweight["rank_unet"], init_lora_weights="gaussian", target_modules=loraweight["unet_lora_others_modules"])
unet.add_adapter(lora_conf_encoder, adapter_name="default_encoder")
unet.add_adapter(lora_conf_decoder, adapter_name="default_decoder")
unet.add_adapter(lora_conf_others, adapter_name="default_others")
for n, p in unet.named_parameters():
if "lora" in n or "conv_in" in n:
p.data.copy_(loraweight["state_dict_unet"][n])
unet.set_adapter(['default_encoder', 'default_decoder', 'default_others'])
unet = unet.merge_and_unload()
unet.save_pretrained(os.path.join(savepath, savename))
def VAEMergeLoRA(basemodel_path='', trainedmodel_path='', savepath='', savename=''):
loraweight = torch.load(trainedmodel_path)
vae = AutoencoderKL.from_pretrained(pretrained_model_name_or_path, subfolder="vae")
# load vae lora
vae_lora_conf_encoder = LoraConfig(r=loraweight["rank_vae"], init_lora_weights="gaussian", target_modules=loraweight["vae_lora_encoder_modules"])
vae_lora_conf_decoder = LoraConfig(r=loraweight["rank_vae"], init_lora_weights="gaussian", target_modules=loraweight["vae_lora_decoder_modules"])
vae.add_adapter(vae_lora_conf_encoder, adapter_name="default_encoder")
vae.add_adapter(vae_lora_conf_decoder, adapter_name="default_decoder")
for n, p in vae.named_parameters():
if "lora" in n:
p.data.copy_(loraweight["state_dict_vae"][n])
vae.set_adapter(['default_encoder'])
vae = vae.merge_and_unload()
vae.save_pretrained(os.path.join(savepath, savename))
unetbasemodel_path=''
unettrainedmodel_path=''
unetsavepath=''
unetsavename=''
UNetMergeLoRA(unetbasemodel_path, unettrainedmodel_path, unetsavepath, unetsavename)
vaebasemodel_path=''
vaetrainedmodel_path=''
vaesavepath=''
vaesavename=''
VAEMergeLoRA(vaebasemodel_path, vaetrainedmodel_path, vaesavepath, vaesavename)