torch.backends#
创建于: 2020年9月16日 | 最后更新于: 2025年8月26日
torch.backends
控制 PyTorch 支持的各种后端行为。
这些后端包括
torch.backends.cpu
torch.backends.cuda
torch.backends.cudnn
torch.backends.cusparselt
torch.backends.mha
torch.backends.mps
torch.backends.mkl
torch.backends.mkldnn
torch.backends.nnpack
torch.backends.openmp
torch.backends.opt_einsum
torch.backends.xeon
torch.backends.cpu#
torch.backends.cuda#
- torch.backends.cuda.is_built()[source]#
返回 PyTorch 是否已构建支持 CUDA。
请注意,这并不一定意味着 CUDA 可用;它仅仅表示如果此 PyTorch 二进制文件在具有工作 CUDA 驱动程序和设备的机器上运行,我们将能够使用它。
- torch.backends.cuda.matmul.allow_tf32#
一个
bool
,用于控制在 Ampere 或更新的 GPU 上进行矩阵乘法时是否可以使用 TensorFloat-32 张量核心。allow_tf32 将被弃用。请参阅 Ampere(及更高版本)设备上的 TensorFloat-32 (TF32)。
- torch.backends.cuda.matmul.allow_fp16_reduced_precision_reduction#
一个
bool
,用于控制在使用 fp16 GEMM 时是否允许使用低精度归约(例如,使用 fp16 累加类型)。
- torch.backends.cuda.matmul.allow_bf16_reduced_precision_reduction#
一个
bool
,用于控制在使用 bf16 GEMM 时是否允许使用低精度归约。
- torch.backends.cuda.cufft_plan_cache#
cufft_plan_cache
包含每个 CUDA 设备的 cuFFT 计划缓存。通过 torch.backends.cuda.cufft_plan_cache[i] 查询特定设备 i 的缓存。- torch.backends.cuda.cufft_plan_cache.clear()#
清除 cuFFT 计划缓存。
- torch.backends.cuda.preferred_blas_library(backend=None)[source]#
覆盖 PyTorch 用于 BLAS 操作的库。在 cuBLAS、cuBLASLt 和 CK [仅限 ROCm] 之间进行选择。
警告
此标志是实验性的,可能会发生变化。
当 PyTorch 运行 CUDA BLAS 操作时,即使 cuBLAS 和 cuBLASLt 都可用,它也默认使用 cuBLAS。对于为 ROCm 构建的 PyTorch,hipBLAS、hipBLASLt 和 CK 可能会提供不同的性能。此标志(一个
str
)允许覆盖要使用的 BLAS 库。如果设置为 “cublas”,则 wherever possible 将使用 cuBLAS。
如果设置为 “cublaslt”,则 wherever possible 将使用 cuBLASLt。
如果设置为 “ck”,则 wherever possible 将使用 CK。
如果设置为 “default”(默认值),则将使用启发式方法在其他选项之间进行选择。
不提供输入时,此函数返回当前首选的库。
用户可以使用环境变量 TORCH_BLAS_PREFER_CUBLASLT=1 全局设置首选库为 cuBLASLt。此标志仅设置首选库的初始值,并且首选库仍可能在此函数调用后被脚本中的后续调用覆盖。
注意:当某个库被首选时,如果首选库不实现所调用的操作,仍可能使用其他库。如果 PyTorch 的库选择不适合您的应用程序输入,此标志可能会获得更好的性能。
- 返回类型
_BlasBackend
- torch.backends.cuda.preferred_rocm_fa_library(backend=None)[source]#
[仅限 ROCm] 覆盖 PyTorch 在 ROCm 环境中用于 Flash Attention 的后端。在 AOTriton 和 CK 之间进行选择
警告
此标志是实验性的,可能会发生变化。
当启用了 Flash Attention 并需要时,PyTorch 默认使用 AOTriton 作为后端。此标志(一个
str
)允许用户覆盖此后端以使用 composable_kernel如果设置为 “default”,则 wherever possible 将使用默认后端。目前是 AOTriton。
如果设置为 “aotriton”,则 wherever possible 将使用 AOTriton。
如果设置为 “ck”,则 wherever possible 将使用 CK。
不提供输入时,此函数返回当前首选的库。
用户可以使用环境变量 TORCH_ROCM_FA_PREFER_CK=1 将首选库设置为 CK 全局。
注意:当某个库被首选时,如果首选库不实现所调用的操作,仍可能使用其他库。如果 PyTorch 的库选择不适合您的应用程序输入,此标志可能会获得更好的性能。
- 返回类型
_ROCmFABackend
- torch.backends.cuda.preferred_linalg_library(backend=None)[source]#
覆盖 PyTorch 在 CUDA 线性代数运算中选择 cuSOLVER 和 MAGMA 的启发式方法。
警告
此标志是实验性的,可能会发生变化。
当 PyTorch 运行 CUDA 线性代数运算时,它经常使用 cuSOLVER 或 MAGMA 库,如果两者都可用,它会通过启发式方法决定使用哪一个。此标志(一个
str
)允许覆盖这些启发式方法。如果设置为 “cusolver”,则 wherever possible 将使用 cuSOLVER。
如果设置为 “magma”,则 wherever possible 将使用 MAGMA。
如果设置为 “default”(默认值),则当两者都可用时,将使用启发式方法在 cuSOLVER 和 MAGMA 之间进行选择。
不提供输入时,此函数返回当前首选的库。
用户可以使用环境变量 TORCH_LINALG_PREFER_CUSOLVER=1 全局设置首选库为 cuSOLVER。此标志仅设置首选库的初始值,并且首选库仍可能在此函数调用后被脚本中的后续调用覆盖。
注意:当某个库被首选时,如果首选库不实现所调用的操作,仍可能使用其他库。此标志可能会在 PyTorch 的启发式库选择不适合您的应用程序输入时获得更好的性能。
当前支持的线性代数运算符
torch.linalg.eighvals()
- 返回类型
_LinalgBackend
- class torch.backends.cuda.SDPAParams#
- torch.backends.cuda.flash_sdp_enabled()[source]#
警告
此标志为 beta 版,可能会发生变化。
返回 flash scaled dot product attention 是否启用。
- torch.backends.cuda.enable_mem_efficient_sdp(enabled)[source]#
警告
此标志为 beta 版,可能会发生变化。
启用或禁用内存高效的 scaled dot product attention。
- torch.backends.cuda.mem_efficient_sdp_enabled()[source]#
警告
此标志为 beta 版,可能会发生变化。
返回 memory efficient scaled dot product attention 是否启用。
- torch.backends.cuda.enable_flash_sdp(enabled)[source]#
警告
此标志为 beta 版,可能会发生变化。
启用或禁用 flash scaled dot product attention。
- torch.backends.cuda.math_sdp_enabled()[source]#
警告
此标志为 beta 版,可能会发生变化。
返回 math scaled dot product attention 是否启用。
- torch.backends.cuda.enable_math_sdp(enabled)[source]#
警告
此标志为 beta 版,可能会发生变化。
启用或禁用 math scaled dot product attention。
- torch.backends.cuda.fp16_bf16_reduction_math_sdp_allowed()[source]#
警告
此标志为 beta 版,可能会发生变化。
返回 math scaled dot product attention 中的 fp16/bf16 归约是否启用。
- torch.backends.cuda.allow_fp16_bf16_reduction_math_sdp(enabled)[source]#
警告
此标志为 beta 版,可能会发生变化。
启用或禁用 math scaled dot product attention 中的 fp16/bf16 归约。
- torch.backends.cuda.cudnn_sdp_enabled()[source]#
警告
此标志为 beta 版,可能会发生变化。
返回 cuDNN scaled dot product attention 是否启用。
- torch.backends.cuda.enable_cudnn_sdp(enabled)[source]#
警告
此标志为 beta 版,可能会发生变化。
启用或禁用 cuDNN scaled dot product attention。
- torch.backends.cuda.is_flash_attention_available()[source]#
检查 PyTorch 是否已构建用于 scaled_dot_product_attention 的 FlashAttention。
- 返回
如果 FlashAttention 已构建并可用,则返回 True;否则返回 False。
- 返回类型
注意
此函数依赖于启用 CUDA 的 PyTorch 构建。在非 CUDA 环境中将返回 False。
- torch.backends.cuda.can_use_flash_attention(params, debug=False)[source]#
检查是否可以在 scaled_dot_product_attention 中使用 FlashAttention。
- 参数
params (_SDPAParams) – 一个 SDPAParams 实例,包含 query、key、value 张量、可选的 attention mask、dropout 率以及一个指示 attention 是否为 causal 的标志。
debug (bool) – 是否记录 logging.warn 关于为什么无法运行 FlashAttention 的调试信息。默认为 False。
- 返回
如果可以使用 FlashAttention 并满足给定参数,则返回 True;否则返回 False。
- 返回类型
注意
此函数依赖于启用 CUDA 的 PyTorch 构建。在非 CUDA 环境中将返回 False。
- torch.backends.cuda.can_use_efficient_attention(params, debug=False)[source]#
检查是否可以在 scaled_dot_product_attention 中使用 efficient_attention。
- 参数
params (_SDPAParams) – 一个 SDPAParams 实例,包含 query、key、value 张量、可选的 attention mask、dropout 率以及一个指示 attention 是否为 causal 的标志。
debug (bool) – 是否记录 logging.warn 关于为什么无法运行 efficient_attention 的信息。默认为 False。
- 返回
如果可以使用 efficient_attention 并满足给定参数,则返回 True;否则返回 False。
- 返回类型
注意
此函数依赖于启用 CUDA 的 PyTorch 构建。在非 CUDA 环境中将返回 False。
- torch.backends.cuda.can_use_cudnn_attention(params, debug=False)[source]#
检查是否可以在 scaled_dot_product_attention 中使用 cudnn_attention。
- 参数
params (_SDPAParams) – 一个 SDPAParams 实例,包含 query、key、value 张量、可选的 attention mask、dropout 率以及一个指示 attention 是否为 causal 的标志。
debug (bool) – 是否记录 logging.warn 关于为什么无法运行 cuDNN attention 的信息。默认为 False。
- 返回
如果可以使用 cuDNN 并满足给定参数,则返回 True;否则返回 False。
- 返回类型
注意
此函数依赖于启用 CUDA 的 PyTorch 构建。在非 CUDA 环境中将返回 False。
torch.backends.cudnn#
- torch.backends.cudnn.allow_tf32#
一个
bool
,用于控制在 Ampere 或更新的 GPU 上是否可以在 cuDNN 卷积中使用 TensorFloat-32 张量核心。allow_tf32 将被弃用。请参阅 Ampere(及更高版本)设备上的 TensorFloat-32 (TF32)。
- torch.backends.cudnn.deterministic#
一个
bool
,如果为 True,则会导致 cuDNN 只使用确定性卷积算法。另请参阅torch.are_deterministic_algorithms_enabled()
和torch.use_deterministic_algorithms()
。
torch.backends.cusparselt#
torch.backends.mha#
torch.backends.miopen#
- torch.backends.miopen.immediate#
一个
bool
,如果为 True,则会导致 MIOpen 使用 Immediate Mode(https://rocm.docs.amd.com/projects/MIOpen/en/latest/how-to/find-and-immediate.html)。
torch.backends.mps#
torch.backends.mkl#
- class torch.backends.mkl.verbose(enable)[source]#
按需 oneMKL 详细输出功能。
为了更容易地调试性能问题,oneMKL 可以在执行内核时转储包含执行信息的详细消息,例如持续时间。详细输出功能可以通过名为 MKL_VERBOSE 的环境变量调用。但是,这种方法会在所有步骤中转储消息。这些是大量的详细消息。此外,为了调查性能问题,通常只需一个迭代的详细消息就足够了。这种按需详细输出功能使得可以控制详细消息转储的范围。在下面的示例中,详细消息仅在第二次推理时转储。
import torch model(data) with torch.backends.mkl.verbose(torch.backends.mkl.VERBOSE_ON): model(data)
- 参数
level – 详细级别 -
VERBOSE_OFF
:禁用详细输出 -VERBOSE_ON
:启用详细输出
torch.backends.mkldnn#
- class torch.backends.mkldnn.verbose(level)[source]#
按需 oneDNN(前 MKL-DNN)详细输出功能。
为了更容易地调试性能问题,oneDNN 可以在执行内核时转储包含内核大小、输入数据大小和执行时间的详细消息。详细输出功能可以通过名为 DNNL_VERBOSE 的环境变量调用。但是,这种方法会在所有步骤中转储消息。这些是大量的详细消息。此外,为了调查性能问题,通常只需一个迭代的详细消息就足够了。这种按需详细输出功能使得可以控制详细消息转储的范围。在下面的示例中,详细消息仅在第二次推理时转储。
import torch model(data) with torch.backends.mkldnn.verbose(torch.backends.mkldnn.VERBOSE_ON): model(data)
- 参数
level – 详细级别 -
VERBOSE_OFF
:禁用详细输出 -VERBOSE_ON
:启用详细输出 -VERBOSE_ON_CREATION
:启用详细输出,包括 oneDNN 内核创建
torch.backends.nnpack#
torch.backends.opt_einsum#
- torch.backends.opt_einsum.is_available()[source]#
返回一个布尔值,指示 opt_einsum 当前是否可用。
您必须安装 opt-einsum 才能使 torch 自动优化 einsum。要使 opt-einsum 可用,您可以将其与 torch 一起安装:
pip install torch[opt-einsum]
或单独安装:pip install opt-einsum
。如果安装了该软件包,torch 将自动导入并按需使用它。使用此函数检查 opt-einsum 是否已由 torch 安装并正确导入。- 返回类型
- torch.backends.opt_einsum.get_opt_einsum()[source]#
如果 opt_einsum 当前可用,则返回 opt_einsum 包;否则返回 None。
- 返回类型
- torch.backends.opt_einsum.enabled#
一个
bool
,用于控制是否启用 opt_einsum(默认值为True
)。如果启用,torch.einsum 将使用 opt_einsum(https://optimized-einsum.readthedocs.io/en/stable/path_finding.html)以计算最佳收缩路径以获得更快的性能。如果 opt_einsum 不可用,torch.einsum 将回退到从左到右的默认收缩路径。
- torch.backends.opt_einsum.strategy#
一个
str
,用于指定当torch.backends.opt_einsum.enabled
为True
时要尝试的策略。默认情况下,torch.einsum 将尝试“auto”策略,但“greedy”和“optimal”策略也受支持。请注意,“optimal”策略对输入数量是阶乘的,因为它会尝试所有可能的路径。有关更多详细信息,请参阅 opt_einsum 的文档(https://optimized-einsum.readthedocs.io/en/stable/path_finding.html)。