oExz commited on
Commit
7df5582
·
verified ·
1 Parent(s): d7cfa95

Upload eval_gsm8k_tuned.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. eval_gsm8k_tuned.py +17 -39
eval_gsm8k_tuned.py CHANGED
@@ -1,6 +1,5 @@
1
  # /// script
2
  # dependencies = [
3
- # "vllm",
4
  # "transformers>=4.40.0",
5
  # "peft>=0.7.0",
6
  # "datasets>=2.14",
@@ -16,9 +15,9 @@ import os
16
  import re
17
  import json
18
  from datasets import load_dataset
19
- from vllm import LLM, SamplingParams
20
  from transformers import AutoModelForCausalLM, AutoTokenizer
21
  from peft import PeftModel
 
22
 
23
  hf_token = os.getenv("HF_TOKEN")
24
  if hf_token:
@@ -30,15 +29,12 @@ MAX_SAMPLES = int(os.getenv("MAX_SAMPLES", "250"))
30
 
31
  def extract_answer(text):
32
  text = text.strip()
33
- # Look for #### X format
34
  m = re.search(r"####\s*(-?\d+(?:\.\d+)?)", text)
35
  if m:
36
  return m.group(1).strip()
37
- # Look for ANSWER: X format
38
  m = re.search(r"ANSWER:\s*(-?\d+(?:\.\d+)?)", text, re.IGNORECASE)
39
  if m:
40
  return m.group(1).strip()
41
- # Last number fallback
42
  nums = re.findall(r"-?\d+(?:\.\d+)?", text)
43
  if nums:
44
  return nums[-1].strip()
@@ -63,50 +59,33 @@ if __name__ == '__main__':
63
  ground_truth = [extract_answer(ex["answer"]) for ex in ds]
64
 
65
  print(f"Loading base model {BASE_MODEL} + adapter {ADAPTER_REPO}...")
 
66
 
67
- # Merge adapter with base model and save to temp dir
68
- print("Merging LoRA adapter with base model...")
69
- base = AutoModelForCausalLM.from_pretrained(
70
  BASE_MODEL,
71
  trust_remote_code=True,
72
  torch_dtype="auto",
73
  device_map="auto",
74
  )
75
- tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, trust_remote_code=True)
76
- model = PeftModel.from_pretrained(base, ADAPTER_REPO)
77
  model = model.merge_and_unload()
78
-
79
- temp_dir = "/tmp/merged-qwen-tuned"
80
- print(f"Saving merged model to {temp_dir}...")
81
- model.save_pretrained(temp_dir)
82
- tokenizer.save_pretrained(temp_dir)
83
-
84
- # Free memory before vLLM loads
85
- del base, model
86
- import torch
87
- torch.cuda.empty_cache()
88
-
89
- print("Loading merged model with vLLM...")
90
- llm = LLM(
91
- model=temp_dir,
92
- trust_remote_code=True,
93
- dtype="half",
94
- gpu_memory_utilization=0.9,
95
- )
96
-
97
- sampling_params = SamplingParams(
98
- temperature=0,
99
- max_tokens=512,
100
- stop=["<|im_end|>", "<|endoftext|>"],
101
- )
102
 
103
  print(f"Generating answers for {len(questions)} questions...")
104
- outputs = llm.generate(questions, sampling_params)
105
-
106
  correct = 0
107
  results = []
108
- for i, out in enumerate(outputs):
109
- pred_text = out.outputs[0].text
 
 
 
 
 
 
 
 
 
 
110
  pred_answer = extract_answer(pred_text)
111
  gt = ground_truth[i]
112
  is_correct = pred_answer == gt
@@ -125,7 +104,6 @@ if __name__ == '__main__':
125
  print(f"Correct: {correct}/{len(ds)}")
126
  print(f"Accuracy: {accuracy:.2f}%")
127
 
128
- # Save results
129
  with open("/tmp/gsm8k_tuned_results.json", "w") as f:
130
  json.dump({
131
  "base_model": BASE_MODEL,
 
1
  # /// script
2
  # dependencies = [
 
3
  # "transformers>=4.40.0",
4
  # "peft>=0.7.0",
5
  # "datasets>=2.14",
 
15
  import re
16
  import json
17
  from datasets import load_dataset
 
18
  from transformers import AutoModelForCausalLM, AutoTokenizer
19
  from peft import PeftModel
20
+ from tqdm import tqdm
21
 
22
  hf_token = os.getenv("HF_TOKEN")
23
  if hf_token:
 
29
 
30
  def extract_answer(text):
31
  text = text.strip()
 
32
  m = re.search(r"####\s*(-?\d+(?:\.\d+)?)", text)
33
  if m:
34
  return m.group(1).strip()
 
35
  m = re.search(r"ANSWER:\s*(-?\d+(?:\.\d+)?)", text, re.IGNORECASE)
36
  if m:
37
  return m.group(1).strip()
 
38
  nums = re.findall(r"-?\d+(?:\.\d+)?", text)
39
  if nums:
40
  return nums[-1].strip()
 
59
  ground_truth = [extract_answer(ex["answer"]) for ex in ds]
60
 
61
  print(f"Loading base model {BASE_MODEL} + adapter {ADAPTER_REPO}...")
62
+ tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, trust_remote_code=True)
63
 
64
+ model = AutoModelForCausalLM.from_pretrained(
 
 
65
  BASE_MODEL,
66
  trust_remote_code=True,
67
  torch_dtype="auto",
68
  device_map="auto",
69
  )
70
+ model = PeftModel.from_pretrained(model, ADAPTER_REPO)
 
71
  model = model.merge_and_unload()
72
+ model.eval()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
 
74
  print(f"Generating answers for {len(questions)} questions...")
 
 
75
  correct = 0
76
  results = []
77
+
78
+ for i in tqdm(range(len(questions))):
79
+ inputs = tokenizer(questions[i], return_tensors="pt").to(model.device)
80
+ with torch.no_grad():
81
+ outputs = model.generate(
82
+ **inputs,
83
+ max_new_tokens=512,
84
+ do_sample=False,
85
+ pad_token_id=tokenizer.pad_token_id,
86
+ eos_token_id=tokenizer.eos_token_id,
87
+ )
88
+ pred_text = tokenizer.decode(outputs[0][inputs['input_ids'].shape[1]:], skip_special_tokens=True)
89
  pred_answer = extract_answer(pred_text)
90
  gt = ground_truth[i]
91
  is_correct = pred_answer == gt
 
104
  print(f"Correct: {correct}/{len(ds)}")
105
  print(f"Accuracy: {accuracy:.2f}%")
106
 
 
107
  with open("/tmp/gsm8k_tuned_results.json", "w") as f:
108
  json.dump({
109
  "base_model": BASE_MODEL,