• 文档 >
  • 模块代码 >
  • torch >
  • torch.backends.opt_einsum
快捷键

torch.backends.opt_einsum 的源代码

# mypy: 允许未类型化定义
导入 系统
导入 警告
来自 contextlib 导入 contextmanager
来自 functools 导入 lru_cache as _lru_cache
来自 打字 导入 任何

来自 PyTorch 后端 导入 __允许非括号突变, ContextProp, 模块属性


尝试:
    导入 opt_einsum as _opt_einsum  # type: ignore[import]
除了 导入错误:
    _opt_einsum = 


[文档]@_lru_cache def is_available() -> bool: r"""返回一个布尔值,指示 opt_einsum 当前是否可用。 您必须安装 opt-einsum,以便 torch 自动优化 einsum。 使 opt-einsum 可用,您可以在安装 torch 时一起安装它:``pip install torch[opt-einsum]``` 或单独使用:``pip install opt-einsum``。如果已安装该包,torch 将导入 它自动并相应地使用。使用此功能检查 opt-einsum 通过 torch 安装并正确导入。 """ 返回_opt_einsum 是否不为 None
[文档]def get_opt_einsum() -> Any: 返回 opt_einsum 包,如果 opt_einsum 当前可用,否则返回 None。 返回_opt_einsum
def _set_enabled(启用
: bool) -> : 如果 是否可用() 启用: 抛出 值错误( fopt_einsum 不可用,因此将`enabled`设置为{启用}将不会收获 " 的好处 torch.einsum 将会回退到从左到右进行收缩。为了启用这种最优路径计算,请安装 opt-einsum。 将回退到从左到右进行收缩。为了启用这种最优路径计算,请安装 opt-einsum。 请安装 opt-einsum 以启用这种最优路径计算。 ) 全局 启用 启用 = 启用 def _get_enabled() -> bool: 返回 启用 def _set_strategy(_strategy: str) -> : 如果 是否可用(): 抛出 值错误( f"opt_einsum 不可用,因此将`strategy`设置为"{策略}将没有意义。 "torch.einsum 将绕过路径计算,并从左到右进行收缩。" "请安装 opt_einsum 或取消设置 `strategy`。" ) 如果 启用: 抛出 值错误( f"opt_einsum 未启用,因此设置`strategy`将没有意义。"{_strategy}将不会产生意义。 "torch.einsum 将绕过路径计算,直接从左到右进行收缩。" "请同时将 `enabled` 设置为 `True` 或取消设置 `strategy`。" ) 如果 _策略 ["自动", "贪婪", "最优的"] 抛出 值错误( f"策略`必须为以下之一:[auto, greedy, 最优的]但却是"{_策略}" ) 全局 策略 策略 = _策略 def 获取策略() -> str: 返回 策略 def 设置标志(启用=, 策略=): 原始标志 = (启用, 如果 是否可用() 否则 策略) 如果 启用 : 设置启用(启用) 如果 策略 : 设置策略(策略) 返回 原始标志 @contextmanager def 标志(启用=, 策略=): 替换为 __允许非括号突变(): 原始标志 = 设置标志(启用, 策略) 尝试: 产生 最后: # 恢复之前的值 替换为 __允许非括号突变(): 设置标志(*原始标志) # 这里的魔法在于允许我们拦截如下代码: # # torch.backends.opt_einsum.enabled = True OptEinsum 模块(Prop 模块): def __init__(self, m, 名称): 超级().__init__(m, 名称) 全局 启用 启用 = ContextProp(_get_enabled, _set_enabled) 全局 策略 策略 = 如果 是否可用(): 策略 = ContextProp(_get_strategy, _set_strategy) # 这是 sys.modules 替换技巧,详见 # https://stackoverflow.com/questions/2447353/getattr-on-a-module/7668273#7668273 系统模块.模块[__name__] = OptEinsum 模块(系统模块.模块[__name__] __name__) 启用 = 真实 如果 是否可用() 否则 策略 = 自动 如果 是否可用() 否则

© 版权所有 PyTorch 贡献者。

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

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源