Проблема:
Для обработки текста я использую модель en_core_web_lg. Проблема в том, что загрузка модели в каждом процессе приводит к тому, что у меня заканчивается основная память до завершения задачи. Чтобы смягчить это, я попытался изолировать части кода, требующие модели, в один процесс, намереваясь передать результаты другим процессам для дальнейших вычислений. Однако проблема в том, что результаты (словарь токенов) нельзя сериализовать и использовать в разных процессах.
Вопросы:
- Есть ли лучший способ распараллелить модель en_core_web_lg SpaCy, не дублируя ее в нескольких процессах? Например, можно ли использовать общую память, чтобы избежать загрузки модели отдельно для каждого процесса?
- Альтернативно, есть ли способ избежать сериализации результирующие словари токенов, чтобы их можно было транслировать или совместно использовать между процессами?
Код: Выделить всё
# Imports, model loading, and MPI setup
nlp = load_nlp_model() # Loading en_core_web_lg
customize_nlp_model(nlp)
comm_world = MPI.COMM_WORLD
rank = comm_world.Get_rank()
size = comm_world.Get_size()
ref_parsed_doc, cand_parsed_doc = list(nlp.pipe([ref_text, cand_text]))
if rank == 0:
chunks_ref = chunk_doc(ref_parsed_doc, size)
chunk_ref = comm_world.scatter(chunks_ref, root=0)
ref_svos = process_chunk(chunk_ref, ref_parsed_doc, nlp, t_model) # Parallel computation
# Gather results from all processes
ref_results = comm_world.gather(ref_svos, root=0)
Подробнее здесь: https://stackoverflow.com/questions/790 ... -using-mpi