Пакет многопроцессорной обработки — torch.multiprocessing
Создано: 23 дек. 2016 г. | Последнее обновление: 13 апр. 2026 г.
torch.multiprocessing — это оболочка над встроенным модулем multiprocessing.
Он регистрирует пользовательские редукторы, использующие разделяемую память для предоставления общих представлений одних и тех же данных в разных процессах. После перемещения тензора/хранилища в shared_memory (см. share_memory_()) его можно будет отправлять другим процессам без копирования.
API на 100% совместим с исходным модулем — достаточно заменить import multiprocessing на import torch.multiprocessing, чтобы все тензоры, отправленные через очереди или переданные с помощью других механизмов, перемещались в разделяемую память.
Из-за сходства API мы не документируем большую часть содержимого этого пакета и рекомендуем обратиться к очень хорошей документации исходного модуля.
Предупреждение
Если основной процесс завершается аварийно (например, из-за полученного сигнала), Python иногда не удается очистить его дочерние процессы с помощью multiprocessing. Это известная проблема, поэтому, если после прерывания интерпретатора вы заметили утечку ресурсов, вероятно, произошло именно это.
Управление стратегиями
-
torch.multiprocessing.get_all_sharing_strategies()[исходный код] -
Возвращает набор стратегий совместного использования, поддерживаемых в текущей системе.
-
torch.multiprocessing.get_sharing_strategy()[исходный код] -
Возвращает текущую стратегию совместного использования тензоров CPU.
-
torch.multiprocessing.set_sharing_strategy(new_strategy)[исходный код] -
Задает стратегию совместного использования тензоров CPU.
- Параметры:
-
new_strategy (str) – Название выбранной стратегии. Должно совпадать с одним из значений, возвращаемых функцией
get_all_sharing_strategies().
Запуск дочерних процессов
Примечание
Доступно для Python >= 3.4.
Работа зависит от метода запуска spawn в пакете multiprocessing Python.
Для выполнения некоторой функции в нескольких дочерних процессах можно создать экземпляры Process и вызвать join, чтобы дождаться их завершения. Этот подход хорошо работает с одним дочерним процессом, но при работе с несколькими процессами могут возникнуть проблемы.
В частности, последовательное присоединение процессов означает, что они будут завершаться последовательно. Если это не так и первый процесс не завершится, завершение остальных процессов останется незамеченным. Кроме того, встроенных средств для передачи ошибок нет.
Функция spawn, приведенная ниже, решает эти проблемы: она обеспечивает передачу ошибок, обрабатывает завершение процессов не по порядку и активно завершает процессы при обнаружении ошибки в одном из них.
-
torch.multiprocessing.spawn.spawn(fn, args=(), nprocs=1, join=True, daemon=False, start_method='spawn')[исходный код] -
Запускает
nprocsпроцессов, выполняющихfnс аргументамиargs.Если один из процессов завершится с ненулевым кодом возврата, остальные процессы будут принудительно завершены, а будет возбуждено исключение с причиной завершения. Если в дочернем процессе было перехвачено исключение, оно передается вызывающему коду, а его трассировка включается в исключение, возбужденное в родительском процессе.
- Параметры:
-
-
fn (функция) –
Функция вызывается как точка входа запущенного процесса. Она должна быть определена на верхнем уровне модуля, чтобы ее можно было сериализовать с помощью pickle и запустить. Это требование, накладываемое модулем multiprocessing.
Функция вызывается как
fn(i, *args), гдеi— индекс процесса, аargs— переданный кортеж аргументов. -
args (tuple) – Аргументы, передаваемые в
fn. - nprocs (int) – Число запускаемых процессов.
- join (bool) – Блокирующее ожидание завершения всех процессов.
- daemon (bool) – Флаг демона для запускаемых процессов. Если установлено значение True, будут созданы процессы-демоны.
-
start_method (str) – (устарел) этот метод всегда использует
spawnв качестве метода запуска. Чтобы использовать другой метод запуска, воспользуйтесьstart_processes().
-
- Возвращает:
-
None, если
joinимеет значениеTrue,ProcessContext, еслиjoinимеет значениеFalse
-
class torch.multiprocessing.SpawnContext[исходный код] -
Возвращается функцией
spawn(), если она вызвана сjoin=False.-
join(timeout=None, grace_period=None)[исходный код] -
Ожидает завершения одного или нескольких процессов в контексте запуска.
Пытается дождаться завершения одного или нескольких процессов в этом контексте запуска. Если один из них завершился с ненулевым кодом возврата, функция принудительно завершает остальные процессы (при необходимости предоставляя им время на завершение) и возбуждает исключение с причиной завершения первого процесса.
Возвращает
True, если все процессы успешно завершили работу, иFalse, если остались процессы, завершения которых нужно дождаться.- Параметры:
-
- timeout (float) – Время ожидания в секундах, по истечении которого ожидание прекращается.
- grace_period (float) – Если какой-либо процесс завершится с ошибкой, столько секунд другие процессы будут ожидать перед завершением, чтобы успеть завершиться корректно. Если они все еще не завершились, перед их принудительным завершением выжидается еще один льготный период.
-
torch.multiprocessing.pool
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/multiprocessing.html