mp.Manager().Queue() is very likely not overriding these functions that will use our ForkingPickler (which shared CUDA memory etc. etc.): https://github.com/pytorch/pytorch/blob/master/torch/multiprocessing/queue.py#L34-L38 16
That explains a lot of things.

The other question was that even if we were to move to using  mp.Queue() , I wouldn’t be able to control workers retaining access to the transferred tensors, so would be curious to know the best practices around that.

You dont actually need to hold onto those Tensors, I was just hoping that it’d give some debugging insights.