Spec-Zone.ru › PyTorch 2.14

Согласование участников

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

В контексте Torch Distributed Elastic термином rendezvous обозначается функциональность, объединяющая примитив распределённой синхронизации с обнаружением узлов.

Torch Distributed Elastic использует её для сбора участников задания на обучение (то есть узлов), чтобы все они согласовали один и тот же список участников и роли каждого, а также приняли единое согласованное решение о том, когда можно начинать или возобновлять обучение.

Механизм rendezvous в Torch Distributed Elastic обеспечивает следующие важные возможности:

Барьер:

Узлы, выполняющие rendezvous, будут ожидать, пока rendezvous не будет считаться завершённым. Это происходит, когда к барьеру rendezvous присоединится не менее min узлов в общей сложности (для одного задания). Это также означает, что размер барьера не обязательно является фиксированным.

После достижения min узлов предусмотрено дополнительное небольшое время ожидания. Оно позволяет избежать слишком быстрого завершения rendezvous, из-за которого могут быть исключены другие узлы, пытающиеся присоединиться примерно в то же время.

Если у барьера собрано max узлов, rendezvous завершается немедленно.

Кроме того, предусмотрено общее время ожидания: если число узлов min так и не достигнуто, rendezvous завершается ошибкой. Это простой механизм аварийного завершения, помогающий освободить частично выделенные ресурсы задания в случае проблем с менеджером ресурсов. Такую ошибку следует считать неисправимой.

Эксклюзивность:

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

Механизм rendezvous в Torch Distributed Elastic гарантирует, что если группа узлов уже завершила rendezvous (и, следовательно, возможно, уже выполняет обучение), то дополнительные узлы, пытающиеся присоединиться с опозданием, лишь сообщат о себе как об ожидающих и должны будут дождаться уничтожения ранее завершённого rendezvous.

Согласованность:

После завершения rendezvous все его участники согласуют состав задания и роль каждого в нём. Эта роль представляется целым числом, называемым рангом; его значение находится в диапазоне от 0 до размера группы.

Обратите внимание, что ранги не являются постоянными: одному и тому же узлу при следующем rendezvous (или повторном rendezvous) может быть назначен другой ранг.

Отказоустойчивость:

Механизм rendezvous в Torch Distributed Elastic разработан с учётом возможности отказа узлов во время процесса rendezvous. Если процесс аварийно завершится (или потеряет сетевое подключение и т. д.) после присоединения к rendezvous, но до его завершения, автоматически произойдёт повторный rendezvous с оставшимися работоспособными узлами.

Узел может отказать и после завершения rendezvous (или после того, как другие узлы обнаружили его завершение). В этом случае обработку возьмёт на себя Torch Distributed Elastic train_loop, который также запустит повторный rendezvous.

Общее хранилище «ключ — значение»:

После завершения rendezvous создаётся и возвращается общее хранилище «ключ — значение». Это хранилище реализует API torch.distributed.Store (см. документацию по распределённому взаимодействию).

Это хранилище является общим только для участников завершённого rendezvous. Torch Distributed Elastic использует его для обмена информацией, необходимой для инициализации плоскостей управления и передачи данных задания.

Ожидающие рабочие процессы и закрытие rendezvous:

Объект обработчика rendezvous в Torch Distributed Elastic предоставляет дополнительные возможности, которые формально не относятся к самому процессу rendezvous:

  1. Запрос количества рабочих процессов, опоздавших к барьеру и способных участвовать в следующем rendezvous.
  2. Закрытие rendezvous, чтобы сообщить всем узлам, что им не следует участвовать в следующем rendezvous.

DynamicRendezvousHandler:

В Torch Distributed Elastic предусмотрен класс DynamicRendezvousHandler, реализующий описанный выше механизм rendezvous. Этот тип не зависит от серверной части и при создании требует указать экземпляр соответствующего объекта RendezvousBackend.

Пользователи Torch Distributed могут реализовать собственный тип серверной части или воспользоваться одной из следующих реализаций, входящих в PyTorch:

  • C10dRendezvousBackend: использует в качестве серверной части rendezvous хранилище C10d (по умолчанию TCPStore). Главное преимущество хранилища C10d заключается в том, что для организации rendezvous не требуется сторонняя зависимость (например, etcd).
  • EtcdRendezvousBackend: заменяет устаревший класс EtcdRendezvousHandler. Передача экземпляра EtcdRendezvousBackend в DynamicRendezvousHandler функционально эквивалентна созданию экземпляра EtcdRendezvousHandler.

    store = TCPStore("localhost")
    
    backend = C10dRendezvousBackend(store, "my_run_id")
    
    rdzv_handler = DynamicRendezvousHandler.from_backend(
        run_id="my_run_id", store=store, backend=backend, min_nodes=2, max_nodes=4
    )
    

