I realize that to some extent this comes down to experimentation, but are there any general guidelines on how to choose the num_workers for a DataLoader object?  Should num_workers be equal to the batch size?   Or the number of CPU cores in my machine?  Or to the number of GPUs in my data-parallelized model?  Is there a tradeoff with using more workers due to overhead?  Also, is there ever a reason to leave num_workers as 0 instead of setting it at least to 1?