In your sample function you are creating a new tensor on the CPU:
epsilon = torch.randn(100, self.lat_dim)

while the submodules seem to be on the GPU.
You could push this tensor to the appropriate device by checking the .device attribute of a known parameter of e.g. self.Decoder:
epsilon = torch.randn(100, self.lat_dim, device=self.Decoder.layer.param.device)

Let me know, if that helps or if another line of code is raising this issue.