Ниже приведена диаграмма состояний, описывающая работу rendezvous.

Rendezvous state diagram

Реестр

class torch.distributed.elastic.rendezvous.RendezvousParameters(backend, endpoint, run_id, min_nodes, max_nodes, local_addr=None, **kwargs) [исходный код]

Хранит параметры для создания RendezvousHandler.

Параметры:
  • backend (str) – Имя серверной части для обработки rendezvous.
  • endpoint (str) – Конечная точка rendezvous, обычно в формате <hostname>[:<port>].
  • run_id (str) – Идентификатор rendezvous.
  • min_nodes (int) – Минимальное число узлов, допускаемых к rendezvous.
  • max_nodes (int) – Максимальное число узлов, допускаемых к rendezvous.
  • local_addr (str | None) – Адрес локального узла.
  • **kwargs – Дополнительные параметры для указанной серверной части.
get(key, default=None) [исходный код]

Возвращает значение для key, если key существует, иначе возвращает default.

Тип возвращаемого значения:

Any

get_as_bool(key, default=None) [исходный код]

Возвращает значение для key в виде bool.

Тип возвращаемого значения:

bool | None

get_as_int(key, default=None) [исходный код]

Возвращает значение для key в виде int.

Тип возвращаемого значения:

int | None

class torch.distributed.elastic.rendezvous.RendezvousHandlerRegistry [исходный код]

Представляет реестр серверных частей RendezvousHandler.

torch.distributed.elastic.rendezvous.registry.get_rendezvous_handler(params) [исходный код]

Получает ссылку на :py:class`RendezvousHandler`.

Пользовательские обработчики rendezvous можно зарегистрировать следующим образом:

from torch.distributed.elastic.rendezvous import rendezvous_handler_registry
from torch.distributed.elastic.rendezvous.registry import get_rendezvous_handler


def create_my_rdzv(params: RendezvousParameters):
    return MyCustomRdzv(params)


rendezvous_handler_registry.register("my_rdzv_backend_name", create_my_rdzv)

my_rdzv_handler = get_rendezvous_handler(
    "my_rdzv_backend_name", RendezvousParameters
)
Тип возвращаемого значения:

RendezvousHandler

Обработчик

class torch.distributed.elastic.rendezvous.RendezvousHandler [исходный код]

Основной интерфейс rendezvous.

Примечание

Пользователям распределённого Torch обычно не нужно самостоятельно реализовывать RendezvousHandler. Уже доступна реализация на основе хранилища C10d, которая рекомендуется большинству пользователей.

abstract get_backend() [исходный код]

Возвращает имя серверной части rendezvous.

Тип возвращаемого значения:

str

abstract get_run_id() [исходный код]

Возвращает идентификатор запуска rendezvous.

Идентификатор запуска — это заданный пользователем идентификатор, однозначно определяющий экземпляр распределённого приложения. Обычно он соответствует идентификатору задания и используется для того, чтобы узлы могли присоединиться к нужному распределённому приложению.

Тип возвращаемого значения:

str

abstract is_closed() [исходный код]

Проверяет, закрыт ли rendezvous.

Закрытый rendezvous означает, что все последующие попытки повторного rendezvous в рамках того же задания завершатся неудачей.

Методы is_closed() и set_closed() обеспечивают распространение состояния с задержкой и не должны использоваться для синхронизации. Предполагается, что если хотя бы один узел решит, что задание завершено, он закроет rendezvous, и остальные узлы вскоре обнаружат это и также прекратят работу.

Тип возвращаемого значения:

bool

abstract next_rendezvous() [исходный код]

Основная точка входа в барьер rendezvous.

Ожидает завершения rendezvous и включения текущего процесса в сформированную группу рабочих процессов, истечения времени ожидания или закрытия rendezvous.

Возвращает:

Экземпляр RendezvousInfo.

