Your code runs fine in my setup:
_data = torch.utils.data.TensorDataset(torch.randn(15, 90), torch.randn(15, 90));
trainDataLoader = torch.utils.data.DataLoader(dataset=_data, batch_size=15, shuffle=True)

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = AutoEncoder();
model = model.to(device);
criterion = nn.MSELoss();
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-5);

epochs=10
outputs=[]
for epoch in range(epochs):
    for (event , _) in trainDataLoader:
        event = event.to(device)        
        recon = model(event);
        loss = criterion(recon, event);
        optimizer.zero_grad();
        loss.backward();
        optimizer.step();   
    print(f'Epoch:{epoch+1}, Loss:{loss.item():.4f}');
    outputs.append((epoch, event, recon));

Could you check, if you’ve globally disabled the gradient calculation via torch.set_grad_enabled(False)?