gradio-test / app.py
trigger166's picture
slarkprime/Llama-2-7b-QLoRA
0ec3c66
import os
import gradio as gr
import torch
from transformers import AutoModelForCausalLM, AutoModelForSeq2SeqLM, AutoTokenizer, Trainer, TrainingArguments, EncoderDecoderCache
from datasets import load_dataset
from huggingface_hub import login
hf_token = os.getenv("HF_TOKEN")
if hf_token is None:
raise ValueError("Il token HF_TOKEN non è impostato nelle variabili d'ambiente")
login(hf_token)
# Carica il dataset dal file JSONL
dataset = load_dataset("json", data_files="data.jsonl")
# Definisci il modello e il tokenizer
#model_name = "meta-llama/Llama-2-7b-hf"
model_name = "slarkprime/Llama-2-7b-QLoRA"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Sposta il modello su GPU se disponibile
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
# Tokenizza il dataset
def preprocess_data(example):
inputs = tokenizer(example["text"], truncation=True, max_length=256)
inputs["labels"] = inputs["input_ids"].copy()
return inputs
tokenized_dataset = dataset.map(preprocess_data, batched=True)
# Configura i parametri di addestramento
training_args = TrainingArguments(
output_dir="./results",
eval_strategy="no",
learning_rate=2e-5,
per_device_train_batch_size=4,
num_train_epochs=3,
weight_decay=0.01,
fp16=torch.cuda.is_available(), # Usa mixed precision se GPU è disponibile
)
# Inizializza il Trainer
def start_training():
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset["train"]
)
trainer.train()
trainer.push_to_hub("to_validate_model")
return "Training completato e caricato"
def answer_question(question):
inputs = tokenizer(question, return_tensors="pt", truncation=True, max_length=128).to(device)
outputs = model.generate(inputs["input_ids"], max_length=50, pad_token_id=tokenizer.eos_token_id)
answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
return answer
iface = gr.Interface(fn=answer_question, inputs="text", outputs="text")
train_interface = gr.Interface(fn=start_training, inputs=[], outputs="text")
app = gr.TabbedInterface([iface, train_interface], ["Q&A", "Avvia Training"])
iface.launch()