Я обучил модель CNN на GPU, используя FastAI (бэкэнд PyTorch).Сейчас я пытаюсь использовать эту модель для вывода на той же машине, но использую процессор вместо графического процессора.Наряду с этим я также пытаюсь использовать несколько процессорных ядер, используя многопроцессорный модуль.Теперь возникает проблема:
Выполнение кода на одном процессоре (без многопроцессорной обработки) занимает всего 40 секунд для обработки почти 50 изображений
Запусккод на нескольких процессорах, использующих многопроцессорную обработку факелов, занимает более 6 минут для обработки тех же 50 изображений
from torch.multiprocessing import Pool, set_start_method
os.environ['CUDA_VISIBLE_DEVICES']=""
from fastai.vision import *
from fastai.text import *
defaults.device = torch.device('cpu')
def process_image_batch(batch):
learn_cnn = load_learner(scripts_folder, 'cnn_model.pkl')
learn_cnn.model.training = False
learn_cnn.model = learn_cnn.model.eval()
# for image in batch:
# prediction = ... # predicting the image here
# return prediction
if __name__ == '__main__':
#
# image_batches = ..... # retrieving the image batches (It is a list of 5 lists)
# n_processes = 5
set_start_method('spawn', force=True)
try:
pool = Pool(n_processes)
pool.map(process_image_batch, image_batches)
except Exception as e:
print('Main Pool Error: ', e)
except KeyboardInterrupt:
exit()
finally:
pool.terminate()
pool.join()
Я не уверен, что вызывает это замедление в многопроцессорном режиме.Я прочитал много постов, в которых обсуждается похожая проблема, но нигде не смог найти правильного решения.