我有一个安装了tensorflow和pytorch的cuda9-docker,我正在对图像数据集进行交叉验证。目前,我正在使用for循环进行交叉验证。像
for data_train, data_test in sklearn.kfold(5, all_data):
train(data_train)
test(data_test)
但是for循环花费的时间太长,下面的代码是否可以并行化for循环?也许已经有了解决方案。但这不是数据并行化。
from multiprocessing import Pool
def f(trainset, testset):
train_result = train(trainset)
test_result = test(testset)
save_train_result()
save_test_result()
if __name__ == '__main__':
with Pool(5) as p:
print(p.map(f, sklearn.cvfold(5, all_data)))
我不确定多重处理只会对cpu还是对cpu和gpu都进行校验?这可能比在https://discuss.pytorch.org/t/parallelize-simple-for-loop-for-single-gpu/33701我猜模型中并行做起来要容易 因为就我而言,没有必要在每个流程之间进行交流吗?
答案 0 :(得分:1)
您可以在PyTorch中使用try horovod。
ResNet50示例在这里: https://github.com/horovod/horovod/blob/master/examples/pytorch_imagenet_resnet50.py
与Horovod相关的更改应小而隔离。