torch.backends¶
torch.backends 控制 PyTorch 支持的各种后端的行为。
这些后端包括:
torch.backends.cputorch.backends.cudatorch.backends.cudnntorch.backends.mpstorch.backends.mkltorch.backends.mkldnntorch.backends.openmptorch.backends.opt_einsumtorch.backends.xeon
torch.backends.cpu¶
torch.backends.cuda¶
- torch.backends.cuda.is_built()[source]¶
返回 PyTorch 是否具有 CUDA 支持。
请注意,这并不一定意味着 CUDA 可用;只是说如果在这个具有正常工作 CUDA 驱动程序和设备的机器上运行此 PyTorch 二进制文件,我们将能够使用它。
- torch.backends.cuda.matmul.allow_tf32¶
一个
bool,用于控制在Ampere或更新的GPU上进行矩阵乘法时是否可以使用TensorFloat-32张量核心。请参阅 Ampere(及以后)设备上的TensorFloat-32 (TF32)。
- torch.backends.cuda.matmul.allow_fp16_reduced_precision_reduction¶
一个
bool,用于控制是否允许使用fp16精度的归约(例如,具有fp16累加类型的归约)与fp16 GEMM结合。
- torch.backends.cuda.matmul.allow_bf16_reduced_precision_reduction¶
一个
bool,用于控制是否允许使用bf16 GEMMs进行精度降低的计算。
- torch.backends.cuda.cufft_plan_cache¶
cufft_plan_cache包含每个 CUDA 设备的 cuFFT 计划缓存。 查询特定设备 i 的缓存通过 torch.backends.cuda.cufft_plan_cache[i]。- torch.backends.cuda.cufft_plan_cache.clear()¶
清除 cuFFT 计划缓存。
- torch.backends.cuda.preferred_linalg_library(backend=None)[source]¶
覆盖 PyTorch 选择在 CUDA 线性代数运算中使用 cuSOLVER 和 MAGMA 的启发式方法。
警告
此标志为实验性质,可能会发生变化。
当 PyTorch 运行一个 CUDA 线性代数操作时,它通常会使用 cuSOLVER 或 MAGMA 库,并且如果两者都可用,它会根据启发式方法决定使用哪个库。此标志(值为
str)允许覆盖这些启发式方法。如果设置为“cusolver”,则在可能的情况下使用cuSOLVER。
如果设置为“magma”,则在可能的情况下会使用MAGMA。
如果设置为“default”(默认值),则在 cuSOLVER 和 MAGMA 都可用时,将使用启发式方法进行选择。
在没有输入的情况下,此函数返回当前首选的库。
用户可以使用环境变量 TORCH_LINALG_PREFER_CUSOLVER=1 来全局设置首选库为 cuSOLVER。 此标志仅用于设置首选库的初始值,随后在脚本中的函数调用可能会覆盖该首选库。
注意:当优先选择某个库时,如果该优先库未实现所需的操作,仍可使用其他库。 此标志在 PyTorch 的启发式库选择对应用程序输入不正确的情况下,可能会获得更好的性能。
当前支持的线性代数运算符:
torch.linalg.eighvals()
- Return type
_LinalgBackend
- torch.backends.cuda.SDPBackend¶
...的别名
_SDPBackend
- torch.backends.cuda.SDPAParams¶
...的别名
_SDPAParams
- torch.backends.cuda.enable_mem_efficient_sdp(enabled)[source]¶
警告
此标志处于测试阶段,可能会发生变化。
启用或禁用内存高效的缩放点积注意力。
- torch.backends.cuda.can_use_flash_attention(params, debug=False)[source]¶
检查 FlashAttention 是否可以用于缩放点积注意力。
- Parameters
params (_SDPAParams) – 一个_SDPAParams实例,包含查询、键、值的张量, 一个可选的注意力掩码、dropout率, 以及一个标志表示注意力是否为因果型。
调试 (布尔值) – 是否记录为何FlashAttention无法运行的调试信息。 默认为 False。
- Returns
如果给定参数可以使用FlashAttention,则为真;否则为假。
- Return type
注意
此功能依赖于支持 CUDA 的 PyTorch 构建。在非 CUDA 环境中,它将返回 False。
- torch.backends.cuda.can_use_efficient_attention(params, debug=False)[source]¶
检查 efficient_attention 是否可以用于 scaled_dot_product_attention。
- Parameters
params (_SDPAParams) – 一个_SDPAParams实例,包含查询、键、值的张量, 一个可选的注意力掩码、dropout率, 以及一个标志表示注意力是否为因果型。
调试 (布尔值) – 是否使用日志记录.warn 记录有关为什么无法运行 efficient_attention 的信息。 默认为 False。
- Returns
如果给定参数可以使用 efficient_attention,则为 True;否则为 False。
- Return type
注意
此功能依赖于支持 CUDA 的 PyTorch 构建。在非 CUDA 环境中,它将返回 False。
torch.backends.cudnn¶
- torch.backends.cudnn.allow_tf32¶
一个
bool,用于控制在Ampere或更新的GPU上cuDNN卷积中可以使用TensorFloat-32张量核心的位置。请参阅 Ampere(及以后)设备上的TensorFloat-32 (TF32)。
- torch.backends.cudnn.deterministic¶
如果为 True,则会导致 cuDNN 只使用确定性的卷积算法的
bool。 另请参见torch.are_deterministic_algorithms_enabled()和torch.use_deterministic_algorithms()。
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)
- Parameters
级别 – 详细程度级别 -
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)
- Parameters
级别 – 详细程度级别 -
VERBOSE_OFF:禁止详细信息输出 -VERBOSE_ON:启用详细信息输出 -VERBOSE_ON_CREATION:启用详细信息输出,包括oneDNN内核创建
torch.backends.opt_einsum¶
- torch.backends.opt_einsum.enabled¶
A :class:
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¶
A :class:
strthat specifies which strategies to try whentorch.backends.opt_einsum.enabledisTrue. By default, torch.einsum will try the “auto” strategy, but the “greedy” and “optimal” strategies are also supported. Note that the “optimal” strategy is factorial on the number of inputs as it tries all possible paths. See more details in opt_einsum’s docs (https://optimized-einsum.readthedocs.io/en/stable/path_finding.html).