Распараллеливание модели en_core_web_lg SpaCy на нескольких узлах с использованием MPIPython

Программы на Python
Anonymous
Распараллеливание модели en_core_web_lg SpaCy на нескольких узлах с использованием MPI

Сообщение Anonymous »

В настоящее время я работаю над извлечением троек субъект-глагол-объект (SVO) из предложений в двух входных документах с помощью SpaCy. Я планирую запустить этот процесс на нескольких вычислительных узлах и начал изучать возможность распараллеливания с использованием MPI. Однако я столкнулся с серьезной проблемой, связанной с использованием памяти и обменом данными между процессами.
Проблема:
Для обработки текста я использую модель 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)
Я пытался загрузить объект модели nlp в каждый процесс MPI, но программа аварийно завершает работу из-за нехватки основной памяти. Я также пытался поделиться вычислениями, выполненными после использования модели nlp, но токены SpaCy не поддерживают травление.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -using-mpi

Вернуться в «Python»