Вызывает исключения:
  • RendezvousClosedError – Rendezvous закрыт.
  • RendezvousConnectionError – Не удалось подключиться к серверной части rendezvous.
  • RendezvousStateError – Состояние rendezvous повреждено.
  • RendezvousTimeoutError – Rendezvous не завершился вовремя.
Тип возвращаемого значения:

RendezvousInfo

abstract num_nodes_waiting() [исходный код]

Возвращает число узлов, опоздавших к барьеру rendezvous и поэтому не включённых в текущую группу рабочих процессов.

Вызывающий код должен периодически вызывать этот метод, чтобы проверять, ожидают ли новые узлы присоединения к заданию, и, если да, допускать их, вызывая next_rendezvous() (повторный rendezvous).

Тип возвращаемого значения:

int

abstract set_closed() [исходный код]

Помечает rendezvous как закрытый.

abstract shutdown() [исходный код]

Закрывает все ресурсы, открытые для rendezvous.

Пример:

rdzv_handler = ...
try:
    store, rank, world_size = rdzv_handler.next_rendezvous()
finally:
    rdzv_handler.shutdown()
Тип возвращаемого значения:

bool

property use_agent_store: bool

Указывает, что ссылку на хранилище, возвращаемую методом next_rendezvous(), можно передать пользовательским приложениям и что она будет доступна в течение всего жизненного цикла приложения.

Реализация обработчика rendezvous передаёт сведения о хранилище в виде экземпляра RendezvousStoreInfo. Приложения обычно используют переменные среды MASTER_ADDR/MASTER_PORT для получения доступа к хранилищу.

Классы данных

class torch.distributed.elastic.rendezvous.RendezvousInfo(store, rank, world_size, bootstrap_store_info) [исходный код]

Хранит сведения о rendezvous.

class torch.distributed.elastic.rendezvous.api.RendezvousStoreInfo(master_addr, master_port) [исходный код]

Адрес и порт хранилища, которые можно использовать для начальной настройки распределённого взаимодействия между обучающими процессами

static build(rank, store) [исходный код]

Фабричный метод: находит неиспользуемый порт на узле rank0 и передаёт всем рангам сведения об адресе и порте.

Если master_addr/master_port известны (это удобно при совместном использовании существующего сервера tcp store), используйте конструктор.

Параметры:
  • rank (int) – ранг текущего узла
  • store (Store) – хранилище, используемое для rendezvous
  • local_addr (str | None) – адрес текущего узла; если не указан, определяется по имени узла
  • server_port (int | None) – порт сервера TCPStore, если TCPStore используется совместно.
Тип возвращаемого значения:

RendezvousStoreInfo

Исключения

class torch.distributed.elastic.rendezvous.api.RendezvousError [исходный код]

Базовый тип ошибок rendezvous.

class torch.distributed.elastic.rendezvous.api.RendezvousClosedError [исходный код]

Возникает, когда rendezvous закрыт.

class torch.distributed.elastic.rendezvous.api.RendezvousTimeoutError [исходный код]

Возникает, если rendezvous не завершился вовремя.

class torch.distributed.elastic.rendezvous.api.RendezvousConnectionError [исходный код]

Возникает, если не удалось подключиться к серверной части rendezvous.

class torch.distributed.elastic.rendezvous.api.RendezvousStateError [исходный код]

Возникает, если состояние rendezvous повреждено.

class torch.distributed.elastic.rendezvous.api.RendezvousGracefulExitError [исходный код]

Возникает, если узел не был включён в rendezvous и завершает работу штатно.

Это исключение используется для выхода из стека, но не означает сбой.

Реализации

Динамическое rendezvous

torch.distributed.elastic.rendezvous.dynamic_rendezvous.create_handler(store, backend, params) [исходный код]

Создать новый DynamicRendezvousHandler с указанными параметрами.

Параметры:
  • store (Store) – Хранилище C10d, которое возвращается в составе rendezvous.
  • backend (RendezvousBackend) – Бэкенд для хранения состояния rendezvous.
Тип возвращаемого значения:

DynamicRendezvousHandler

Параметр

Описание

join_timeout

Общее время в секундах, за которое ожидается завершение rendezvous. По умолчанию — 600 секунд.

last_call_timeout

Дополнительное время ожидания в секундах перед завершением rendezvous после достижения минимального числа узлов. По умолчанию — 30 секунд.

close_timeout

Время в секундах, за которое ожидается закрытие rendezvous после вызова RendezvousHandler.set_closed() или RendezvousHandler.shutdown(). По умолчанию — 30 секунд.

