speechbrain.utils.quirks 模块

全局更改和平台/GPU 特定的怪癖(quirks),即变通方法和更合理的默认值,有时是由于平台特定的问题。

作者
  • Sylvain de Langen 2024

总结

函数

allow_tf32

在 CUDA 后端(可能包括 ROCm)上,为 CuDNN 和 matmul 运算符启用 TensorFloat32 支持。

apply_quirks

根据平台应用怪癖(quirks)。

disable_cudnn_benchmarking

禁用 CuDNN 基准测试。

disable_jit_profiling

禁用 JIT 分析,以避免在高度动态形状上出现性能问题。

log_applied_quirks

记录通过 apply_quirks 应用的任何怪癖(quirks)。

参考

speechbrain.utils.quirks.disable_cudnn_benchmarking()[source]

禁用 CuDNN 基准测试。在默认情况下已关闭此功能的平台上,此操作无效。

基准测试启用后,理论上可以通过自动比较某些操作的不同内核来提高卷积性能。

但是,对于每个独特的输入形状,基准测试都必须重新运行,这使得它不适用于高度动态的形状。由于 SpeechBrain 倾向于使用差异很大的形状,而不尝试填充差异,因此保持基准测试开启会严重降低训练性能。

此函数禁用它,因为我们认为在目前不进行基准测试是更合理的默认设置,可以避免性能错误。

截至 PyTorch 2.3.0 版本,CUDA GPU 的默认值为 False,但 HIP GPU 的默认值为 True

HIP 对应于 CuDNN 的是 MIOpen,但它通过相同的 PyTorch API 进行控制。

speechbrain.utils.quirks.disable_jit_profiling()[source]

禁用 JIT 分析,以避免在高度动态形状上出现性能问题。

speechbrain.utils.quirks.allow_tf32()[source]

在 CUDA 后端(可能包括 ROCm)上,为 CuDNN 和 matmul 运算符启用 TensorFloat32 支持。

这允许在较低精度下透明地执行某些操作,即使在使用 fp32 数学且未启用 AMP 时也是如此,否则将不会使用 Tensor Core。TF32 支持累积到 fp32,因此一定程度上缓解了溢出的担忧。

在 NVIDIA GPU 上,自 Ampere 架构(例如 A100)以来此功能可用。

有关更多详细信息,请参阅PyTorch 文档

speechbrain.utils.quirks.KNOWN_QUIRKS = {'allow_tf32': <function allow_tf32>, 'disable_cudnn_benchmarking': <function disable_cudnn_benchmarking>, 'disable_jit_profiling': <function disable_jit_profiling>}

已应用的怪癖(quirks)列表。由 apply_quirks 填充。

speechbrain.utils.quirks.applied_quirks = {'allow_tf32', 'disable_jit_profiling'}

排除的怪癖(quirks)列表。由 apply_quirksSB_DISABLE_QUIRKS 环境变量填充,该变量是一个逗号分隔的要禁用的怪癖列表。

speechbrain.utils.quirks.apply_quirks()[source]

根据平台应用怪癖(quirks)。同时填充 applied_quirks

speechbrain.utils.quirks.log_applied_quirks()[source]

记录通过 apply_quirks 应用的任何怪癖(quirks)。