| | |
| | import huggingface_hub |
| | from transformers import AutoModelForCausalLM, AutoTokenizer |
| | from peft import PeftModel |
| | import torch |
| |
|
| | import os |
| | import argparse |
| |
|
| | parser = argparse.ArgumentParser( |
| | prog='loraize', |
| | description='Apply one or more loras to a model, and then save it', |
| | epilog='BOTTOM TEXT') |
| | parser.add_argument( |
| | 'model', |
| | type=str, |
| | help='path or HF name of a base model', |
| | ) |
| | parser.add_argument( |
| | 'lora', |
| | type=str, |
| | help='one or more LORAs to apply', |
| | nargs='+') |
| | parser.add_argument( |
| | 'output_dir', |
| | type=str, |
| | help='output directory', |
| | ) |
| | args = parser.parse_args() |
| |
|
| | print(f"Loading bassoon model:", args.model) |
| | base_model = AutoModelForCausalLM.from_pretrained( |
| | args.model, |
| | return_dict=True, |
| | torch_dtype=torch.bfloat16, |
| | device_map="cpu", |
| | ) |
| |
|
| | for lora in args.lora: |
| | print(f"Loading LORA: ",lora) |
| | model = PeftModel.from_pretrained( |
| | base_model, |
| | lora, |
| | device_map="cpu" |
| | ) |
| | print(f"Good luck, bitches. Unloading.") |
| | print("This gon' take a sec.") |
| | model = model.merge_and_unload() |
| | tokenizer = AutoTokenizer.from_pretrained(args.model) |
| |
|
| | model.save_pretrained(args.output_dir, safe_serialization=True, max_shard_size='10GB') |
| | tokenizer.save_pretrained(args.output_dir) |
| |
|
| |
|