heartbeat

Время в секундах, за которое ожидается завершение сигнала keep-alive

class torch.distributed.elastic.rendezvous.dynamic_rendezvous.DynamicRendezvousHandler [исходный код]

Представляет обработчик, который устанавливает rendezvous между набором узлов.

classmethod from_backend(run_id, store, backend, min_nodes, max_nodes, local_addr=None, timeout=None, keep_alive_interval=5, keep_alive_max_attempt=3) [исходный код]

Создать новый DynamicRendezvousHandler.

Параметры:
  • run_id (str) – Идентификатор запуска rendezvous.
  • store (Store) – Хранилище C10d, которое возвращается в составе rendezvous.
  • backend (RendezvousBackend) – Бэкенд для хранения состояния rendezvous.
  • min_nodes (int) – Минимальное число узлов, допускаемых к rendezvous.
  • max_nodes (int) – Максимальное число узлов, допускаемых к rendezvous.
  • local_addr (str | None) – Адрес локального узла.
  • timeout (RendezvousTimeout | None) – Конфигурация тайм-аутов rendezvous.
  • keep_alive_interval (int) – Время ожидания узла перед отправкой сигнала heartbeat, чтобы оставаться активным в rendezvous.
  • keep_alive_max_attempt (int) – Максимальное число неудачных попыток отправки сигнала heartbeat, после которого узел считается неактивным.
class torch.distributed.elastic.rendezvous.dynamic_rendezvous.RendezvousBackend [исходный код]

Представляет бэкенд, который хранит состояние rendezvous.

abstract get_state() [исходный код]

Получить состояние rendezvous.

Возвращает:

Кортеж из закодированного состояния rendezvous и его токена ограждения либо None, если состояние не найдено в бэкенде.

Вызывает исключения:
  • RendezvousConnectionError – Не удалось установить соединение с бэкендом.
  • RendezvousStateError – Состояние rendezvous повреждено.
Тип возвращаемого значения:

tuple[bytes, Any] | None

abstract property name: str

Получить имя бэкенда.

abstract set_state(state, token=None) [исходный код]

Задать состояние rendezvous.

Новое состояние rendezvous задаётся условно:

  • Если указанный token совпадает с токеном ограждения, сохранённым в бэкенде, состояние будет обновлено. Новое состояние вместе с его токеном ограждения будет возвращено вызывающей стороне.
  • Если указанный token не совпадает с токеном ограждения, сохранённым в бэкенде, состояние не будет обновлено; вместо этого вызывающей стороне будет возвращено существующее состояние вместе с его токеном ограждения.
  • Если указанный token равен None, новое состояние будет задано только в том случае, если в бэкенде нет существующего состояния. Вызывающей стороне будет возвращено либо новое состояние, либо существующее состояние вместе с его токеном ограждения.
Параметры:
  • state (bytes) – Закодированное состояние rendezvous.
  • token (Any | None) – Необязательный токен ограждения, полученный при предыдущем вызове get_state() или set_state().
Возвращает:

Кортеж из сериализованного состояния rendezvous, его токена ограждения и логического значения, указывающего, была ли успешной попытка задать состояние.

Вызывает исключения:
  • RendezvousConnectionError – Не удалось установить соединение с бэкендом.
  • RendezvousStateError – Состояние rendezvous повреждено.
Тип возвращаемого значения:

tuple[bytes, Any, bool] | None

class torch.distributed.elastic.rendezvous.dynamic_rendezvous.RendezvousTimeout(join=None, last_call=None, close=None, heartbeat=None) [исходный код]

Содержит конфигурацию тайм-аутов rendezvous.

Параметры:
  • join (timedelta | None) – Время, за которое ожидается завершение rendezvous.
  • last_call (timedelta | None) – Дополнительное время ожидания перед завершением rendezvous после достижения минимального числа участников.
  • close (timedelta | None) – Время, за которое ожидается закрытие rendezvous после вызова RendezvousHandler.set_closed() или RendezvousHandler.shutdown().
  • heartbeat (timedelta | None) – Время, за которое ожидается завершение сигнала heartbeat keep-alive.
property close: timedelta

Получить тайм-аут закрытия.

property heartbeat: timedelta

Получить тайм-аут сигнала heartbeat keep-alive.

property join: timedelta

Получить тайм-аут подключения.

property last_call: timedelta

Получить тайм-аут последнего вызова.

