qlora adapter merge
#1
by
ajmoreno
- opened
Well done on the fine tune. Quick question: how did you go about merging the QLoRA adapter to the base model?
this is how I do it
# base model
base_path="microsoft/phi-2"
# adapters: path to folder with adapter_model.safetensors
adapter_path="out_13eea581-01dd-40d0-b60d-139533583998/checkpoint-13518"
# Load model and tokenizer
base_model = AutoModelForCausalLM.from_pretrained(
base_path,
torch_dtype=torch.bfloat16,
)
tokenizer = AutoTokenizer.from_pretrained(base_path)
# Add/set tokens same tokens to base model before merging, like we did before training
tokenizer.add_tokens(["<|im_start|>", "<PAD>"])
tokenizer.pad_token = "<PAD>"
tokenizer.add_special_tokens(dict(eos_token="<|im_end|>"))
base_model.config.eos_token_id = tokenizer.eos_token_id
# Add ChatML template to tokenizer
tokenizer.chat_template="{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}"
base_model.config.eos_token_id = tokenizer.eos_token_id
# Set a default Generation configuration: Llama precise
generation_config = GenerationConfig(
max_new_tokens=100,
temperature=0.7,
top_p=0.1,
top_k=40,
repetition_penalty=1.18,
do_sample=True,
pad_token_id=tokenizer.pad_token_id,
eos_token_id=tokenizer.eos_token_id,
)
# Load LoRA and merge
model = PeftModel.from_pretrained(base_model, adapter_path)
model = model.merge_and_unload()
upload_repo="g-ronimo/phi-2-OpenHermes-2.5"
model.push_to_hub(upload_repo, private=True)
tokenizer.push_to_hub(upload_repo, private=True)
generation_config.push_to_hub(upload_repo, private=True)
g-ronimo
changed discussion status to
closed