So the time is spent in log_probs -> _batch_mahalanobis -> _batch_trtrs_lower which does the following - which seems a bad idea:
flat_X = torch.stack([torch.trtrs(b, A, upper=False)[0] for b, A in zip(flat_b, flat_A)])

The minimal example based on your inputs would be
bb = torch.randn(48000, 8, 1)
bL = torch.randn(48000, 8, 8, requires_grad=True)
res = torch.distributions.multivariate_normal._batch_trtrs_lower(bb, bL)
res.sum().backward()

The 0.4 version of _batch_mahalanobis used torch.inverse instead of trtrs (we didn’t have batch inverse back then so it did the stacking, too). While that would appear to be more overhead in general, it seems much more efficient here, if only because of the administration involved in trtrs (and I never know what to make of the second return value in trtrs).
Here is the bug report 20.