Multiprocessing Error with cuda

Hi!
I’m using pytorch with python multiprocessing tool to train a PPO network. When collecting data, I need to use both GPU and CPU. And I want to use multiple processes for data collection for faster training. Here is how I implement it:

for i in range(1):
     worker_args = (args)
     workers.append(multiprocessing.Process(target=collect_sample, args=worker_args))
for worker in workers:
     worker.start()

In the above code, collect_sample function will use Pytorch to collect data with both GPU and CPU. And as an error indicates, I also added: torch.multiprocessing.set_start_method('spawn'). However, after adding this line, another error happens: “TypeError: can’t pickle _thread.lock objects”. I didn’t figure out good solutions to this problem. May I have your help? Thank you!

A quick search for the error message points to e.g. this issue, which you might also be hitting in your code.