| | import gradio as gr |
| | from transformers import AutoModelForCausalLM, AutoTokenizer |
| | import torch |
| | from datasets import load_dataset |
| | import spaces |
| | from huggingface_hub import login |
| | import os |
| | from itertools import islice |
| |
|
| | login(token=os.environ.get("hf_token")) |
| |
|
| | |
| | model = AutoModelForCausalLM.from_pretrained("flamiry/first") |
| | tokenizer = AutoTokenizer.from_pretrained("flamiry/first") |
| | tokenizer.pad_token = tokenizer.eos_token |
| |
|
| | |
| | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
| | model = model.to(device) |
| |
|
| | @spaces.GPU |
| | def train_model(start, end): |
| | start = int(start) |
| | end = int(end) |
| | try: |
| | dataset = load_dataset("allenai/c4", "sk", split="train", streaming=True) |
| | slovak_texts = [example['text'] for example in islice(dataset, start, end)] |
| | inputs = tokenizer( |
| | slovak_texts, |
| | return_tensors="pt", |
| | padding=True, |
| | truncation=True, |
| | max_length=512 |
| | ) |
| | |
| | |
| | inputs = {k: v.to(device) for k, v in inputs.items()} |
| | |
| | optimizer = torch.optim.Adam(model.parameters(), lr=5e-5) |
| | for epoch in range(2): |
| | optimizer.zero_grad() |
| | outputs = model(**inputs, labels=inputs['input_ids']) |
| | loss = outputs.loss |
| | loss.backward() |
| | optimizer.step() |
| | |
| | model.push_to_hub("flamiry/first") |
| | tokenizer.push_to_hub("flamiry/first") |
| | |
| | return f"✅ Training complete! Final Loss: {loss.item():.4f}" |
| | except Exception as e: |
| | return f"❌ Error: {str(e)}" |
| |
|
| | @spaces.GPU |
| | def generate_text(prompt): |
| | try: |
| | input_ids = tokenizer.encode(prompt, return_tensors="pt").to(device) |
| | output = model.generate(input_ids, max_length=50) |
| | return tokenizer.decode(output[0], skip_special_tokens=True) |
| | except Exception as e: |
| | return f"❌ Error: {str(e)}" |
| |
|
| | with gr.Blocks() as demo: |
| | gr.Markdown("# Slovak LLM Training") |
| | |
| | with gr.Tab("Train Model"): |
| | gr.Markdown("Click to train the model on Slovak data") |
| | start_input = gr.Textbox(label="Start") |
| | end_input = gr.Textbox(label="End") |
| | train_btn = gr.Button("Start Training", variant="primary") |
| | train_output = gr.Textbox(label="Result", interactive=False) |
| | train_btn.click(train_model, inputs=[start_input, end_input], outputs=train_output) |
| | |
| | with gr.Tab("Generate Text"): |
| | gr.Markdown("Generate Slovak text") |
| | prompt_input = gr.Textbox(label="Prompt") |
| | gen_btn = gr.Button("Generate") |
| | gen_output = gr.Textbox(label="Generated Text", interactive=False) |
| | gen_btn.click(generate_text, inputs=prompt_input, outputs=gen_output) |
| |
|
| | demo.launch() |