mirror of
https://git.datalinker.icu/vllm-project/vllm.git
synced 2025-12-15 13:55:38 +08:00
[Bugfix][Model] Fix inference for Hunyuan dense models (#25354)
Signed-off-by: anion <1005128408@qq.com> Signed-off-by: Anion <123177548+Anionex@users.noreply.github.com>
This commit is contained in:
parent
099aaee536
commit
f4db5e6de1
@ -888,7 +888,7 @@ class HunYuanModel(nn.Module):
|
|||||||
return loaded_params
|
return loaded_params
|
||||||
|
|
||||||
|
|
||||||
class HunYuanV1Base(nn.Module, SupportsLoRA, SupportsPP, MixtureOfExperts):
|
class HunyuanV1ModelBase(nn.Module, SupportsLoRA, SupportsPP):
|
||||||
packed_modules_mapping = {
|
packed_modules_mapping = {
|
||||||
"qkv_proj": [
|
"qkv_proj": [
|
||||||
"q_proj",
|
"q_proj",
|
||||||
@ -930,6 +930,56 @@ class HunYuanV1Base(nn.Module, SupportsLoRA, SupportsPP, MixtureOfExperts):
|
|||||||
else:
|
else:
|
||||||
self.lm_head = PPMissingLayer()
|
self.lm_head = PPMissingLayer()
|
||||||
|
|
||||||
|
def forward(
|
||||||
|
self,
|
||||||
|
input_ids: torch.Tensor,
|
||||||
|
positions: torch.Tensor,
|
||||||
|
intermediate_tensors: Optional[IntermediateTensors] = None,
|
||||||
|
inputs_embeds: Optional[torch.Tensor] = None,
|
||||||
|
) -> Union[torch.Tensor, IntermediateTensors]:
|
||||||
|
model_output = self.model(input_ids, positions, intermediate_tensors,
|
||||||
|
inputs_embeds)
|
||||||
|
return model_output
|
||||||
|
|
||||||
|
def compute_logits(
|
||||||
|
self,
|
||||||
|
hidden_states: torch.Tensor,
|
||||||
|
) -> Optional[torch.Tensor]:
|
||||||
|
logits = self.logits_processor(self.lm_head, hidden_states)
|
||||||
|
return logits
|
||||||
|
|
||||||
|
def make_empty_intermediate_tensors(
|
||||||
|
self, batch_size: int, dtype: torch.dtype,
|
||||||
|
device: torch.device) -> IntermediateTensors:
|
||||||
|
return IntermediateTensors({
|
||||||
|
"hidden_states":
|
||||||
|
torch.zeros((batch_size, self.config.hidden_size),
|
||||||
|
dtype=dtype,
|
||||||
|
device=device),
|
||||||
|
"residual":
|
||||||
|
torch.zeros((batch_size, self.config.hidden_size),
|
||||||
|
dtype=dtype,
|
||||||
|
device=device),
|
||||||
|
})
|
||||||
|
|
||||||
|
def load_weights(self, weights: Iterable[tuple[str,
|
||||||
|
torch.Tensor]]) -> set[str]:
|
||||||
|
loader = AutoWeightsLoader(
|
||||||
|
self,
|
||||||
|
skip_prefixes=(["lm_head."]
|
||||||
|
if self.config.tie_word_embeddings else None),
|
||||||
|
)
|
||||||
|
return loader.load_weights(weights)
|
||||||
|
|
||||||
|
def get_input_embeddings(self, input_ids: torch.Tensor) -> torch.Tensor:
|
||||||
|
return self.model.get_input_embeddings(input_ids)
|
||||||
|
|
||||||
|
|
||||||
|
class HunYuanMoEV1Base(HunyuanV1ModelBase, MixtureOfExperts):
|
||||||
|
|
||||||
|
def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""):
|
||||||
|
super().__init__(vllm_config=vllm_config, prefix=prefix)
|
||||||
|
|
||||||
# Set MoE hyperparameters
|
# Set MoE hyperparameters
|
||||||
self.expert_weights = []
|
self.expert_weights = []
|
||||||
self.num_expert_groups = 1
|
self.num_expert_groups = 1
|
||||||
@ -988,57 +1038,19 @@ class HunYuanV1Base(nn.Module, SupportsLoRA, SupportsPP, MixtureOfExperts):
|
|||||||
moe.n_redundant_experts = self.num_redundant_experts
|
moe.n_redundant_experts = self.num_redundant_experts
|
||||||
moe.experts.update_expert_map()
|
moe.experts.update_expert_map()
|
||||||
|
|
||||||
def get_input_embeddings(self, input_ids: torch.Tensor) -> torch.Tensor:
|
|
||||||
return self.model.get_input_embeddings(input_ids)
|
|
||||||
|
|
||||||
def forward(
|
|
||||||
self,
|
|
||||||
input_ids: torch.Tensor,
|
|
||||||
positions: torch.Tensor,
|
|
||||||
intermediate_tensors: Optional[IntermediateTensors] = None,
|
|
||||||
inputs_embeds: Optional[torch.Tensor] = None,
|
|
||||||
) -> Union[torch.Tensor, IntermediateTensors]:
|
|
||||||
model_output = self.model(input_ids, positions, intermediate_tensors,
|
|
||||||
inputs_embeds)
|
|
||||||
return model_output
|
|
||||||
|
|
||||||
def compute_logits(
|
|
||||||
self,
|
|
||||||
hidden_states: torch.Tensor,
|
|
||||||
) -> Optional[torch.Tensor]:
|
|
||||||
logits = self.logits_processor(self.lm_head, hidden_states)
|
|
||||||
return logits
|
|
||||||
|
|
||||||
def make_empty_intermediate_tensors(
|
|
||||||
self, batch_size: int, dtype: torch.dtype,
|
|
||||||
device: torch.device) -> IntermediateTensors:
|
|
||||||
return IntermediateTensors({
|
|
||||||
"hidden_states":
|
|
||||||
torch.zeros((batch_size, self.config.hidden_size),
|
|
||||||
dtype=dtype,
|
|
||||||
device=device),
|
|
||||||
"residual":
|
|
||||||
torch.zeros((batch_size, self.config.hidden_size),
|
|
||||||
dtype=dtype,
|
|
||||||
device=device),
|
|
||||||
})
|
|
||||||
|
|
||||||
def load_weights(self, weights: Iterable[tuple[str,
|
|
||||||
torch.Tensor]]) -> set[str]:
|
|
||||||
loader = AutoWeightsLoader(
|
|
||||||
self,
|
|
||||||
skip_prefixes=(["lm_head."]
|
|
||||||
if self.config.tie_word_embeddings else None),
|
|
||||||
)
|
|
||||||
return loader.load_weights(weights)
|
|
||||||
|
|
||||||
def get_expert_mapping(self) -> list[tuple[str, str, int, str]]:
|
def get_expert_mapping(self) -> list[tuple[str, str, int, str]]:
|
||||||
return self.model.get_expert_mapping()
|
return self.model.get_expert_mapping()
|
||||||
|
|
||||||
|
|
||||||
class HunYuanDenseV1ForCausalLM(HunYuanV1Base):
|
class HunYuanDenseV1Base(HunyuanV1ModelBase):
|
||||||
|
|
||||||
|
def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""):
|
||||||
|
super().__init__(vllm_config=vllm_config, prefix=prefix)
|
||||||
|
|
||||||
|
|
||||||
|
class HunYuanDenseV1ForCausalLM(HunYuanDenseV1Base):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class HunYuanMoEV1ForCausalLM(HunYuanV1Base):
|
class HunYuanMoEV1ForCausalLM(HunYuanMoEV1Base):
|
||||||
pass
|
pass
|
||||||
Loading…
x
Reference in New Issue
Block a user