torch.backends
torch.backends 控制 PyTorch 支持的不同后端的行为。
-
torch.backends.cpu
-
torch.backends.cuda
-
torch.backends.cudnn
-
torch.backends.cusparse
-
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()[源代码]
-
返回 PyTorch 是否是带 CUDA 支持构建的。
需要注意的是,这并不一定表示CUDA可用;只是说,如果在配备正常工作的CUDA驱动程序和设备的机器上运行此PyTorch二进制文件,我们就能使用它。
- torch.backends.cuda.matmul.allow_tf32
-
一个
bool
,用于控制在安培或更新的GPU上进行矩阵乘法时是否可以使用TensorFloat-32张量核心。参见安培(及以后)设备上的TensorFloat-32 (TF32)。
- torch.backends.cuda.matmul.allow_fp16_reduced_precision_reduction
-
一个
bool
值,用于控制是否允许使用 fp16 精度的矩阵乘法(例如,具有 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.size
-
一个只读的
int
,表示当前 cuFFT 计划缓存中计划的数量。
- torch.backends.cuda.cufft_plan_cache.max_size
-
一个用于控制 cuFFT 计划缓存容量的
int
。
- torch.backends.cuda.cufft_plan_cache.clear()
-
清除cuFFT计划缓存。
- torch.backends.cuda.preferred_blas_library(backend=None)[源代码]
-
更改 PyTorch 进行 BLAS 操作所使用的库,可以选择 cuBLAS 或 cuBLASLt。
警告
此标志是试验性的,可能随时发生变化。
当 PyTorch 运行 CUDA BLAS 操作时,默认情况下会使用 cuBLAS,即使 cuBLAS 和 cuBLASLt 都可用。对于针对 ROCm 构建的 PyTorch,hipBLAS 和 hipBLASLt 可能提供不同的性能表现。此标志(一个
str
)允许指定要使用的 BLAS 库。-
如果设置了“cublas”,则会在可能的情况下使用cuBLAS。
-
如果设置了"cublaslt",则会在可能的情况下使用cuBLASLt。
-
如果没有输入,该函数将返回当前首选的库。
-
用户可以使用环境变量 TORCH_BLAS_PREFER_CUBLASLT=1 将首选库全局设置为 cuBLASLt。这个标志只设置了首选库的初始值,但该首选库可能会被脚本中后续的函数调用所覆盖。
注意:即使优先使用某个库,如果该库未实现所需操作,也可以使用其他库。当 PyTorch 选择的库不适合你的应用输入时,这个标志可能会提高性能。
- 返回类型
-
_BlasBackend
-
- torch.backends.cuda.preferred_linalg_library(backend=None)[源代码]
-
覆盖 PyTorch 在 CUDA 线性代数操作中选择 cuSOLVER 和 MAGMA 的启发式算法。
警告
此标志是试验性的,可能随时发生变化。
当 PyTorch 运行 CUDA 线性代数操作时,它通常会使用 cuSOLVER 或 MAGMA 库。如果两者都可用,PyTorch 会通过启发式方法来决定使用哪个库。此标志(一个
str
)允许覆盖这些启发式方法。-
如果设置了"cusolver",则会在可能的情况下使用cuSOLVER。
-
如果设置了"magma",则尽可能使用MAGMA。
-
如果设置为"default"(默认值),则会在 cuSOLVER 和 MAGMA 都可用时,通过启发式方法来选择其中之一。
-
如果没有输入,该函数将返回当前首选的库。
-
用户可以使用环境变量 TORCH_LINALG_PREFER_CUSOLVER=1 将默认的首选库全局设置为 cuSOLVER。此标志仅设置首选库的初始值,但该首选库仍可能被脚本中稍后的函数调用覆盖。
注意:即使优先使用某个库,如果该库未实现所需操作,也可以使用其他库。此标志可能在 PyTorch 自动选择的库不适合你应用输入时提高性能。
当前支持的线性代数操作符:
-
torch.linalg.eighvals()
- 返回类型
-
_LinalgBackend
-
- 类torch.backends.cuda.SDPAParams
- torch.backends.cuda.flash_sdp_enabled()[源代码]
-
警告
此标志为测试版,可能随时更改。
返回是否启用了 flash 缩放点积注意力。
- torch.backends.cuda.enable_mem_efficient_sdp(enabled)[源代码]
-
警告
此标志为测试版,可能随时更改。
开启或关闭内存高效的缩放点积注意力。
- torch.backends.cuda.mem_efficient_sdp_enabled()[源代码]
-
警告
此标志为测试版,可能随时更改。
返回是否开启了内存高效的缩放点积注意力。
- torch.backends.cuda.enable_flash_sdp(enabled)[源代码]
-
警告
此标志为测试版,可能随时更改。
启用或禁用缩放点积注意力。
- torch.backends.cuda.math_sdp_enabled()[源代码]
-
警告
此标志为测试版,可能随时更改。
返回是否开启了数学缩放点积注意力。
- torch.backends.cuda.enable_math_sdp(enabled)[源代码]
-
警告
此标志为测试版,可能随时更改。
开启或关闭数学缩放点积注意力。
- torch.backends.cuda.fp16_bf16_reduction_math_sdp_allowed()[源代码]
-
警告
此标志为测试版,可能随时更改。
返回是否启用了数学缩放点积注意力中的 fp16/bf16 减少功能。
- torch.backends.cuda.allow_fp16_bf16_reduction_math_sdp(enabled)[源代码]
-
警告
此标志为测试版,可能随时更改。
启用或禁用数学缩放点积注意力中的 fp16/bf16 减量。
- torch.backends.cuda.cudnn_sdp_enabled()[源代码]
-
警告
此标志为测试版,可能随时更改。
返回是否启用 cuDNN 缩放点积注意力。
- torch.backends.cuda.enable_cudnn_sdp(enabled)[源代码]
-
警告
此标志为测试版,可能随时更改。
开启或关闭cuDNN缩放点积注意力。
- torch.backends.cuda.is_flash_attention_available()[源代码]
-
检查 PyTorch 是否在构建时启用了 FlashAttention 来支持 scaled_dot_product_attention。
- 返回值
-
如果是构建并可用的FlashAttention,则值为True;否则为False。
- 返回类型
注意
此函数需要在支持CUDA的PyTorch环境下运行。在不支持CUDA的环境中,该函数将返回False。
- torch.backends.cuda.can_use_flash_attention(params, debug=False)[源代码]
-
检查是否可以在 scaled_dot_product_attention 中使用 FlashAttention。
- 参数
-
-
params (_SDPAParams) – 一个包含查询、键和值张量,可选的注意力掩码,dropout 率以及表示是否为因果关系标志的 SDPAParams 实例。
-
debug (bool) – 是否记录调试信息,以说明为何无法运行FlashAttention。默认值为False。
-
- 返回值
-
如果给定的参数可以使用FlashAttention,则返回真;否则返回假。
- 返回类型
注意
此函数需要在支持CUDA的PyTorch环境下运行。在不支持CUDA的环境中,该函数将返回False。
- torch.backends.cuda.can_use_efficient_attention(params, debug=False)[源代码]
-
检查是否可以在scaled_dot_product_attention中使用efficient_attention。
- 参数
-
-
params (_SDPAParams) – 一个包含查询、键和值张量,可选的注意力掩码,dropout 率以及表示是否为因果关系标志的 SDPAParams 实例。
-
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)[源代码]
-
检查是否可以使用cudnn_attention来替代scaled_dot_product_attention。
- 参数
-
-
params (_SDPAParams) – 一个包含查询、键和值张量,可选的注意力掩码,dropout 率以及表示是否为因果关系标志的 SDPAParams 实例。
-
debug (bool) – 是否记录警告信息以说明为何无法运行cuDNN注意力机制。默认值为False。
-
- 返回值
-
如果给定的参数可以与cuDNN一起使用,则返回真;否则返回假。
- 返回类型
注意
此函数需要在支持CUDA的PyTorch环境下运行。在不支持CUDA的环境中,该函数将返回False。
- torch.backends.cuda.sdp_kernel(enable_flash=True, enable_math=True, enable_mem_efficient=True, enable_cudnn=True)[源代码]
-
警告
此标志为测试版,可能随时更改。
此上下文管理器可以用来暂时启用或禁用三种后端中的任意一个,用于缩放点积注意力计算。在退出上下文管理器之后,之前的状态将会被恢复。
torch.backends.cudnn
- torch.backends.cudnn.version()[源代码]
-
显示 cuDNN 的版本。
- torch.backends.cudnn.is_available()[源代码]
-
返回一个布尔值,指示当前是否可以使用CUDNN。
- torch.backends.cudnn.enabled
-
一个
bool
,用于控制是否启用 cuDNN。
- torch.backends.cudnn.allow_tf32
-
一个
bool
,用于控制在安培或更新的GPU上cuDNN卷积中是否可以使用TensorFloat-32张量核心。参见安培(及以后)设备上的TensorFloat-32 (TF32)。
- torch.backends.cudnn.deterministic
-
一个
bool
,如果为 True,则会导致 cuDNN 仅使用确定性的卷积算法。参见torch.are_deterministic_algorithms_enabled()
和torch.use_deterministic_algorithms()
。
- torch.backends.cudnn.benchmark
-
一个
bool
,如果为True
,则会使得cuDNN对多个卷积算法进行基准测试,并选择其中最快的算法。
- torch.backends.cudnn.benchmark_limit
-
一个整数(
int
),用于指定在torch.backends.cudnn.benchmark为真时尝试的最大cuDNN卷积算法数量。将benchmark_limit设置为零以尝试所有可用的算法。需要注意的是,此设置仅影响通过cuDNN v8 API分发的卷积。
torch.backends.cusparseLt
torch.backends.mha
- torch.backends.mha.get_fastpath_enabled()[源代码]
-
返回是否启用了 TransformerEncoder 和 MultiHeadAttention 的快速路径。如果 jit 处于脚本模式,则返回
True
。- 提示:
-
即使
get_fastpath_enabled
返回True
,如果所有输入条件不满足,快速路径也不会运行。
- 返回类型
- torch.backends.mha.set_fastpath_enabled(value)[源代码]
-
设置是否开启快速路径
torch.backends.mps
torch.backends.mkl
- torch.backends.mkl.is_available()[源代码]
-
返回 PyTorch 是否支持 MKL(数学核心函数库)。
- 类torch.backends.mkl.verbose(enable)[源代码]
-
按需的一MKL详尽输出功能。
为了方便调试性能问题,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
- torch.backends.mkldnn.is_available()[源代码]
-
返回 PyTorch 是否使用 MKL-DNN 构建。
- 类torch.backends.mkldnn.verbose(level)[源代码]
-
按需启用 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.nnpack.is_available()[源代码]
-
返回 PyTorch 是否具备 NNPACK 支持。
- torch.backends.nnpack.flags(enabled=False)[源代码]
-
用于管理全局启用或禁用nnpack的上下文管理器
- torch.backends.nnpack.set_flags(_enabled)[源代码]
-
设置是否全局启用 NNPACK
torch.backends.openmp
- torch.backends.openmp.is_available()[源代码]
-
返回 PyTorch 是否支持 OpenMP。
torch.backends.opt_einsum
- 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)。