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