Я пытаюсь измерить сходства между 10K парами документов, используя функцию сходства Spacy.
Однако, поскольку каждый документ довольно большой, каждый расчет сходства занимает много времени.Поэтому я рассматриваю возможность использования многопроцессорного модуля с наймом более 2 рабочих.
У меня вопрос, будет ли одновременно использоваться N процессов, требуется ли в N раз больше использования ОЗУ?Если да, то есть ли способ заставить эти N процессоров использовать один и тот же (?) SPACY-модуль, загруженный в ОЗУ?
Согласно тому, что я заметил, моя среда (16 ГБ ОЗУ) не способнавыполнение 2 (нескольких) процессоров (около 5 ГБ при выполнении сценария с одним процессором) одновременно.
Ниже приведена сокращенная версия моих кодов:
import multiprocessing
import os
from difflib import SequenceMatcher
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import spacy
import logging
import pickle
import datetime
from datetime import date
def measure_similarity(doc_pairs_queue, results_queue):
code that measure sim using spacy and other modules
def load_files(doc_pairs, loaded_pairs_queue):
code that loads files
if __name__ == "__main__":
doc_pairs = pickle.load (~~~)
loaded_pairs_queue = multiprocessing.Queue(maxsize=100)
loader = multiprocessing.Process(target=load_files, args=(doc_pairs, loaded_pairs_queue))
loader.start()
results_queue = multiprocessing.Queue(maxsize=1000)
worker_count = N
workers = [] # create list of workers, so we can terminate them later
for i in range(worker_count):
worker = multiprocessing.Process(target=measure_similarity, args=(loaded_pairs_queue, results_queue))
worker.start()
workers.append(worker)
while some_index < len(doc_pairs):
res = results_queue.get(timeout = 600)