Don't crash if `XGLMSinusoidalPositionalEmbedding` doesn't exist

This commit is contained in:
Gnome Ann 2022-02-20 17:41:00 -05:00
parent 5dc4969173
commit da10e2dc1d
1 changed files with 18 additions and 14 deletions

View File

@ -768,20 +768,24 @@ if(not vars.model in ["InferKit", "Colab", "OAI", "ReadOnly", "TPUMeshTransforme
# Temporary fix for XGLM positional embedding issues until # Temporary fix for XGLM positional embedding issues until
# https://github.com/huggingface/transformers/issues/15736 # https://github.com/huggingface/transformers/issues/15736
# is resolved # is resolved
from transformers.models.xglm.modeling_xglm import XGLMSinusoidalPositionalEmbedding try:
@torch.no_grad() from transformers.models.xglm.modeling_xglm import XGLMSinusoidalPositionalEmbedding
def new_forward(self, input_ids: torch.Tensor = None, inputs_embeds: torch.Tensor = None, past_key_values_length: int = 0): except ImportError:
bsz, seq_len = inputs_embeds.size()[:-1] pass
input_shape = inputs_embeds.size()[:-1] else:
sequence_length = input_shape[1] @torch.no_grad()
position_ids = torch.arange( def new_forward(self, input_ids: torch.Tensor = None, inputs_embeds: torch.Tensor = None, past_key_values_length: int = 0):
past_key_values_length + self.padding_idx + 1, past_key_values_length + sequence_length + self.padding_idx + 1, dtype=torch.long, device=inputs_embeds.device bsz, seq_len = inputs_embeds.size()[:-1]
).unsqueeze(0).expand(input_shape).contiguous() input_shape = inputs_embeds.size()[:-1]
max_pos = self.padding_idx + 1 + seq_len + past_key_values_length sequence_length = input_shape[1]
if max_pos > self.weights.size(0): position_ids = torch.arange(
self.make_weights(max_pos + self.offset, self.embedding_dim, self.padding_idx) past_key_values_length + self.padding_idx + 1, past_key_values_length + sequence_length + self.padding_idx + 1, dtype=torch.long, device=inputs_embeds.device
return self.weights.index_select(0, position_ids.view(-1)).view(bsz, seq_len, -1).detach() ).unsqueeze(0).expand(input_shape).contiguous()
XGLMSinusoidalPositionalEmbedding.forward = new_forward max_pos = self.padding_idx + 1 + seq_len + past_key_values_length
if max_pos > self.weights.size(0):
self.make_weights(max_pos + self.offset, self.embedding_dim, self.padding_idx)
return self.weights.index_select(0, position_ids.view(-1)).view(bsz, seq_len, -1).detach()
XGLMSinusoidalPositionalEmbedding.forward = new_forward
# Patch transformers to use our soft prompt # Patch transformers to use our soft prompt
def patch_causallm(cls): def patch_causallm(cls):