It seems that I have found the cause of your problem.
self.U.parameters() is not a parameter, but a list of parameters (see comments below).
import torch
from torch import nn
from torch.autograd import Variable

class Model(nn.Module) :
    def __init__(self, nUser, edim_u, lr = 3e-4):
        super(Model, self).__init__()
        self.U = nn.Embedding(nUser, edim_u)
        self.other_parameters = Variable(torch.zeros(nUser, edim_u))
        self.lr = lr
        
        # This will generate an error ([1]) because self.U.parameters() is not a parameter.
        #self.params = [self.U.parameters(), self.other_parameters]
        
        # To correct the problem.
        self.params = [*self.U.parameters(), self.other_parameters] # = list(self.U.parameters()) + [self.other_parameters]

        # Then  
        optimizer = torch.optim.SGD(self.params, lr = self.lr)
        
model = Model(2, 1)

# [1] TypeError: optimizer can only optimize Tensors, but one of the params is Module.parameters

I advise you to take a look at the documentation 6.
For example, it is requested in the documentation that the parameters should be Variables (see section Constructing it)