vanishingradient commited on
Commit
eb61e79
·
verified ·
1 Parent(s): a31a731

Add kaggle/train_grpo.py

Browse files
Files changed (1) hide show
  1. kaggle/train_grpo.py +14 -20
kaggle/train_grpo.py CHANGED
@@ -298,17 +298,7 @@ def make_eval_before_save_callback(
298
  class EvalBeforeCheckpointCallback(TrainerCallback):
299
  def __init__(self) -> None:
300
  self._last_eval_step = -1
301
-
302
- def on_save(
303
- self,
304
- args: TrainingArguments,
305
- state: TrainerState,
306
- control: TrainerControl,
307
- **kwargs,
308
- ):
309
- # Transformers calls on_save AFTER saving locally. We also hook on_step_end
310
- # to eval+langfuse BEFORE hub push. See on_step_end.
311
- return control
312
 
313
  def on_step_end(
314
  self,
@@ -325,16 +315,20 @@ def make_eval_before_save_callback(
325
  self._last_eval_step = step
326
 
327
  model = kwargs.get("model")
328
- tokenizer = kwargs.get("processing_class") or kwargs.get("tokenizer")
329
- # GRPOTrainer may put tokenizer on trainer; fallback via kwargs["train"] not available
330
- trainer = kwargs.get("trainer") # usually absent
331
- if tokenizer is None:
332
- # recover from module global set in main()
333
- tokenizer = globals().get("_TOKENIZER")
 
 
 
 
 
334
  if model is None or tokenizer is None:
335
- print("[ckpt-eval] missing model/tokenizer; skipping")
336
- return control
337
-
338
  rev = f"grpo-step-{step}"
339
  problems = eval_problems[:n_eval]
340
  print(f"\n=== EVAL BEFORE CHECKPOINT step={step} rev={rev} n={len(problems)} ===")
 
298
  class EvalBeforeCheckpointCallback(TrainerCallback):
299
  def __init__(self) -> None:
300
  self._last_eval_step = -1
301
+ self.trainer = None # set after GRPOTrainer construction
 
 
 
 
 
 
 
 
 
 
302
 
303
  def on_step_end(
304
  self,
 
315
  self._last_eval_step = step
316
 
317
  model = kwargs.get("model")
318
+ if model is None and self.trainer is not None:
319
+ model = self.trainer.model
320
+ tokenizer = (
321
+ kwargs.get("processing_class")
322
+ or kwargs.get("tokenizer")
323
+ or globals().get("_TOKENIZER")
324
+ )
325
+ if tokenizer is None and self.trainer is not None:
326
+ tokenizer = getattr(self.trainer, "processing_class", None) or getattr(
327
+ self.trainer, "tokenizer", None
328
+ )
329
  if model is None or tokenizer is None:
330
+ print("[ckpt-eval] missing model/tokenizer; aborting save pipeline")
331
+ raise RuntimeError("ckpt-eval requires model+tokenizer")
 
332
  rev = f"grpo-step-{step}"
333
  problems = eval_problems[:n_eval]
334
  print(f"\n=== EVAL BEFORE CHECKPOINT step={step} rev={rev} n={len(problems)} ===")