mirror of
https://git.datalinker.icu/vllm-project/vllm.git
synced 2025-12-10 05:45:00 +08:00
[Model] GPT2ForSequenceClassification model (#19663)
Signed-off-by: nie3e <adrcwiek@gmail.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This commit is contained in:
parent
7771d1de88
commit
f1e840e842
@ -267,6 +267,7 @@ _EMBEDDING_EXAMPLE_MODELS = {
|
|||||||
# [Text-only]
|
# [Text-only]
|
||||||
"BertModel": _HfExamplesInfo("BAAI/bge-base-en-v1.5", v0_only=True),
|
"BertModel": _HfExamplesInfo("BAAI/bge-base-en-v1.5", v0_only=True),
|
||||||
"Gemma2Model": _HfExamplesInfo("BAAI/bge-multilingual-gemma2", v0_only=True), # noqa: E501
|
"Gemma2Model": _HfExamplesInfo("BAAI/bge-multilingual-gemma2", v0_only=True), # noqa: E501
|
||||||
|
"GPT2ForSequenceClassification": _HfExamplesInfo("nie3e/sentiment-polish-gpt2-small"), # noqa: E501
|
||||||
"GritLM": _HfExamplesInfo("parasail-ai/GritLM-7B-vllm"),
|
"GritLM": _HfExamplesInfo("parasail-ai/GritLM-7B-vllm"),
|
||||||
"GteModel": _HfExamplesInfo("Snowflake/snowflake-arctic-embed-m-v2.0",
|
"GteModel": _HfExamplesInfo("Snowflake/snowflake-arctic-embed-m-v2.0",
|
||||||
trust_remote_code=True),
|
trust_remote_code=True),
|
||||||
|
|||||||
@ -40,9 +40,11 @@ from vllm.model_executor.layers.quantization import QuantizationConfig
|
|||||||
from vllm.model_executor.layers.vocab_parallel_embedding import (
|
from vllm.model_executor.layers.vocab_parallel_embedding import (
|
||||||
ParallelLMHead, VocabParallelEmbedding)
|
ParallelLMHead, VocabParallelEmbedding)
|
||||||
from vllm.model_executor.model_loader.weight_utils import default_weight_loader
|
from vllm.model_executor.model_loader.weight_utils import default_weight_loader
|
||||||
|
from vllm.model_executor.pooling_metadata import PoolingMetadata
|
||||||
from vllm.model_executor.sampling_metadata import SamplingMetadata
|
from vllm.model_executor.sampling_metadata import SamplingMetadata
|
||||||
from vllm.sequence import IntermediateTensors
|
from vllm.sequence import IntermediateTensors, PoolerOutput
|
||||||
|
|
||||||
|
from ..layers.pooler import Pooler, PoolingType
|
||||||
from .interfaces import SupportsPP
|
from .interfaces import SupportsPP
|
||||||
from .utils import (AutoWeightsLoader, is_pp_missing_parameter,
|
from .utils import (AutoWeightsLoader, is_pp_missing_parameter,
|
||||||
make_empty_intermediate_tensors_factory, make_layers,
|
make_empty_intermediate_tensors_factory, make_layers,
|
||||||
@ -318,6 +320,58 @@ class GPT2LMHeadModel(nn.Module, SupportsPP):
|
|||||||
return loader.load_weights(weights)
|
return loader.load_weights(weights)
|
||||||
|
|
||||||
|
|
||||||
|
class GPT2ForSequenceClassification(nn.Module):
|
||||||
|
"""GPT2 Model for sequence classification.
|
||||||
|
|
||||||
|
This class expands GPT2Model with pooling and score functions - last token
|
||||||
|
is being used for classification.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
transformer: An instance of GPT2Model used for forward operations.
|
||||||
|
score: A layer for calculating logits.
|
||||||
|
_pooler: An instance of Pooler used for pooling operations.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""):
|
||||||
|
super().__init__()
|
||||||
|
config = vllm_config.model_config.hf_config
|
||||||
|
self.transformer = GPT2Model(vllm_config=vllm_config,
|
||||||
|
prefix=maybe_prefix(prefix, "gpt2"))
|
||||||
|
self.score = nn.Linear(config.n_embd, config.num_labels, bias=False)
|
||||||
|
pooler_config = vllm_config.model_config.pooler_config
|
||||||
|
self._pooler = Pooler.from_config_with_defaults(
|
||||||
|
pooler_config,
|
||||||
|
pooling_type=PoolingType.LAST,
|
||||||
|
normalize=False,
|
||||||
|
softmax=True)
|
||||||
|
|
||||||
|
def load_weights(self, weights: Iterable[tuple[str, torch.Tensor]]):
|
||||||
|
loader = AutoWeightsLoader(self)
|
||||||
|
return loader.load_weights(weights)
|
||||||
|
|
||||||
|
def pooler(
|
||||||
|
self,
|
||||||
|
hidden_states: torch.Tensor,
|
||||||
|
pooling_metadata: PoolingMetadata,
|
||||||
|
) -> Optional[PoolerOutput]:
|
||||||
|
return self._pooler(hidden_states, pooling_metadata)
|
||||||
|
|
||||||
|
def forward(
|
||||||
|
self,
|
||||||
|
input_ids: torch.Tensor,
|
||||||
|
positions: torch.Tensor,
|
||||||
|
intermediate_tensors: Optional[IntermediateTensors] = None,
|
||||||
|
inputs_embeds: Optional[torch.Tensor] = None,
|
||||||
|
) -> torch.Tensor:
|
||||||
|
hidden_states = self.transformer(
|
||||||
|
input_ids=input_ids,
|
||||||
|
position_ids=positions,
|
||||||
|
inputs_embeds=inputs_embeds,
|
||||||
|
intermediate_tensors=intermediate_tensors)
|
||||||
|
logits = self.score(hidden_states)
|
||||||
|
return logits
|
||||||
|
|
||||||
|
|
||||||
def _add_transformer_prefix(
|
def _add_transformer_prefix(
|
||||||
weights: Iterable[tuple[str, torch.Tensor]]
|
weights: Iterable[tuple[str, torch.Tensor]]
|
||||||
) -> Iterable[tuple[str, torch.Tensor]]:
|
) -> Iterable[tuple[str, torch.Tensor]]:
|
||||||
|
|||||||
@ -130,6 +130,7 @@ _EMBEDDING_MODELS = {
|
|||||||
"DeciLMForCausalLM": ("nemotron_nas", "DeciLMForCausalLM"),
|
"DeciLMForCausalLM": ("nemotron_nas", "DeciLMForCausalLM"),
|
||||||
"Gemma2Model": ("gemma2", "Gemma2ForCausalLM"),
|
"Gemma2Model": ("gemma2", "Gemma2ForCausalLM"),
|
||||||
"GlmForCausalLM": ("glm", "GlmForCausalLM"),
|
"GlmForCausalLM": ("glm", "GlmForCausalLM"),
|
||||||
|
"GPT2ForSequenceClassification": ("gpt2", "GPT2ForSequenceClassification"),
|
||||||
"GritLM": ("gritlm", "GritLM"),
|
"GritLM": ("gritlm", "GritLM"),
|
||||||
"GteModel": ("bert_with_rope", "SnowflakeGteNewModel"),
|
"GteModel": ("bert_with_rope", "SnowflakeGteNewModel"),
|
||||||
"GteNewModel": ("bert_with_rope", "GteNewModel"),
|
"GteNewModel": ("bert_with_rope", "GteNewModel"),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user