这两种选项之间的并行化处理有区别吗?我猜num_workers
仅与数据加载的并行化有关。但是,设置torch.set_num_threads
是否适用于一般的训练?我试图理解这两个选项之间的区别。谢谢!
回答:
对于DataLoader,num_workers
指定了用于加载数据和运行所有转换的并行工作者的数量。如果您加载大型图像或有昂贵的转换,那么您可能会遇到GPU处理数据很快,而DataLoader供应GPU的速度太慢的情况。在这种情况下,设置更高的工作者数量会有所帮助。我通常会增加这个数字,直到我的epoch步长足够快。另外,一个小提示:如果您使用docker,通常您希望将shm设置为工作者数量的1到2倍的GB,对于像ImageNet这样的大型数据集来说。
torch.set_num_threads
指定了用于并行化CPU-bound张量操作的线程数量。如果您的大部分张量操作都在使用GPU,那么这个设置并不太重要。然而,如果您在CPU上保留张量并且对它们进行了大量操作,那么您可能会从设置这个参数中受益。不幸的是,Pytorch文档没有具体说明哪些操作会从中受益,因此请查看您的CPU利用率,并调整这个数字直到您能最大化利用它。