Good call. The use case I had was a network outputting gaussian parameters mu in N x D and log_sd in N x 1, so the example above was a bit off.
After doing some more searching, I think that using expand_as might be the most efficient? To summarize:
mu = Variable(torch.zeros(5, 2))
sd = Variable(torch.rand(5, 1))
torch.normal(mu, sd.expand_as(mu))