Fix MTP cache overflow during generation

#19
by iCavan - opened
Files changed (1) hide show
  1. modeling_bailing_moe_v3.py +14 -12
modeling_bailing_moe_v3.py CHANGED
@@ -1273,6 +1273,7 @@ class BailingMoeV3Model(BailingMoeV3PreTrainedModel):
1273
  output_hidden_states: Optional[bool] = None,
1274
  output_router_logits: Optional[bool] = None,
1275
  return_dict: Optional[bool] = None,
 
1276
  **kwargs,
1277
  ) -> Union[Tuple, MoeV3ModelOutputWithPast]:
1278
  output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions
@@ -1359,7 +1360,11 @@ class BailingMoeV3Model(BailingMoeV3PreTrainedModel):
1359
  all_router_logits = () if output_router_logits else None
1360
  next_decoder_cache = None
1361
  layers = self.layers[: -self.num_nextn_predict_layers] if self.num_nextn_predict_layers > 0 else self.layers
1362
- mtp_layers = self.layers[-self.num_nextn_predict_layers :] if self.num_nextn_predict_layers > 0 else None
 
 
 
 
1363
 
1364
  # tptest miss causal_mask = create_causal_mask(
1365
 
@@ -1424,10 +1429,10 @@ class BailingMoeV3Model(BailingMoeV3PreTrainedModel):
1424
  hidden_states,
1425
  attention_mask,
1426
  position_ids,
1427
- past_key_values,
1428
  output_attentions,
1429
  output_router_logits,
1430
- use_cache,
1431
  position_embeddings,
1432
  )
1433
  else:
@@ -1436,10 +1441,10 @@ class BailingMoeV3Model(BailingMoeV3PreTrainedModel):
1436
  hidden_states,
1437
  attention_mask=attention_mask,
1438
  position_ids=position_ids,
1439
- past_key_value=past_key_values,
1440
  output_attentions=output_attentions,
1441
  output_router_logits=output_router_logits,
1442
- use_cache=use_cache,
1443
  position_embeddings=position_embeddings,
1444
  )
1445
  if mtp_hidden_states is None:
@@ -1450,9 +1455,6 @@ class BailingMoeV3Model(BailingMoeV3PreTrainedModel):
1450
  if output_hidden_states:
1451
  all_hidden_states += (hidden_states,)
1452
 
1453
- if use_cache:
1454
- next_decoder_cache = layer_outputs[2 if output_attentions else 1]
1455
-
1456
  if output_attentions:
1457
  all_self_attns += (layer_outputs[1],)
1458
 
@@ -1554,6 +1556,7 @@ class BailingMoeV3ForCausalLM(BailingMoeV3PreTrainedModel, GenerationMixin):
1554
  output_router_logits if output_router_logits is not None else self.config.output_router_logits
1555
  )
1556
  return_dict = return_dict if return_dict is not None else self.config.use_return_dict
 
1557
  # decoder outputs consists of (dec_features, layer_state, dec_hidden, dec_attn)
1558
  outputs = self.model(
1559
  input_ids=input_ids,
@@ -1566,6 +1569,7 @@ class BailingMoeV3ForCausalLM(BailingMoeV3PreTrainedModel, GenerationMixin):
1566
  output_hidden_states=output_hidden_states,
1567
  output_router_logits=output_router_logits,
1568
  return_dict=return_dict,
 
1569
  **kwargs,
1570
  )
1571
 
@@ -1580,11 +1584,9 @@ class BailingMoeV3ForCausalLM(BailingMoeV3PreTrainedModel, GenerationMixin):
1580
  loss = self.loss_function(logits, labels, self.config.vocab_size, **kwargs)
1581
 
1582
  all_mtp_logits = None
1583
- if self.num_nextn_predict_layers > 0:
1584
- mtp_hidden_states = outputs.mtp_hidden_states
1585
  shift_labels_mtp = None
1586
- for i in range(self.num_nextn_predict_layers):
1587
- mtp_hidden_states = mtp_hidden_states[i]
1588
  mtp_logits = self.lm_head(mtp_hidden_states).float()
1589
  if all_mtp_logits is None:
1590
  all_mtp_logits = []
 
1273
  output_hidden_states: Optional[bool] = None,
1274
  output_router_logits: Optional[bool] = None,
1275
  return_dict: Optional[bool] = None,
1276
+ run_mtp: bool = False,
1277
  **kwargs,
1278
  ) -> Union[Tuple, MoeV3ModelOutputWithPast]:
1279
  output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions
 
1360
  all_router_logits = () if output_router_logits else None
1361
  next_decoder_cache = None
1362
  layers = self.layers[: -self.num_nextn_predict_layers] if self.num_nextn_predict_layers > 0 else self.layers
1363
+ mtp_layers = (
1364
+ self.layers[-self.num_nextn_predict_layers :]
1365
+ if run_mtp and self.num_nextn_predict_layers > 0
1366
+ else None
1367
+ )
1368
 
1369
  # tptest miss causal_mask = create_causal_mask(
1370
 
 
1429
  hidden_states,
1430
  attention_mask,
1431
  position_ids,
1432
+ None,
1433
  output_attentions,
1434
  output_router_logits,
1435
+ False,
1436
  position_embeddings,
1437
  )
1438
  else:
 
1441
  hidden_states,
1442
  attention_mask=attention_mask,
1443
  position_ids=position_ids,
1444
+ past_key_value=None,
1445
  output_attentions=output_attentions,
1446
  output_router_logits=output_router_logits,
1447
+ use_cache=False,
1448
  position_embeddings=position_embeddings,
1449
  )
1450
  if mtp_hidden_states is None:
 
1455
  if output_hidden_states:
1456
  all_hidden_states += (hidden_states,)
1457
 
 
 
 
1458
  if output_attentions:
1459
  all_self_attns += (layer_outputs[1],)
1460
 
 
1556
  output_router_logits if output_router_logits is not None else self.config.output_router_logits
1557
  )
1558
  return_dict = return_dict if return_dict is not None else self.config.use_return_dict
1559
+ run_mtp = labels is not None and self.num_nextn_predict_layers > 0
1560
  # decoder outputs consists of (dec_features, layer_state, dec_hidden, dec_attn)
1561
  outputs = self.model(
1562
  input_ids=input_ids,
 
1569
  output_hidden_states=output_hidden_states,
1570
  output_router_logits=output_router_logits,
1571
  return_dict=return_dict,
1572
+ run_mtp=run_mtp,
1573
  **kwargs,
1574
  )
1575
 
 
1584
  loss = self.loss_function(logits, labels, self.config.vocab_size, **kwargs)
1585
 
1586
  all_mtp_logits = None
1587
+ if run_mtp:
 
1588
  shift_labels_mtp = None
1589
+ for mtp_hidden_states in outputs.mtp_hidden_states:
 
1590
  mtp_logits = self.lm_head(mtp_hidden_states).float()
1591
  if all_mtp_logits is None:
1592
  all_mtp_logits = []