ifire's picture
Initial mirror of VectorSpaceLab/EditScore@4609c5d
da50cbf verified
Raw History Blame Contribute Delete
2.15 kB
import dotenv
dotenv.load_dotenv(override=True)
import sys
import os
import argparse
from omegaconf import OmegaConf
import torch
from accelerate import init_empty_weights
from peft import LoraConfig
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
from omnigen2.models.transformers.transformer_omnigen2 import OmniGen2Transformer2DModel
def main(args):
config_path = args.config_path
model_path = args.model_path
conf = OmegaConf.load(config_path)
arch_opt = conf.model.arch_opt
arch_opt = OmegaConf.to_object(arch_opt)
# Convert lists to tuples in conf.model.arch_opt
for key, value in arch_opt.items():
if isinstance(value, list):
arch_opt[key] = tuple(value)
with init_empty_weights():
transformer = OmniGen2Transformer2DModel(**arch_opt)
if conf.train.get('lora_ft', False):
target_modules = ["to_k", "to_q", "to_v", "to_out.0"]
# now we will add new LoRA weights the transformer layers
lora_config = LoraConfig(
r=conf.train.lora_rank,
lora_alpha=conf.train.lora_rank,
lora_dropout=conf.train.lora_dropout,
init_lora_weights="gaussian",
target_modules=target_modules,
)
transformer.add_adapter(lora_config)
state_dict = torch.load(model_path, mmap=True, weights_only=True)
missing, unexpect = transformer.load_state_dict(
state_dict, assign=True, strict=False
)
print(f"missed parameters: {missing}")
print(f"unexpected parameters: {unexpect}")
save_path = args.save_path
transformer.fuse_lora()
transformer.unload_lora()
state_dict = transformer.state_dict()
torch.save(state_dict, save_path)
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("--config_path", type=str, required=True)
parser.add_argument("--model_path", type=str, required=True)
parser.add_argument("--save_path", type=str, required=True)
return parser.parse_args()
if __name__ == "__main__":
args = parse_args()
main(args)