Hi, thank you for the reply.
I generated my embedding matrix by doing this:
def build_embedding_tensor(idx2word, vsm):
    matrix = np.zeros([len(idx2word), 200], dtype=float)
    for i in idx2word:
        word = idx2word[i]
        if word != "<PAD>":
            matrix[i] = vsm.emb(word)
    tensor = torch.cuda.FloatTensor(matrix)
    return tensor

The vsm here is the vector model that maps a input word to its embedding. I used FastText 200 embeddings. In the LSTM model, I did something like:
embed_mat=build_embedding_tensor(idx2word,vsm)
self.word_embeddings = nn.Embedding(num_embeddings=embed_mat.shape[0], embedding_dim=embed_mat.shape[1]).cuda()
self.word_embeddings.from_pretrained(embed_mat, freeze=False)

print(word2idx['always']) #105
print(emb_mat[105]) #[1,2,3,4,5]
print(x) #[[105,...],[...],[...]]
embed_x=self.word_embeddings(x)

Now if I print(embed_x[0][0]), I should get the same vector as emb_mat[105], say [1,2,3,4,5], but I got a completely different vector. I tried freeze=True but still got inconsistent embeddings.