in summarize_from_feedback/models/transformer.py [0:0]
def embed_tokens(self, x, ctx_len=0, act_dtype=torch.float16):
tokens = x
assert isinstance(
tokens, (torch.LongTensor, torch.cuda.LongTensor)
), f"Tokens should be type long: {getattr(tokens, 'dtype', type(tokens))}"
assert (0 <= tokens).all() and (
tokens < self.n_vocab
).all(), f"{tokens.max()} >= {self.n_vocab} or {tokens.min()} < 0"
emb = F.embedding(
tokens,
self.embedding.weight,
self.embedding.padding_idx,
self.embedding.max_norm,
self.embedding.norm_type,
self.embedding.scale_grad_by_freq,
self.embedding.sparse,
).type(act_dtype)
if self.include_pos_embeddings:
pos_emb = self.position_embedding(
torch.tensor(ctx_len), torch.tensor(ctx_len + tokens.size(-1))
).type(act_dtype)
embedded_tokens = self.embed_dropout(emb) + self.pos_emb_dropout(pos_emb)
else:
embedded_tokens = self.embed_dropout(emb)
if self.mp_comm is not None:
comm = self.mp_comm
if len(comm.ranks) == 1:
result = [embedded_tokens]
else:
result = comm.all_gather_no_backward(embedded_tokens, "input_gather")
embedded_tokens = torch.cat(result, dim=-1)
return embedded_tokens