Add kaggle/train_grpo.py
Browse files- 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 |
-
|
| 329 |
-
|
| 330 |
-
|
| 331 |
-
|
| 332 |
-
|
| 333 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 334 |
if model is None or tokenizer is None:
|
| 335 |
-
print("[ckpt-eval] missing model/tokenizer;
|
| 336 |
-
|
| 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)} ===")
|