1- from typing import Any , ClassVar
1+ from typing import ClassVar
22
33import torch
44from torch import nn
1818 get_base_indices_for_anchored_blocks ,
1919 select_anchors ,
2020)
21+ from speculators .models .metrics import kl_div_loss , resolve_loss_fn
2122from speculators .models .utils import resolve_target_layer_ids
2223
2324
@@ -162,7 +163,7 @@ def from_training_args(
162163 return model
163164
164165 @staticmethod
165- def get_trainer_kwargs (** kwargs ) -> tuple [dict , dict ]: # noqa: ARG004
166+ def get_trainer_kwargs (** kwargs ) -> tuple [dict , dict ]:
166167 """Get training and validation kwargs for DFlash.
167168
168169 Args:
@@ -171,9 +172,8 @@ def get_trainer_kwargs(**kwargs) -> tuple[dict, dict]: # noqa: ARG004
171172 Returns:
172173 Tuple of (train_call_kwargs, val_call_kwargs)
173174 """
174- train_kwargs : dict [str , Any ] = {}
175- val_kwargs : dict [str , Any ] = {}
176- return train_kwargs , val_kwargs
175+ loss_fn = resolve_loss_fn (kwargs ["loss_fn" ])
176+ return {"loss_fn" : loss_fn }, {"loss_fn" : loss_fn }
177177
178178 @property
179179 def mask_token_id (self ) -> int :
@@ -194,6 +194,7 @@ def forward(
194194 verifier_last_hidden_states : torch .Tensor , # shape: [1, total_seq_len, hidden_size] # noqa: E501
195195 lengths : torch .Tensor | None = None , # shape: [batch_size]
196196 position_ids : torch .Tensor | None = None , # shape: [1, total_seq_len]
197+ loss_fn = kl_div_loss ,
197198 ** kwargs ,
198199 ):
199200 device = hidden_states .device
@@ -293,7 +294,7 @@ def forward(
293294
294295 aligned_loss_mask [:, :: self .block_size ] = 0
295296 loss , metrics = compute_metrics (
296- logits , targets , aligned_loss_mask , self .block_size
297+ logits , targets , aligned_loss_mask , self .block_size , loss_fn = loss_fn
297298 )
298299 draft_tokens = torch .argmax (logits , dim = - 1 )
299300
0 commit comments