@@ -21,6 +21,10 @@ def compute_causal_lm_metrics(eval_pred: EvalPrediction) -> Dict[str, float]:
2121 - Perplexity: exp(loss)
2222 - Loss: Cross-entropy loss
2323
24+ Note: When preprocess_logits_for_metrics is used, predictions contain
25+ pre-computed scalar losses (one per eval batch) instead of full logit tensors.
26+ This prevents RAM exhaustion during evaluation.
27+
2428 Args:
2529 eval_pred: Evaluation prediction with predictions and labels
2630
@@ -29,28 +33,16 @@ def compute_causal_lm_metrics(eval_pred: EvalPrediction) -> Dict[str, float]:
2933 """
3034 logger .info ("Computing causal LM metrics" )
3135
32- import torch
33- import torch .nn .functional as F
34-
35- predictions , labels = eval_pred .predictions , eval_pred .label_ids
36-
37- logits = torch .from_numpy (np .array (predictions )).float ()
38- lbl = torch .from_numpy (np .array (labels ))
39-
40- shift_logits = logits [..., :- 1 , :].contiguous ()
41- shift_labels = lbl [..., 1 :].contiguous ()
36+ predictions = eval_pred .predictions
4237
43- loss = F .cross_entropy (
44- shift_logits .view (- 1 , shift_logits .size (- 1 )),
45- shift_labels .view (- 1 ).long (),
46- ignore_index = - 100 ,
47- reduction = "mean" ,
48- )
49- perplexity = float (torch .exp (loss ))
38+ # predictions is shape (num_eval_batches, 1) of pre-computed scalar losses
39+ # (from _preprocess_logits_for_metrics in sft_strategy.py)
40+ mean_loss = float (np .mean (predictions ))
41+ perplexity = float (np .exp (mean_loss ))
5042
5143 metrics = {
5244 "perplexity" : perplexity ,
53- "eval_loss" : float ( loss ) ,
45+ "eval_loss" : mean_loss ,
5446 }
5547
5648 logger .info (f"Causal LM metrics: { metrics } " )
0 commit comments