|
import gradio as gr |
|
import spaces |
|
import torch |
|
from transformers import Trainer, TrainingArguments |
|
from datasets import load_dataset |
|
from transformers import ( |
|
AutoConfig, |
|
AutoTokenizer, |
|
AutoModelForCausalLM, |
|
DataCollatorForLanguageModeling, |
|
) |
|
|
|
@spaces.GPU(duration=600) |
|
def run_finetuning(): |
|
|
|
ds = load_dataset("Magpie-Align/Magpie-Reasoning-V2-250K-CoT-Deepseek-R1-Llama-70B") |
|
|
|
ds_small = ds["train"].select(range(1000)) |
|
|
|
|
|
def format_row(ex): |
|
return {"text": f"User: {ex['instruction']}\nAssistant: {ex['response']}"} |
|
ds_small = ds_small.map(format_row) |
|
|
|
|
|
config = AutoConfig.from_pretrained("wuhp/myr1", subfolder="myr1", trust_remote_code=True) |
|
tokenizer = AutoTokenizer.from_pretrained("wuhp/myr1", subfolder="myr1", trust_remote_code=True) |
|
model = AutoModelForCausalLM.from_pretrained( |
|
"wuhp/myr1", |
|
subfolder="myr1", |
|
config=config, |
|
torch_dtype=torch.float16, |
|
device_map="auto", |
|
trust_remote_code=True |
|
) |
|
|
|
|
|
def tokenize(ex): |
|
return tokenizer(ex["text"], truncation=True, max_length=512) |
|
ds_small = ds_small.map(tokenize, batched=True) |
|
|
|
ds_small.set_format("torch") |
|
collator = DataCollatorForLanguageModeling(tokenizer, mlm=False) |
|
|
|
|
|
args = TrainingArguments( |
|
output_dir="finetuned_model", |
|
num_train_epochs=1, |
|
per_device_train_batch_size=1, |
|
logging_steps=5, |
|
fp16=True, |
|
save_strategy="no", |
|
) |
|
trainer = Trainer( |
|
model=model, |
|
args=args, |
|
train_dataset=ds_small, |
|
data_collator=collator, |
|
) |
|
trainer.train() |
|
|
|
|
|
trainer.save_model("finetuned_model") |
|
tokenizer.save_pretrained("finetuned_model") |
|
return "Finetuning done!" |
|
|
|
|
|
with gr.Blocks() as demo: |
|
btn = gr.Button("Run Finetuning (10 min max!)") |
|
status = gr.Textbox(label="Status") |
|
btn.click(fn=run_finetuning, inputs=None, outputs=status) |
|
|
|
demo.launch() |
|
|