Бэкенд C10d

torch.distributed.elastic.rendezvous.c10d_rendezvous_backend.create_backend(params) [исходный код]

Создать новый C10dRendezvousBackend с указанными параметрами.

Параметр

Описание

store_type

Тип хранилища C10d. В настоящее время поддерживаются типы «tcp» и «file», соответствующие torch.distributed.TCPStore и torch.distributed.FileStore соответственно. По умолчанию — «tcp».

read_timeout

Тайм-аут чтения в секундах для операций с хранилищем. По умолчанию — 60 секунд.

Обратите внимание: этот параметр применяется только к torch.distributed.TCPStore. Он не применим к torch.distributed.FileStore, который не принимает тайм-аут в качестве параметра.

is_host

Логическое значение, указывающее, будет ли этот экземпляр бэкенда размещать хранилище C10d. Если значение не указано, оно определяется эвристически путём сопоставления имени хоста или IP-адреса этой машины с указанной конечной точкой rendezvous. По умолчанию — None.

Обратите внимание, что этот параметр конфигурации применяется только к torch.distributed.TCPStore. В обычных условиях его можно не указывать; он необходим только тогда, когда значение невозможно определить корректно (например, если конечная точка rendezvous использует CNAME в качестве имени хоста или не соответствует FQDN машины).

Тип возвращаемого значения:

tuple[C10dRendezvousBackend, Store]

class torch.distributed.elastic.rendezvous.c10d_rendezvous_backend.C10dRendezvousBackend(store, run_id) [исходный код]

Представляет бэкенд rendezvous на основе C10d.

Параметры:
  • store (Store) – Экземпляр torch.distributed.Store, используемый для взаимодействия с хранилищем C10d.
  • run_id (str) – Идентификатор запуска rendezvous.
get_state() [исходный код]

См. базовый класс.

Тип возвращаемого значения:

tuple[bytes, Any] | None

property name: str

См. базовый класс.

set_state(state, token=None) [исходный код]

См. базовый класс.

Тип возвращаемого значения:

tuple[bytes, Any, bool] | None

Бэкенд Etcd

torch.distributed.elastic.rendezvous.etcd_rendezvous_backend.create_backend(params) [исходный код]

Создать новый EtcdRendezvousBackend с указанными параметрами.

Параметр

Описание

read_timeout

Тайм-аут чтения в секундах для операций etcd. По умолчанию — 60 секунд.

protocol

Протокол для взаимодействия с etcd. Допустимые значения: «http» и «https». По умолчанию — «http».

ssl_cert

Путь к сертификату клиента SSL, используемому вместе с HTTPS. По умолчанию — None.

ssl_cert_key

Путь к закрытому ключу сертификата клиента SSL, используемому вместе с HTTPS. По умолчанию — None.

ca_cert

Путь к корневому сертификату центра сертификации SSL. По умолчанию — None.

Тип возвращаемого значения:

tuple[EtcdRendezvousBackend, Store]

class torch.distributed.elastic.rendezvous.etcd_rendezvous_backend.EtcdRendezvousBackend(client, run_id, key_prefix=None, ttl=None) [исходный код]

Представляет бэкенд rendezvous на основе etcd.

Параметры:
  • client (Client) – Экземпляр etcd.Client, используемый для взаимодействия с etcd.
  • run_id (str) – Идентификатор запуска rendezvous.
  • key_prefix (str | None) – Путь, по которому в etcd хранится состояние rendezvous.
  • ttl (int | None) – TTL состояния rendezvous. Если не указано, по умолчанию составляет два часа.
get_state() [исходный код]

См. базовый класс.

Тип возвращаемого значения:

tuple[bytes, Any] | None

property name: str

См. базовый класс.

set_state(state, token=None) [исходный код]

См. базовый класс.

Тип возвращаемого значения:

tuple[bytes, Any, bool] | None

Rendezvous Etcd (устаревший)

Предупреждение

Класс DynamicRendezvousHandler заменяет класс EtcdRendezvousHandler и рекомендуется большинству пользователей. EtcdRendezvousHandler находится в режиме сопровождения и в будущем будет объявлен устаревшим.

class torch.distributed.elastic.rendezvous.etcd_rendezvous.EtcdRendezvousHandler(rdzv_impl, local_addr) [исходный код]

