wevia-gpu / app.py
yace222's picture
FIX: ZeroGPU + spaces.GPU decorator
24fd5b4 verified
import gradio as gr
import spaces
import os, subprocess
@spaces.GPU(duration=600)
def train():
log = []
subprocess.run(['pip','install','-q','unsloth','datasets','trl','peft','accelerate','bitsandbytes'],capture_output=True)
log.append('Packages installed')
subprocess.run(['wget','-q','https://huggingface.co/datasets/yace222/weval-brain-dataset/resolve/main/train_chatml.jsonl','-O','/tmp/train.jsonl'],capture_output=True)
with open('/tmp/train.jsonl') as f: count=sum(1 for _ in f)
log.append(f'Dataset: {count} pairs')
try:
from unsloth import FastLanguageModel
import torch
model,tok = FastLanguageModel.from_pretrained(model_name='unsloth/Qwen2.5-7B-Instruct-bnb-4bit',max_seq_length=2048,load_in_4bit=True)
model = FastLanguageModel.get_peft_model(model,r=16,target_modules=['q_proj','k_proj','v_proj','o_proj','gate_proj','up_proj','down_proj'],lora_alpha=16,lora_dropout=0,bias='none',use_gradient_checkpointing='unsloth')
log.append('Model+LoRA ready')
from datasets import load_dataset
ds = load_dataset('json',data_files='/tmp/train.jsonl',split='train')
def fmt(ex): return {'text':tok.apply_chat_template(ex['messages'],tokenize=False,add_generation_prompt=False)}
ds = ds.map(fmt)
from trl import SFTTrainer
from transformers import TrainingArguments
trainer = SFTTrainer(model=model,tokenizer=tok,train_dataset=ds,dataset_text_field='text',max_seq_length=2048,args=TrainingArguments(per_device_train_batch_size=2,gradient_accumulation_steps=4,warmup_steps=5,num_train_epochs=3,learning_rate=2e-4,fp16=not torch.cuda.is_bf16_supported(),bf16=torch.cuda.is_bf16_supported(),logging_steps=1,output_dir='outputs',optim='adamw_8bit',seed=42))
stats = trainer.train()
log.append(f'Loss: {stats.training_loss:.4f}')
model.save_pretrained_gguf('gguf',tok,quantization_method='q4_k_m')
HF_TOKEN = os.environ.get('HF_TOKEN','')
if HF_TOKEN:
model.push_to_hub_gguf('yace222/weval-brain-v3-gguf',tok,quantization_method='q4_k_m',token=HF_TOKEN)
log.append('Pushed to HF!')
except Exception as e:
log.append(f'ERROR: {e}')
return chr(10).join(log)
demo = gr.Interface(fn=train,inputs=[],outputs=gr.Textbox(lines=20),title='WEVAL Brain AutoTrain')
demo.launch()