Распараллеливание модели 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема со связью MPI в Python (с использованием MPI.COMM_WORLD.isend и MPI.COMM_WORLD.irecv) — нет получения
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Как запустить сценарий MPI Python на нескольких узлах в кластере Slurm? Ошибка: Предупреждение: невозможно запустить 1 п
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Изменение стиля на узлах Vue-Flow не работает на пользовательских узлах
    Anonymous » » в форуме CSS
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Можно ли переносить старые модели Spacy в будущие версии Spacy?
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Spacy nlp = spacy.load("en_core_web_lg")
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

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