Согласование участников
Создано: 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:
- Запрос количества рабочих процессов, опоздавших к барьеру и способных участвовать в следующем rendezvous.
- Закрытие 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.
Реестр
-
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.- Тип возвращаемого значения:
-
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 )- Тип возвращаемого значения:
Обработчик
-
class torch.distributed.elastic.rendezvous.RendezvousHandler[исходный код] -
Основной интерфейс rendezvous.
Примечание
Пользователям распределённого Torch обычно не нужно самостоятельно реализовывать
RendezvousHandler. Уже доступна реализация на основе хранилища C10d, которая рекомендуется большинству пользователей.-
abstract get_backend()[исходный код] -
Возвращает имя серверной части rendezvous.
- Тип возвращаемого значения:
-
abstract get_run_id()[исходный код] -
Возвращает идентификатор запуска rendezvous.
Идентификатор запуска — это заданный пользователем идентификатор, однозначно определяющий экземпляр распределённого приложения. Обычно он соответствует идентификатору задания и используется для того, чтобы узлы могли присоединиться к нужному распределённому приложению.
- Тип возвращаемого значения:
-
abstract is_closed()[исходный код] -
Проверяет, закрыт ли rendezvous.
Закрытый rendezvous означает, что все последующие попытки повторного rendezvous в рамках того же задания завершатся неудачей.
Методы
is_closed()иset_closed()обеспечивают распространение состояния с задержкой и не должны использоваться для синхронизации. Предполагается, что если хотя бы один узел решит, что задание завершено, он закроет rendezvous, и остальные узлы вскоре обнаружат это и также прекратят работу.- Тип возвращаемого значения:
-
abstract next_rendezvous()[исходный код] -
Основная точка входа в барьер rendezvous.
Ожидает завершения rendezvous и включения текущего процесса в сформированную группу рабочих процессов, истечения времени ожидания или закрытия rendezvous.
- Возвращает:
-
Экземпляр
RendezvousInfo. - Вызывает исключения:
-
- RendezvousClosedError – Rendezvous закрыт.
- RendezvousConnectionError – Не удалось подключиться к серверной части rendezvous.
- RendezvousStateError – Состояние rendezvous повреждено.
- RendezvousTimeoutError – Rendezvous не завершился вовремя.
- Тип возвращаемого значения:
-
abstract num_nodes_waiting()[исходный код] -
Возвращает число узлов, опоздавших к барьеру rendezvous и поэтому не включённых в текущую группу рабочих процессов.
Вызывающий код должен периодически вызывать этот метод, чтобы проверять, ожидают ли новые узлы присоединения к заданию, и, если да, допускать их, вызывая
next_rendezvous()(повторный rendezvous).- Тип возвращаемого значения:
-
abstract set_closed()[исходный код] -
Помечает rendezvous как закрытый.
-
abstract shutdown()[исходный код] -
Закрывает все ресурсы, открытые для rendezvous.
Пример:
rdzv_handler = ... try: store, rank, world_size = rdzv_handler.next_rendezvous() finally: rdzv_handler.shutdown()- Тип возвращаемого значения:
-
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), используйте конструктор.
- Параметры:
- Тип возвращаемого значения:
-
Исключения
-
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.
- Тип возвращаемого значения:
Параметр
Описание
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 повреждено.
- Тип возвращаемого значения:
-
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 повреждено.
- Тип возвращаемого значения:
- Если указанный
-
-
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 машины).- Тип возвращаемого значения:
-
class torch.distributed.elastic.rendezvous.c10d_rendezvous_backend.C10dRendezvousBackend(store, run_id)[исходный код] -
Представляет бэкенд rendezvous на основе C10d.
- Параметры:
-
-
store (Store) – Экземпляр
torch.distributed.Store, используемый для взаимодействия с хранилищем C10d. - run_id (str) – Идентификатор запуска rendezvous.
-
store (Store) – Экземпляр
-
property name: str -
См. базовый класс.
Бэкенд 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.- Тип возвращаемого значения:
-
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. Если не указано, по умолчанию составляет два часа.
-
client (Client) – Экземпляр
-
property name: str -
См. базовый класс.
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 интерпретируется следующим образом:
- Используется обработчик rendezvous, зарегистрированный для схемы
etcd - Используемая конечная точка
etcd—localhost:2379 -
job_id == 1234используется в качестве префикса в etcd (это позволяет нескольким заданиям совместно использовать один сервер etcd при условии, чтоjob_idsгарантированно уникальны). Обратите внимание, что идентификатор задания может быть любой строкой (например, не обязательно числом), если он уникален. -
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) - Используется обработчик rendezvous, зарегистрированный для схемы
Хранилище 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.- Возвращает:
-
новое (увеличенное) значение
- Тип возвращаемого значения:
-
check(keys)[исходный код] -
Проверяет, присутствуют ли сразу все ключи (без ожидания).
- Тип возвращаемого значения:
-
get(key)[исходный код] -
Получает значение по ключу, при необходимости блокируя выполнение в ожидании.
Если ключ отсутствует, будет ожидать его публикации не более
timeoutили до момента публикации ключа.- Возвращает:
-
значение
(bytes) - Вызывает исключение:
-
LookupError — если ключ так и не опубликован по истечении времени ожидания –
- Тип возвращаемого значения:
-
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 используется следующий механизм резервного поиска:
- Используется переменная окружения TORCHELASTIC_ETCD_BINARY_PATH
- Используется
<this file root>/bin/etcd, если он существует - Используется
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