параллелизм pytorch для цикла перекрестной проверки - PullRequest
0 голосов
/ 01 мая 2019

У меня есть cuda9-докер с установленным тензорным потоком и pytorch, я делаю перекрестную проверку для набора данных изображений. В настоящее время я использую цикл 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)))

Я не уверен, что мультипроцессор будет только парализовать процессор или оба процессора и gpu? Это может быть проще, чем параллельное выполнение модели, как я думаю, https://discuss.pytorch.org/t/parallelize-simple-for-loop-for-single-gpu/33701 так как в моем случае нет необходимости общаться через каждый процесс?

1 Ответ

1 голос
/ 02 мая 2019

Вы используете попробуйте horovod с PyTorch.

Пример ResNet50 здесь: https://github.com/horovod/horovod/blob/master/examples/pytorch_imagenet_resnet50.py

Изменения, связанные с хороводом, должны быть небольшими и изолированными.

...