from pathlib import Path import modules.shared as shared from modules.models import load_model def add_lora_to_model(lora_name): from peft import PeftModel # Is there a more efficient way of returning to the base model? if lora_name == "None": print("Reloading the model to remove the LoRA...") shared.model, shared.tokenizer = load_model(shared.model_name) else: print(f"Adding the LoRA {lora_name} to the model...") params = {} if not shared.args.cpu: params['dtype'] = shared.model.dtype if hasattr(shared.model, "hf_device_map"): params['device_map'] = {"base_model.model."+k: v for k, v in shared.model.hf_device_map.items()} elif shared.args.load_in_8bit: params['device_map'] = {'': 0} shared.model = PeftModel.from_pretrained(shared.model, Path(f"loras/{lora_name}"), **params) if not shared.args.load_in_8bit and not shared.args.cpu: shared.model.half() if not hasattr(shared.model, "hf_device_map"): shared.model.cuda()