|
import json |
|
import torch |
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
from peft import PeftModel |
|
from huggingface_hub import HfApi |
|
import gradio as gr |
|
import time |
|
|
|
|
|
merged_model = None |
|
tokenizer = None |
|
|
|
def merge_models(): |
|
print("Loading base model...") |
|
base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3-8B") |
|
|
|
print("Loading fine-tuned model...") |
|
fine_tuned_model_path = "NoaiGPT/autotrain-14mrs-fc44l" |
|
fine_tuned_model = PeftModel.from_pretrained(base_model, fine_tuned_model_path) |
|
|
|
print("Merging models...") |
|
merged_model = fine_tuned_model.merge_and_unload() |
|
|
|
print("Saving merged model...") |
|
merged_model.save_pretrained("merged_model") |
|
|
|
print("Saving tokenizer...") |
|
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct") |
|
tokenizer.save_pretrained("merged_model") |
|
|
|
return merged_model, tokenizer |
|
|
|
def push_to_hub(repo_name): |
|
print(f"Pushing merged model to Hugging Face Hub: {repo_name}") |
|
api = HfApi() |
|
|
|
try: |
|
api.create_repo(repo_name, private=True) |
|
print(f"Created new repository: {repo_name}") |
|
except Exception as e: |
|
print(f"Repository already exists or error occurred: {e}") |
|
|
|
api.upload_folder( |
|
folder_path="merged_model", |
|
repo_id=repo_name, |
|
repo_type="model", |
|
) |
|
print("Model pushed successfully!") |
|
|
|
def generate_text(input_text): |
|
global merged_model, tokenizer |
|
|
|
if merged_model is None or tokenizer is None: |
|
return "Model not loaded. Please run the merge process first." |
|
|
|
input_ids = tokenizer.encode(input_text, return_tensors="pt") |
|
|
|
with torch.no_grad(): |
|
output = merged_model.generate(input_ids, max_length=200, num_return_sequences=1) |
|
|
|
generated_text = tokenizer.decode(output[0], skip_special_tokens=True) |
|
return generated_text |
|
|
|
def run_merge_and_push(): |
|
global merged_model, tokenizer |
|
|
|
|
|
merged_model, tokenizer = merge_models() |
|
|
|
|
|
timestamp = int(time.time()) |
|
hub_repo_name = f"NoaiGPT/merged-llama3-8b-instruct-{timestamp}" |
|
|
|
|
|
push_to_hub(hub_repo_name) |
|
|
|
return f"Model merged and pushed to Hugging Face Hub successfully! Repository: {hub_repo_name}" |
|
|
|
|
|
with gr.Blocks() as demo: |
|
with gr.Tab("Generate Text"): |
|
iface = gr.Interface( |
|
fn=generate_text, |
|
inputs=gr.Textbox(lines=5, label="Input Text"), |
|
outputs=gr.Textbox(lines=10, label="Generated Text"), |
|
title="Merged Llama 3 8B Instruct Model", |
|
description="Enter text to generate a response from the merged model.", |
|
) |
|
iface.render() |
|
|
|
with gr.Tab("Merge and Push"): |
|
merge_and_push_button = gr.Button("Merge Models and Push to Hub") |
|
merge_and_push_output = gr.Textbox(lines=20, label="Merge and Push Output") |
|
merge_and_push_button.click(run_merge_and_push, outputs=merge_and_push_output) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |