piyush-mk commited on
Commit
d1e9e92
·
verified ·
1 Parent(s): c01c661

Sync InvoiceGuard code for GRPO training job

Browse files
training/launch_hf_job.py CHANGED
@@ -84,10 +84,16 @@ def submit_job(args: argparse.Namespace, code_repo_id: str) -> None:
84
  "BASE_MODEL": args.base_model,
85
  "TRACKIO_PROJECT": args.trackio_project,
86
  "TRACKIO_RUN_NAME": args.run_name,
 
 
87
  },
88
  script_args=[
89
  "--num-iterations", str(args.num_iterations),
90
  "--group-size", str(args.group_size),
 
 
 
 
91
  ] + (["--max-train-tasks", str(args.max_train_tasks)]
92
  if args.max_train_tasks else []),
93
  )
@@ -115,6 +121,10 @@ def main() -> None:
115
  p.add_argument("--num-iterations", type=int, default=3)
116
  p.add_argument("--group-size", type=int, default=4)
117
  p.add_argument("--max-train-tasks", type=int, default=None)
 
 
 
 
118
  p.add_argument("--trackio-project", default="invoiceguard-round2")
119
  p.add_argument("--run-name", default="qwen25-7b-grpo")
120
  p.add_argument("--skip-upload", action="store_true",
 
84
  "BASE_MODEL": args.base_model,
85
  "TRACKIO_PROJECT": args.trackio_project,
86
  "TRACKIO_RUN_NAME": args.run_name,
87
+ "PYTORCH_CUDA_ALLOC_CONF": "expandable_segments:True",
88
+ "TOKENIZERS_PARALLELISM": "false",
89
  },
90
  script_args=[
91
  "--num-iterations", str(args.num_iterations),
92
  "--group-size", str(args.group_size),
93
+ "--eval-holdout-canonical", str(args.eval_holdout_canonical),
94
+ "--eval-holdout-hard", str(args.eval_holdout_hard),
95
+ "--max-new-tokens", str(args.max_new_tokens),
96
+ "--max-prompt-tokens", str(args.max_prompt_tokens),
97
  ] + (["--max-train-tasks", str(args.max_train_tasks)]
98
  if args.max_train_tasks else []),
99
  )
 
121
  p.add_argument("--num-iterations", type=int, default=3)
122
  p.add_argument("--group-size", type=int, default=4)
123
  p.add_argument("--max-train-tasks", type=int, default=None)
124
+ p.add_argument("--eval-holdout-canonical", type=int, default=3)
125
+ p.add_argument("--eval-holdout-hard", type=int, default=3)
126
+ p.add_argument("--max-new-tokens", type=int, default=96)
127
+ p.add_argument("--max-prompt-tokens", type=int, default=2048)
128
  p.add_argument("--trackio-project", default="invoiceguard-round2")
129
  p.add_argument("--run-name", default="qwen25-7b-grpo")
130
  p.add_argument("--skip-upload", action="store_true",
training/rollout.py CHANGED
@@ -75,6 +75,7 @@ def rollout_episode(
75
  temperature: float = 1.0,
76
  top_p: float = 0.95,
77
  max_new_tokens: int = 160,
 
78
  device: Optional[torch.device] = None,
79
  ) -> Trajectory:
80
  """
@@ -97,6 +98,8 @@ def rollout_episode(
97
  prompt_text,
98
  return_tensors="pt",
99
  add_special_tokens=False,
 
 
100
  ).to(device)
101
  prompt_ids = prompt_enc.input_ids[0]
102
 
@@ -110,6 +113,9 @@ def rollout_episode(
110
  )
111
  completion_ids = gen[0, prompt_ids.shape[0]:]
112
  completion_text = tokenizer.decode(completion_ids, skip_special_tokens=True)
 
 
 
113
 
114
  messages.append({"role": "assistant", "content": completion_text})
115
 
 
75
  temperature: float = 1.0,
76
  top_p: float = 0.95,
77
  max_new_tokens: int = 160,
78
+ max_prompt_tokens: int = 2048,
79
  device: Optional[torch.device] = None,
80
  ) -> Trajectory:
81
  """
 
98
  prompt_text,
99
  return_tensors="pt",
100
  add_special_tokens=False,
101
+ truncation=True,
102
+ max_length=max_prompt_tokens,
103
  ).to(device)
