Spec-Zone.ru › PyTorch 2.14

Распространение ошибок

Создано: 4 мая 2021 г. | Последнее обновление: 8 мая 2026 г.

На каждом узле распределённого задания PyTorch работает один агент TorchElastic и несколько рабочих процессов (дочерних процессов агента TorchElastic). Поскольку рабочие процессы предоставляются пользователем (вашим скриптом или заданием PyTorch), TorchElastic может передавать ошибки обучающих процессов через агент планировщику, который в итоге сообщает конечному пользователю о состоянии задания и применяет политики повторных попыток.

TorchElastic распределяет ошибки по 3 категориям:

Категория

Подкатегория

Описание

Ошибка пользователя

Ошибка входных данных

недопустимые входные данные для API TorchElastic (например, min > max nodes)

Сбой рабочего процесса

любые сбои дочернего рабочего процесса

Ошибка платформы

н/д

сбои, вызванные агентом

Ошибка инфраструктуры

н/д

сбои за пределами области ответственности агента и рабочих процессов (например, сбои узла)

Все ошибки, кроме «Сбоя рабочего процесса», либо стандартным образом возбуждаются в процессе агента, либо явно или неявно приводят к его аварийному завершению. Поэтому применимы стандартные средства обработки исключений языка Python.

Сбои рабочих процессов — особый случай, поскольку исключение или сбой возникает в процессе, отличном от процесса агента, поэтому ошибку нужно передать между процессами (например, агент не может просто try-catch исключение, возникшее в процессе рабочего процесса).

Агенты TorchElastic используют torch.distributed.elastic.multiprocessing.start_processes() для запуска рабочих процессов. Эта функция включает простой механизм передачи ошибок между процессами на основе файлов.

Любая функция или двоичная точка входа, декорированная с помощью record(), записывает неперехваченные исключения (с информацией о трассировке) в файл, указанный переменной окружения TORCHELASTIC_ERROR_FILE. Родительский процесс (например, агент) задаёт эту переменную окружения для каждого запускаемого дочернего процесса, затем собирает файлы ошибок всех дочерних процессов и передаёт ошибку с наименьшей временной меткой (например, первую ошибку).

Методы и классы

torch.distributed.elastic.multiprocessing.errors.record(fn, error_handler=None) [исходный код]

Синтаксический сахар для записи ошибок и исключений, возникших в декорированной функции, с помощью предоставленного error_handler.

Использование этого декоратора эквивалентно следующему:

error_handler = get_error_handler()
error_handler.initialize()
try:
    foobar()
except ChildFailedError as e:
    _, failure = e.get_first_failure()
    error_handler.dump_error_file(failure.error_file, failure.exitcode)
    raise
except Exception as e:
    error_handler.record_exception(e)
    raise

Важно

Используйте этот декоратор один раз в каждом процессе для метода верхнего уровня, обычно это главный метод.

Пример

@record
def main():
    pass


if __name__ == "__main__":
    main()
Тип возвращаемого значения:

Callable[[~_P], _R | None]

class torch.distributed.elastic.multiprocessing.errors.ChildFailedError(name, failures) [исходный код]

Специальный тип исключения, которое можно возбудить из функции, аннотированной декоратором @record, чтобы исключение (корневая ошибка) дочернего процесса передавалось вверх по стеку без изменений (например, без обёртывания в трассировку стека родительского процесса).

Полезно в случаях, когда родительский процесс — простой управляющий процесс, а дочерние процессы (рабочие процессы) выполняют реальные вычисления. В этом случае ошибки обычно возникают в дочернем процессе, поскольку родительский не выполняет ничего существенного, и ошибки дочерних процессов следует передавать планировщику для точной диагностики первопричины.

Примечание

Для передачи используются файлы ошибок, а не обработка исключений, чтобы поддерживать запуск как функций, так и двоичных файлов.

Пример:

# process tree on a host (container)
0: scheduler-init-process:
           |- 1: torchelastic_agent:
                    |- 2: trainer_0 (ok)
                    |- 3: trainer_1 (fail) -> error.json
                    |- ...
                    |- n+2: trainer_n (ok)
           |- n+3: other processes
           |- ...

В приведённом выше примере сбой обучающего процесса 1 (записанный в error.json) является первопричиной и должен быть передан процессу инициализации планировщика. Агент torchelastic при обнаружении сбоя обучающего процесса 1 возбуждает ChildFailedError("trainer", {1: "trainer_1/error.json"}), которое передаёт содержимое файла ошибок обучающего процесса 1 процессу инициализации планировщика.

class torch.distributed.elastic.multiprocessing.errors.ErrorHandler [исходный код]

Записывает предоставленный объект исключения вместе с дополнительными метаданными об ошибке в структурированном формате JSON в файл ошибок, указанный переменной окружения: TORCHELASTIC_ERROR_FILE. Если эта переменная окружения не задана, содержимое, которое должно было быть записано в файл ошибок, просто заносится в журнал.

Этот обработчик можно расширить подклассом, чтобы настроить обработку ошибок. Подклассы должны переопределять initialize() и record_exception().

class torch.distributed.elastic.multiprocessing.errors.ProcessFailure(local_rank, pid, exitcode, error_file) [исходный код]

Представляет результат сбоя процесса. При сбое рабочего процесса в файл может быть записана первопричина сбоя.

Пытается прочитать временную метку сбоя из предоставленного error_file. Если error_file не существует, используется текущая временная метка (количество секунд с начала эпохи).

Поле message содержит краткое описание сбоя. Если файл ошибок существует, сообщение берётся из него. В противном случае сообщение создаётся на основе сигнатуры сбоя.

Примечание

Предполагается, что error_file записывается с помощью torch.distributed.elastic.multiprocessing.errors.error_handler.ErrorHandler. В противном случае поведение не определено.

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/elastic/errors.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API