[PP] Pass DSA topk through PP warmup proxy buffers (#28785)
This commit is contained in:
@@ -78,6 +78,7 @@ def _allocate_decode_buffers(
|
|||||||
enable_mamba_track: bool,
|
enable_mamba_track: bool,
|
||||||
ne_token_table: Optional[torch.Tensor] = None,
|
ne_token_table: Optional[torch.Tensor] = None,
|
||||||
hc_hidden_size: Optional[int] = None,
|
hc_hidden_size: Optional[int] = None,
|
||||||
|
pp_proxy_topk_size: Optional[int] = None,
|
||||||
) -> SimpleNamespace:
|
) -> SimpleNamespace:
|
||||||
"""Allocate the FB-shared decode buffers."""
|
"""Allocate the FB-shared decode buffers."""
|
||||||
with torch.device(device):
|
with torch.device(device):
|
||||||
@@ -115,6 +116,10 @@ def _allocate_decode_buffers(
|
|||||||
pp_proxy_tensors["residual"] = torch.zeros(
|
pp_proxy_tensors["residual"] = torch.zeros(
|
||||||
(max_bs, hidden_size), dtype=dtype
|
(max_bs, hidden_size), dtype=dtype
|
||||||
)
|
)
|
||||||
|
if pp_proxy_topk_size is not None:
|
||||||
|
pp_proxy_tensors["topk_indices"] = torch.zeros(
|
||||||
|
(max_num_token, pp_proxy_topk_size), dtype=torch.int32
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
pp_proxy_tensors = None
|
pp_proxy_tensors = None
|
||||||
|
|
||||||
@@ -429,6 +434,7 @@ class BaseRunner(ABC):
|
|||||||
cache_loc_dtype=torch.int64,
|
cache_loc_dtype=torch.int64,
|
||||||
enable_mamba_track=False,
|
enable_mamba_track=False,
|
||||||
hc_hidden_size=getattr(mr.model_config, "hc_hidden_size", None),
|
hc_hidden_size=getattr(mr.model_config, "hc_hidden_size", None),
|
||||||
|
pp_proxy_topk_size=mr.get_pp_proxy_topk_size(),
|
||||||
)
|
)
|
||||||
|
|
||||||
def _dummy_run(
|
def _dummy_run(
|
||||||
|
|||||||
@@ -190,6 +190,11 @@ class EagerRunner(BaseRunner):
|
|||||||
pp_proxy_tensors["residual"] = torch.zeros(
|
pp_proxy_tensors["residual"] = torch.zeros(
|
||||||
(rows, hidden_size), dtype=mr.dtype, device=mr.device
|
(rows, hidden_size), dtype=mr.dtype, device=mr.device
|
||||||
)
|
)
|
||||||
|
pp_proxy_topk_size = mr.get_pp_proxy_topk_size()
|
||||||
|
if pp_proxy_topk_size is not None:
|
||||||
|
pp_proxy_tensors["topk_indices"] = torch.zeros(
|
||||||
|
(rows, pp_proxy_topk_size), dtype=torch.int32, device=mr.device
|
||||||
|
)
|
||||||
|
|
||||||
adapter = SimpleNamespace(
|
adapter = SimpleNamespace(
|
||||||
input_ids=_slot("input_ids"),
|
input_ids=_slot("input_ids"),
|
||||||
|
|||||||
@@ -2387,6 +2387,13 @@ class DeepseekV2Model(nn.Module):
|
|||||||
def get_input_embeddings(self) -> torch.Tensor:
|
def get_input_embeddings(self) -> torch.Tensor:
|
||||||
return self.embed_tokens
|
return self.embed_tokens
|
||||||
|
|
||||||
|
def _dsa_forward_uses_topk(self) -> bool:
|
||||||
|
if not self.use_dsa:
|
||||||
|
return False
|
||||||
|
backend = get_attn_backend()
|
||||||
|
backend = getattr(backend, "primary", backend)
|
||||||
|
return not getattr(backend, "use_mha", False)
|
||||||
|
|
||||||
def forward(
|
def forward(
|
||||||
self,
|
self,
|
||||||
input_ids: torch.Tensor,
|
input_ids: torch.Tensor,
|
||||||
@@ -2396,6 +2403,7 @@ class DeepseekV2Model(nn.Module):
|
|||||||
pp_proxy_tensors: Optional[PPProxyTensors] = None,
|
pp_proxy_tensors: Optional[PPProxyTensors] = None,
|
||||||
) -> Union[torch.Tensor, PPProxyTensors]:
|
) -> Union[torch.Tensor, PPProxyTensors]:
|
||||||
total_num_layers = self.end_layer - self.start_layer
|
total_num_layers = self.end_layer - self.start_layer
|
||||||
|
dsa_forward_uses_topk = self._dsa_forward_uses_topk()
|
||||||
if self.pp_group.is_first_rank:
|
if self.pp_group.is_first_rank:
|
||||||
if input_embeds is None:
|
if input_embeds is None:
|
||||||
hidden_states = self.embed_tokens(input_ids)
|
hidden_states = self.embed_tokens(input_ids)
|
||||||
@@ -2411,6 +2419,7 @@ class DeepseekV2Model(nn.Module):
|
|||||||
not forward_batch.forward_mode.is_idle()
|
not forward_batch.forward_mode.is_idle()
|
||||||
and hidden_states.shape[0] != 0
|
and hidden_states.shape[0] != 0
|
||||||
and self.use_dsa
|
and self.use_dsa
|
||||||
|
and dsa_forward_uses_topk
|
||||||
and dsa_layer_skips_topk(self.config, self.start_layer)
|
and dsa_layer_skips_topk(self.config, self.start_layer)
|
||||||
and topk_indices is None
|
and topk_indices is None
|
||||||
), (
|
), (
|
||||||
@@ -2515,6 +2524,7 @@ class DeepseekV2Model(nn.Module):
|
|||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
self.use_dsa
|
self.use_dsa
|
||||||
|
and dsa_forward_uses_topk
|
||||||
and self.end_layer < self.config.num_hidden_layers
|
and self.end_layer < self.config.num_hidden_layers
|
||||||
and dsa_layer_skips_topk(self.config, self.end_layer)
|
and dsa_layer_skips_topk(self.config, self.end_layer)
|
||||||
):
|
):
|
||||||
|
|||||||
Reference in New Issue
Block a user