104
  prompt_ids = prompt_enc.input_ids[0]
105
 
 
113
  )
114
  completion_ids = gen[0, prompt_ids.shape[0]:]
115
  completion_text = tokenizer.decode(completion_ids, skip_special_tokens=True)
116
+ del gen
117
+ if torch.cuda.is_available():
118
+ torch.cuda.empty_cache()
119
 
120
  messages.append({"role": "assistant", "content": completion_text})
121
 
training/train_grpo.py CHANGED
@@ -171,7 +171,8 @@ class TrainConfig:
171
  # Sampling
172
  sample_temperature: float = 1.0
173
  sample_top_p: float = 0.95
174
- max_new_tokens: int = 160
 
175
 
176
  # LoRA
177
  lora_r: int = 16
@@ -397,6 +398,7 @@ def train(cfg: TrainConfig) -> None:
397
  temperature=0.0001, # near-greedy for eval
398
  top_p=1.0,
399
  max_new_tokens=cfg.max_new_tokens,
 
400
  device=device,
401
  )
402
  scores.append(traj.grader_score)
@@ -528,6 +530,7 @@ def train(cfg: TrainConfig) -> None:
528
  temperature=cfg.sample_temperature,
529
  top_p=cfg.sample_top_p,
530
  max_new_tokens=cfg.max_new_tokens,
 
531
  device=device,
532
  )
533
  trajectories.append(traj)
@@ -692,6 +695,10 @@ def _parse_args() -> TrainConfig:
692
  p.add_argument("--seed", type=int, default=None)
693
  p.add_argument("--no-4bit", action="store_true")
694
  p.add_argument("--no-gradient-checkpointing", action="store_true")
 
 
 
 
695
  args = p.parse_args()
696
 
697
  cfg = TrainConfig()
@@ -707,6 +714,14 @@ def _parse_args() -> TrainConfig:
707
  cfg.lr = args.lr
708
  if args.seed is not None:
709
  cfg.seed = args.seed
 
 
 
 
 
 
 
 
710
  if args.no_push:
711
  cfg.push_to_hub = False
712
  if args.no_4bit:
 
171
  # Sampling
172
  sample_temperature: float = 1.0
173
  sample_top_p: float = 0.95
174
+ max_new_tokens: int = 96
175
+ max_prompt_tokens: int = 2048
176
 
177
  # LoRA
178
  lora_r: int = 16
 
398
  temperature=0.0001, # near-greedy for eval
399
  top_p=1.0,
400
  max_new_tokens=cfg.max_new_tokens,
401
+ max_prompt_tokens=cfg.max_prompt_tokens,
402
  device=device,
403
  )
404
  scores.append(traj.grader_score)
 
530
  temperature=cfg.sample_temperature,
531
  top_p=cfg.sample_top_p,
532
  max_new_tokens=cfg.max_new_tokens,
533
+ max_prompt_tokens=cfg.max_prompt_tokens,
534
  device=device,
535
  )
536
  trajectories.append(traj)
 
695
  p.add_argument("--seed", type=int, default=None)
696
  p.add_argument("--no-4bit", action="store_true")
697
  p.add_argument("--no-gradient-checkpointing", action="store_true")
698
+ p.add_argument("--eval-holdout-canonical", type=int, default=None)
699
+ p.add_argument("--eval-holdout-hard", type=int, default=None)
700
+ p.add_argument("--max-new-tokens", type=int, default=None)
701
+ p.add_argument("--max-prompt-tokens", type=int, default=None)
702
  args = p.parse_args()
703
 
704
  cfg = TrainConfig()
 
714
  cfg.lr = args.lr
715
  if args.seed is not None:
716
  cfg.seed = args.seed
717
+ if args.eval_holdout_canonical is not None:
718
+ cfg.eval_holdout_canonical = args.eval_holdout_canonical
719
+ if args.eval_holdout_hard is not None:
720
+ cfg.eval_holdout_hard = args.eval_holdout_hard
721
+ if args.max_new_tokens is not None:
722
+ cfg.max_new_tokens = args.max_new_tokens
723
+ if args.max_prompt_tokens is not None:
724
+ cfg.max_prompt_tokens = args.max_prompt_tokens
725
  if args.no_push:
726
  cfg.push_to_hub = False
727
  if args.no_4bit: