Since the workers are usually spawned by fork, numpy seed will be same for all. You can fix this by doing
def worker_init_fn(worker_id):
    np.random.seed(np.random.get_state()[1][0] + worker_id)

and passing this function into DataLoader worker_init_fn parameter.
dataloader = DataLoader(dummy_dataset,
                            worker_init_fn=worker_init_fn,
                            ...other parameters)

This should ensure that each forked process gets its own seed. Granted, it’s been a few versions since I’ve used this, so let me know if it still doesn’t work.