Views
No views yet
google/gemma-2b-itDATASETS = ["gsm8k"]
PER_DEVICE_BATCH = 1
GRAD_ACCUM = 16
EPOCHS_PER_STAGE = 21
LR = 2e-5
MAX_SEQ_LEN = 512
load_in_4bit = True
bnb_4bit_compute_dtype = bfloat16
optimizer = paged_adamw_32bit
fp16 = True"Let's think step by step:\n{question}"do_sample = False, max_new_tokens = 320).| Model | Accuracy | Score |
|---|---|---|
| Base Gemma-2B-IT | 100 / 1000 | 10.0% |
| Fine-tuned (LoRA Merged) | 122 / 1000 | 12.2% |
"Let's think step by step:\n{instruction}"1import os, re, csv, torch, sys
2from datasets import load_dataset
3from transformers import AutoTokenizer, AutoModelForCausalLM
4
5# Your HF model
6HF_MERGED_MODEL = "Ponmurugaiya72/gemma-2b-math-lora-cot"
7BASE_MODEL = "google/gemma-2b-it"
8
9NUM_SAMPLES = 1000
10MAX_NEW_TOKENS = 320
11CSV_PATH = "gsm8k_eval.csv"
12
13
14# -------------------
15# Load tokenizer
16# -------------------
17tokenizer = AutoTokenizer.from_pretrained(HF_MERGED_MODEL)
18if tokenizer.pad_token is None:
19 tokenizer.pad_token = tokenizer.eos_token
20
21
22# -------------------
23# Load base model
24# -------------------
25base = AutoModelForCausalLM.from_pretrained(
26 BASE_MODEL, torch_dtype=torch.float16, device_map="auto"
27)
28
29# -------------------
30# Load fine-tuned merged FP16 model
31# -------------------
32merged = AutoModelForCausalLM.from_pretrained(
33 HF_MERGED_MODEL, torch_dtype=torch.float16, device_map="auto"
34)
35
36
37# -------------------
38# Load GSM8K test set
39# -------------------
40ds = load_dataset("gsm8k", "main")
41test = ds["test"].select(range(NUM_SAMPLES))
42
43
44# -------------------
45# Prompt + helpers
46# -------------------
47def build_prompt(q):
48 return (
49 "Solve step-by-step and at the end output:\n"
50 "Final Answer: #### <number>\n\n"
51 f"Problem: {q}\n\nLet's reason:\n"
52 )
53
54def extract_final_answer(text):
55 m = re.search(r"Final Answer:\s*#+\s*([0-9\.\-]+)", text)
56 if m:
57 return m.group(1).strip()
58 nums = re.findall(r"[-]?\d+\.?\d*", text)
59 return nums[-1] if nums else None
60
61def generate(model, prompt):
62 inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
63 with torch.no_grad():
64 out = model.generate(
65 **inputs,
66 max_new_tokens=MAX_NEW_TOKENS,
67 do_sample=False,
68 pad_token_id=tokenizer.eos_token_id
69 )
70 return tokenizer.decode(out[0], skip_special_tokens=True)
71
72
73# -------------------
74# Evaluation loop
75# -------------------
76base_correct = merged_correct = 0
77
78for i, sample in enumerate(test):
79 q, a = sample["question"], sample["answer"]
80
81 gt = re.search(r"####\s*([0-9\.\-]+)", a).group(1)
82
83 prompt = build_prompt(q)
84
85 base_out = generate(base, prompt)
86 merged_out = generate(merged, prompt)
87
88 base_pred = extract_final_answer(base_out)
89 merged_pred = extract_final_answer(merged_out)
90
91 if base_pred == gt:
92 base_correct += 1
93 if merged_pred == gt:
94 merged_correct += 1
95
96 print(f"[{i+1}/{NUM_SAMPLES}] Base={base_pred}, Merged={merged_pred}, GT={gt}")
97
98
99print("Base Accuracy :", base_correct / NUM_SAMPLES)
100print("Merged Accuracy :", merged_correct / NUM_SAMPLES)1from transformers import AutoTokenizer, AutoModelForCausalLM
2import torch
3
4model_id = "Ponmurugaiya72/gemma-2b-math-lora-cot"
5
6model = AutoModelForCausalLM.from_pretrained(
7 model_id, torch_dtype=torch.float16, device_map="auto"
8)
9tokenizer = AutoTokenizer.from_pretrained(model_id)
10
11prompt = "Let's think step by step: A train travels 60 miles in 1.5 hours. What is its speed?"
12
13inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
14output = model.generate(**inputs, max_new_tokens=256, do_sample=False)
15
16print(tokenizer.decode(output[0], skip_special_tokens=True))