| 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() |
|
|