How to simulate and store Wiener process in 2-dim tensor while avoiding in-place operation?

As I am exploring the use of Pytorchs autograd functionality in a topic not related to neural networks, this may be a rather unusual question.

I desire to apply Pytorchs autograd functionality in a Monte Carlo estimation. I therefore need to simulate a large sample of Wiener processes and - in my case - store all the intermediate values in a 2-dim tensor.

So I want to do something like this, but without the in-place operation, as it ruins the back propagation.

import torch

spot = torch.tensor(30.)
vol = torch.tensor(.2)
expiry = torch.tensor(1.)
r = torch.tensor(.06)
n_steps = 50
n_paths = 1000

dt = (expiry / n_steps)
paths = torch.empty([n_steps,n_paths])
paths[0] = spot

for i in range(1, n_steps):
      rand_norm = torch.randn(n_paths)
      paths[i] = paths[i-1] * torch.exp((r - 0.5 * vol * vol) * dt + torch.sqrt(dt) * vol * rand_norm)
print(paths)

Does anyone have any suggestions on how to do this in an efficient way without the need of in-place operations?

Any help is much appreciated. Thanks in advance!