Реализует интерфейс torch.distributed.elastic.rendezvous.RendezvousHandler на основе torch.distributed.elastic.rendezvous.etcd_rendezvous.EtcdRendezvous. EtcdRendezvousHandler использует URL для настройки типа rendezvous и передачи специфичных для реализации параметров модулю rendezvous. Базовый URL конфигурации rendezvous etcd выглядит следующим образом

etcd://<etcd_address>:<port>/<job_id>?min_workers=<min_workers>&max_workers=<max_workers>  # noqa: W605

-- example --

etcd://localhost:2379/1234?min_workers=1&max_workers=3

Приведённый выше URL интерпретируется следующим образом:

  1. Используется обработчик rendezvous, зарегистрированный для схемы etcd
  2. Используемая конечная точка etcd — localhost:2379
  3. job_id == 1234 используется в качестве префикса в etcd (это позволяет нескольким заданиям совместно использовать один сервер etcd при условии, что job_ids гарантированно уникальны). Обратите внимание, что идентификатор задания может быть любой строкой (например, не обязательно числом), если он уникален.
  4. min_workers=1 и max_workers=3 задают диапазон размера группы — Torch Distributed Elastic начинает выполнение задания, если размер кластера не меньше min_workers, и допускает в кластер до max_workers участников.

Ниже приведён полный список параметров, которые можно передать rendezvous etcd:

Параметр

Описание

min_workers

минимальное число рабочих процессов, необходимое для действительного rendezvous

max_workers

максимальное число допускаемых рабочих процессов

timeout

общий тайм-аут, в пределах которого ожидается успешное выполнение next_rendezvous (по умолчанию 600 с)

last_call_timeout

дополнительное время ожидания («последний вызов») после достижения минимального числа рабочих процессов (по умолчанию 30 с)

etcd_prefix

префикс пути (от корня etcd), внутри которого будут созданы все узлы etcd (по умолчанию /torchelastic/p2p)

Хранилище Etcd

EtcdStore — это тип экземпляра C10d Store, возвращаемый next_rendezvous() при использовании etcd в качестве бэкенда для rendezvous.

class torch.distributed.elastic.rendezvous.etcd_store.EtcdStore(etcd_client, etcd_store_prefix, timeout=None) [исходный код]

Реализует интерфейс хранилища c10, используя экземпляр etcd для rendezvous.

Это объект хранилища, возвращаемый EtcdRendezvous.

add(key, num) [исходный код]

Атомарно увеличивает значение на целое число.

Целое число представлено в виде строки в десятичной системе счисления. Если ключ отсутствует, будет использоваться значение по умолчанию 0.

Возвращает:

новое (увеличенное) значение

Тип возвращаемого значения:

int

check(keys) [исходный код]

Проверяет, присутствуют ли сразу все ключи (без ожидания).

Тип возвращаемого значения:

bool

get(key) [исходный код]

Получает значение по ключу, при необходимости блокируя выполнение в ожидании.

Если ключ отсутствует, будет ожидать его публикации не более timeout или до момента публикации ключа.

Возвращает:

значение (bytes)

Вызывает исключение:

LookupError — если ключ так и не опубликован по истечении времени ожидания –

Тип возвращаемого значения:

bytes

set(key, value) [исходный код]

Записывает пару ключ/значение в EtcdStore.

И ключ, и значение могут иметь тип Python str или bytes.

wait(keys, override_timeout=None) [исходный код]

Ожидает публикации всех ключей или истечения времени ожидания.

Вызывает исключение:

LookupError — если время ожидания истекло –

Сервер Etcd

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

Предупреждение

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

class torch.distributed.elastic.rendezvous.etcd_server.EtcdServer(data_dir=None) [исходный код]

Примечание

Проверено на сервере etcd v3.4.3.

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

Этот класс регистрирует обработчик завершения, который останавливает дочерний процесс etcd при выходе. Этот обработчик завершения НЕ заменяет вызов метода stop().

Для поиска исполняемого файла etcd используется следующий механизм резервного поиска:

  1. Используется переменная окружения TORCHELASTIC_ETCD_BINARY_PATH
  2. Используется <this file root>/bin/etcd, если он существует
  3. Используется etcd из PATH

Использование

server = EtcdServer("/usr/bin/etcd", 2379, "/tmp/default.etcd")
server.start()
client = server.get_client()
# use client
server.stop()
Параметры:

etcd_binary_path – путь к исполняемому файлу сервера etcd (см. выше резервный путь)

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

Spec-Zone.ru

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