• 文档 >
  • 模块代码 >
  • torch >
  • torch.distributed >
  • torch.distributed.elastic.rendezvous.etcd_rendezvous_backend
快捷键

torch.distributed.elastic.rendezvous.etcd_rendezvous_backend 源代码

# mypy: 允许未类型化定义
版权所有(c)Facebook,Inc.及其关联公司
版权所有
#
此源代码遵循在源树根目录中的 LICENSE 文件中找到的 BSD 风格许可协议。
有关许可证文件,请参阅源树根目录。

导入 binascii
来自 base64 导入 base64 解码, base64 编码
来自 打字 导入 角色, 可选

导入 urllib3.exceptions  # type: ignore[import]


try:
    导入 etcd  # type: ignore[import]
除了 模块未找到错误:
    来自 . 导入 _etcd_stub 作为 etcd

来自 torch.distributed 导入 店铺

来自 .api 导入 约会连接错误, 会合参数, RendezvousStateError
来自 .动态 rendezvous 导入 rendezvous 后端, 令牌
来自 .etcd 存储 导入 Etcd 存储
来自 .工具 导入 解析预约端点


[文档] Etcd rendezvous 后端(rendezvous 后端): 表示一个基于 etcd 的 rendezvous 后端。 参数: 客户端: 使用以与 etcd 通信的 `etcd.Client` 实例。 run_id: 约会运行的 ID。 key 前缀 在 etcd 中存储 rendezvous 状态的路径。 ttl: rendezvous 状态的 TTL。如未指定,默认为两小时。 ```python # 假设输入文本为: input_text = '"""' # 翻译函数(此处仅为示例,实际翻译功能需要调用真实的翻译 API) def translate_to_simplified_chinese(text): # 这里应该调用真实的翻译 API 进行翻译 # 由于示例中不使用真实的 API,以下为模拟翻译结果 return text # 输出翻译结果 translated_text = translate_to_simplified_chinese(input_text) print(translated_text) ``` 默认 TTL = 7200 # 2 小时 _客户端: etcd.客户端 _键: 字符串 _ttl: 整型 def 初始化( 自身, 客户端: etcd.客户端, run_id: 字符串, key_prefix: 可选[字符串] = , ttl: 可选[int] = , ) -> : 如果 not run_id: 提升 ValueError("运行 ID 必须是非空字符串。") 自身._client = 客户端 如果 key_prefix: 自身._键 = key_prefix + 根目录 + 运行 ID 否则: 自身._键 = 运行 ID 如果 ttl ttl > 0: 自身._ttl = ttl 否则: 自身._ttl = 自身._DEFAULT_TTL @property def 名称(自身) -> 字符串: "查看基类。" 返回 etcd-v2
[文档] def get_state(self) -> Optional[tuple[bytes, Token]]: “查看基类。” try: result = self._client.read(self._key) except etcd.EtcdKeyNotFound: 返回 None except (etcd.EtcdException, urllib3.exceptions.TimeoutError) as exc: raise RendezvousConnectionError( "连接到 etcd 失败。请查看内部异常以获取详细信息。" ) 来自异常 返回 self._decode_state(result)
[文档] def 设置状态( self, 状态: bytes, 令牌: Optional[Token] = None ) -> Optional[tuple[bytes, Token, bool]]: """查看基类。""" base64_state = b64encode(state).decode() kwargs = {} def get_state(): result = self.get_state() if result is not None: tmp = *result, False Python 3.6 不支持返回语句中的元组解包 语句。 返回 tmp 返回 None if token: try: token = int(token) except ValueError: 返回获取状态() 如果有 token: kwargs["prevIndex"] = token 否则: kwargs["prevExist"] = False try: result = self._client.write(self._key, base64_state, self._ttl, **kwargs) except (etcd.EtcdAlreadyExist, etcd.EtcdCompareFailed): result = None except (etcd.EtcdException, urllib3.exceptions.TimeoutError) as exc: raise RendezvousConnectionError( "The connection to etcd has failed. See inner exception for details." ) 来自异常 如果结果为 None: 返回 get_state() tmp = *self._decode_state(result), True 返回 tmp
def _解码状态
(自身, 结果: etcd.Etcd 结果) -> 元组[字节, 令牌]: 基础状态 = 结果..编码() try: 状态 = base64 解码(基础状态) 除了 binascii.错误 作为 异常: 提升 预约状态错误( 状态对象已损坏。请查看内部异常以获取详细信息。 ) 来自 exc 返回 状态, 结果.modifiedIndex
def 创建 etcd 客户端(参数: 会合参数) -> etcd.客户端: 主机, 端口 = 解析会话端点(参数.端点, 默认端口=2379) 超时 读取超时 = 角色(int, 参数.获取整数值("读取超时", 60)) 如果 读取超时 0: 提升 ValueError("读取超时必须是正整数。") # 通信协议 协议 = 参数.获取("协议", "http").strip().小写() 如果 协议 != "http" 协议 != "https": 提升 ValueError("协议必须是 HTTP 或 HTTPS。") SSL 客户端证书 ssl 证书 = 参数.获取("ssl 证书") 如果 ssl_cert: ssl 证书密钥 = 参数.获取("ssl 证书密钥") 如果 ssl 证书密钥: etcd 客户端期望证书密钥作为第二个元素 `cert` 元组的数量 ssl 证书 = (ssl_cert, ssl 证书密钥) 根证书 证书颁发机构 = 参数.获取("证书颁发机构") try: 返回 etcd.客户端( 主机, 端口, read_timeout=read_timeout, 协议=协议, 证书=ssl_cert, ca 证书=ca 证书, 允许重连=True, ) 除了 (etcd.Etcd 异常, urllib3.异常.超时错误) 作为 异常: 提升 约会连接错误( "etcd 连接失败。请查看内部异常以获取详细信息。" ) 来自 exc
[文档]def create_backend(params: RendezvousParameters) -> tuple[EtcdRendezvousBackend, Store] """从指定的参数创建一个新的 :py:class:`EtcdRendezvousBackend`。 +--------------+-----------------------------------------------------------+ | 参数 | 描述 | +==============+===========================================================+ | read_timeout | etcd 操作的读取超时,以秒为单位。 | | | 默认为 60 秒。 | +--------------+-----------------------------------------------------------+ | etcd 通信所使用的协议。有效值是 "http" 和 "https"。默认为 "http"。 | | 默认值为 "http"。 +--------------+-----------------------------------------------------------+ ssl_cert | SSL 客户端证书的路径,用于配合使用 | HTTPS. 默认为 `None`。 +--------------+-----------------------------------------------------------+ SSL 证书密钥 | SSL 客户端证书的私钥路径 与 HTTPS 一起使用。默认为`None`。 +--------------+-----------------------------------------------------------+ ca_cert | SSL 根证书的路径。默认值 将 `None` 设置为 `None`。 +--------------+-----------------------------------------------------------+ """ client = _create_etcd_client(params) backend = EtcdRendezvousBackend( client, params.run_id, key_prefix="/torch/elastic/rendezvous" ) store = EtcdStore(client, "/torch/elastic/store") return backend, store

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源,获取您的疑问解答

查看资源