Копируется ли мой объект при отправке в многопроцессорную систему? - PullRequest
0 голосов
/ 07 марта 2020

TL; DR: если я передам объект данных работнику multiprocessing.Process, будет ли этот объект автоматически скопирован?

Контекст: я делаю проект по науке о данных, в котором обязательно нужно надеть не предсказывать те же данные, на которых я тренируюсь. Для удобства чтения я создал объект перекрестной проверки, в котором хранятся все данные и который позволяет выбрать активную складку в объекте данных. Кроме того, я хочу использовать многопроцессорную библиотеку для одновременного обучения нескольких моделей. В моей голове я могу представить следующий проблемный сценарий c:

  1. В объекте данных сгиб 0 выбирается процессом 0
  2. Процесс 0 выбирает данные обучения из объекта данных , который в настоящее время является данными в сгибах 1-4.
  3. В объекте данных сгиб 1 выбирается процессом 1.
  4. Процесс 0 прогнозирует модель на активном сгибе, который теперь имеет был изменен на сгиб 1. Это означает, что процесс 0 обучался и предсказывал одни и те же данные.

Чтобы быть абсолютно уверенным, что этого не произойдет, я делаю явную глубокую копию объекта данных перед его отправкой в ​​Процесс. Это делается в следующем коде:

for i_cpu in range(N_CPU):
    data_obj_copy = copy.deepcopy(data_obj)
    workers.append(multiprocessing.Process(target=gridsearch, args=
        (
                data_obj_copy,
                model_generator,
                idc_per_cpu[i_cpu],
                results,
                X_reals_ground_truth
        )
    )
)

Но это, в свою очередь, съедает тонну памяти. Это приводит меня к моему вопросу: Нужно ли делать явную копию моего объекта данных? Из того, что я понял, библиотека multiprocessing делает что-то, называемое травлением, что может означать, что объект данных копируется независимо , Если это правда, тогда мне делать копию не нужно.

Также Если у вас есть предложения о том, как вы могли бы сделать это более эффективно, это также приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...