Kairo / modeling_kairo.py
QDHShamiro's picture
Upload folder using huggingface_hub
5038157 verified
Raw
History Blame Contribute Delete
1.51 kB
import torch
from torch.nn import functional as F
from transformers import PreTrainedModel
from transformers.modeling_outputs import CausalLMOutput
from .configuration_kairo import KairoGPTConfig
from .kairo_model import KairoGPT, KairoGPTConfig as _InternalCfg
class KairoGPTForCausalLM(PreTrainedModel):
config_class = KairoGPTConfig
def __init__(self, config: KairoGPTConfig):
super().__init__(config)
internal_cfg = _InternalCfg(
vocab_size=config.vocab_size,
block_size=config.block_size,
n_layer=config.n_layer,
n_head=config.n_head,
n_embd=config.n_embd,
dropout=config.dropout,
)
self.transformer = KairoGPT(internal_cfg)
def forward(self, input_ids, labels=None, **kwargs):
logits, _ = self.transformer(input_ids)
loss = None
if labels is not None:
loss = F.cross_entropy(
logits[:, :-1, :].reshape(-1, logits.size(-1)),
labels[:, 1:].reshape(-1),
)
return CausalLMOutput(loss=loss, logits=logits)
def prepare_inputs_for_generation(self, input_ids, **kwargs):
return {"input_ids": input_ids[:, -self.config.block_size:]}
@torch.no_grad()
def generate(self, input_ids, max_new_tokens=400, temperature=0.8, top_k=40, **kwargs):
return self.transformer.generate(
input_ids, max_new_tokens=max_new_tokens, temperature=temperature, top_k=top_k
)