You essentially always need an embedding layer to map words to vector representations - the network doesn’t understand words, only (vectors/tensors) of numbers. Word embeddings such as Word2Vec or GloVe ensure that these vector representations have already a semantic meaning before ever training the network.
When creating an LSTM network the first layer is usually something like:
self.word_embeddings = nn.Embedding(vocab_size, embedding_dim)

You can then, before training, set the weights of embedding layer to yout word vectors like that:
# The shape of the embedding_matrix must be (vocab_size, embedding_dim)
model.word_embeddings.weight.data.copy_(torch.from_numpy(embeddings_matrix))

# Make sure that the weights in the embedding layer are not updated
model.word_embeddings.weight.requires_grad=False

The main task is to create embeddings_matrix correctly. In my code, I use GloVe word vectors I load from a file. The following snippet just shows the rough idea since all this stuff is custom code.
word_vector_loader = WordVectorLoader() #
word_vector_loader.load_glove('glove.6B.100d.txt') # embedding_dim=100
embeddings_matrix = word_vector_loader.generate_embedding_matrix(vectorizer.vocabulary.word_to_index, 100, max_idx)

Check out torchtext which might make this all much easier. At least it provides you with pretrained word vectors. If you insist to use your own, you probably have to do prepare them to serve as weights for the embeddings layer yourself.
It’s a bit difficult to be more helpful without seeing any code; I just copied the snippets from one of my projects.