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

torch.backends.cudnn 的源代码

# mypy: 允许未类型化定义
导入 操作系统
导入 系统
导入 警告
来自 contextlib 导入 contextmanager
来自 打字 导入 可选

导入 火炬
来自 PyTorch 后端 导入 __allow_nonbracketed_mutation, ContextProp, 模块属性


尝试:
    来自 torch._C 导入 _cudnn
除了 导入错误:
    _cudnn =   # 类型:忽略[赋值]

# 写入:
#
#   torch.backends.cudnn.enabled = False
#
# 全局禁用 CuDNN/MIOpen

__cudnn_version: 可选[int] = 

如果 _cudnn   :

    def _初始化():
        全局 __cudnn 版本
        如果 __cudnn 版本  :
            __cudnn 版本 = _cudnn.获取版本整数()
            运行时版本 = _cudnn.获取运行时版本()
            编译版本 = _cudnn.获取编译版本()
            运行时主版本号, 运行时小版本, _ = 运行时版本
            编译主版本, 编译小版本, _ = 编译版本
            不同主版本总是不兼容
            从 cuDNN 7 开始,次要版本是向后兼容的
            对于 MIOpen (ROCm)不确定,所以总是进行严格检查
            如果 运行时主版本 != 编译主版本:
                兼容 CUDNN = 
            如果...否则 运行时主版本 < 7 或者  _cudnn.is_cuda:
                cudnn_compatible = runtime_minor == 编译小版本
            否则:
                支持 cuDNN = 运行时小版本  编译小版本
            如果  cudnn 兼容:
                如果 os.环境.获取("跳过 PYTORCH 对 cuDNN 兼容性的检查", "0") == "1":
                    返回 真实
                基础错误信息 = (
                    f"cuDNN 版本不兼容:"
                    fPyTorch 编译版本为{编译版本} "
                    f但发现运行时版本为{运行时版本}. 
                    fPyTorch 已经捆绑了 cuDNN。
                    f解决此错误的一个选项是确保 PyTorch
                    f可以找到捆绑的 cuDNN。
                )

                如果 LD_LIBRARY_PATH  os.环境:
                    ld_library_path = os.环境.获取("LD_LIBRARY_PATH", 输入文本翻译为简体中文为:"")
                    如果 任何(
                        substring  ld_library_path for 子串  [cuda, cudnn]
                    ):
                        抛出 运行时错误(
                            f"{基础错误信息}"
                            f"看起来您的 LD_LIBRARY_PATH 包含不兼容版本的 cudnn。"
                            f"请将其从路径中删除或安装 cudnn。"{编译版本}"
                        )
                    否则:
                        抛出 运行时错误(
                            f"{基础错误信息}"
                            f"有一种可能是,存在一个“"
                            f"LD_LIBRARY_PATH 中存在冲突的 cuDNN。"
                        )
                否则:
                    抛出 运行时错误(base_error_msg)

        返回 真实

否则:

    def _初始化():
        返回 


[文档]def 版本(): """返回 cuDNN 的版本。""" if not _init(): 返回 None 返回 __cudnn_version
CUDNN_TENSOR_DTYPES = { PyTorch
., PyTorch.float, PyTorch.double, }
[文档]定义 is_available() 返回一个布尔值,指示 CUDNN 当前是否可用。 返回 torch._C._has_cudnn
def is_acceptable(张量): 如果
PyTorch._C._get_cudnn_enabled(): 返回 如果 张量.设备.类型 != "cuda" 或者 张量.dtype CUDNN_TENSOR_DTYPES: 返回 如果 是否可用(): 警告.警告( "PyTorch 未编译 cuDNN/MIOpen 支持。要使用 cuDNN/MIOpen,请重新构建 " "确保库对构建系统可见的 PyTorch。" ) 返回 如果 _初始化(): 警告.警告( "未找到 cuDNN/MIOpen 库。请检查 "{libpath}".格式( libpath={"darwin": "DYLD_LIBRARY_PATH", win32: 环境变量 PATH}.获取( 系统模块.平台, LD_LIBRARY_PATH ) ) ) 返回 返回 真实 def 设置标志( 启用=, _基准测试=, _基准测试限制=, 确定性=, 允许 TF32=, ): 原始标志 = ( PyTorch._C.获取 cudnn 启用状态(), PyTorch._C.获取_cudnn_benchmark(), 如果 是否可用() 否则 PyTorch._C.获取_cudnn_get_cudnn_benchmark_limit(), PyTorch._C.获取_cudnn_deterministic(), PyTorch._C.获取_cudnn_allow_tf32(), ) 如果 启用 : PyTorch._C.设置 CUDNN 启用(启用) 如果 基准测试 : PyTorch._C.设置 CUDNN 基准测试(基准测试) 如果 _基准限制 是否可用(): PyTorch._C._设置 CUDA 的 CUDNN 基准限制(_基准限制) 如果 _确定性 : PyTorch._C.设置 cudnn 确定性(确定性) 如果 允许 tf32 : PyTorch._C.设置 cudnn 允许 tf32(允许使用 TF32) 返回 原始标志 @contextmanager def 标志( 启用=False, 基准测试=False, 基准限制=10, 确定性=False, 允许使用 TF32=True, ): 替换为 允许非括号突变(): 原始标志 = 设置标志( 启用, 基准测试, 基准限制, 确定性, 允许 TF32 ) 尝试: 产生 最后: # 恢复之前的值 替换为 __允许非括号突变(): 设置标志(*原始标志) # 这里的魔法在于允许我们拦截如下代码: # # torch.backends.<cudnn|mkldnn>.enabled = True Cudnn 模块(Prop 模块): def __init__(self, m, 名称): 超级().__init__(m, 名称) 启用 = 上下文属性(PyTorch._C._get_cudnn_enabled, PyTorch._C.设置 CUDA 深度神经网络启用) 确定性 = 上下文属性( PyTorch._C.获取 CUDA 深度神经网络确定性, PyTorch._C.设置 CUDA 深度神经网络确定性 ) 基准 = 上下文属性( PyTorch._C._get_cudnn_benchmark, PyTorch._C._set_cudnn_benchmark ) 基准限制 = 如果 是否可用(): 基准限制 = 上下文属性( PyTorch._C._cuda 获取 cudnn 基准限制, PyTorch._C._cuda 设置 cudnn_benchmark_limit, ) 允许 tf32 = ContextProp( PyTorch._C._get_cudnn 允许 tf32, PyTorch._C._设置_cudnn_allow_tf32 ) # 这是 sys.modules 替换技巧,详见 # https://stackoverflow.com/questions/2447353/getattr-on-a-module/7668273#7668273 系统模块.模块[__name__] = Cudnn 模块(系统模块.模块[__name__] __name__) 为替换的模块添加类型注解 启用: 布尔值 确定性: 布尔值 基准测试: 布尔值 允许使用 TF32: 布尔值 基准限制: 整型

© 版权所有 PyTorch 贡献者。

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

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源