I cannot confirm the issue of moving back to cpu and to gpu.
However since you are using cuda tensors they are allocated in the gpu.
import torch
a=torch.rand(100).cuda()

l=[a,a,a]

l[0].device
Out[4]: device(type='cuda', index=0)

However I unknow if, as you said, to create this list it is moving back to cpu and then to gpu