def METHOD_NAME(self):
    # We're manually going to set the hyperparameters to something they shouldn't be
    likelihood = MultitaskGaussianLikelihood(
        noise_prior=gpytorch.priors.NormalPrior(loc=torch.zeros(2), scale=torch.ones(2)),
        batch_shape=torch.Size(),
        num_tasks=2,
    )
    gp_model = ExactGPModel(train_x12, train_y12, likelihood, batch_shape=torch.Size())
    mll = gpytorch.ExactMarginalLogLikelihood(likelihood, gp_model)
    # Find optimal model hyperparameters
    gp_model.train()
    likelihood.train()
    optimizer = optim.Adam(gp_model.parameters(), lr=0.1)
    for _ in range(50):
        optimizer.zero_grad()
        output = gp_model(train_x12)
        loss = -mll(output, train_y12).sum()
        loss.backward()
        optimizer.step()
    for param in gp_model.parameters():
        self.assertTrue(param.grad is not None)
        self.assertGreater(param.grad.norm().item(), 0)
    # Test the model
    gp_model.eval()
    likelihood.eval()
    # Make predictions for both sets of test points, and check MAEs.
    batch_predictions = likelihood(gp_model(test_x12))
    preds1 = batch_predictions.mean[0]
    preds2 = batch_predictions.mean[1]
    mean_abs_error1 = torch.mean(torch.abs(test_y1 - preds1))
    mean_abs_error2 = torch.mean(torch.abs(test_y2 - preds2))
    self.assertLess(mean_abs_error1.squeeze().item(), 0.05)
    self.assertLess(mean_abs_error2.squeeze().item(), 0.05)