识别 OpenBLAS 和 OpenMP 警告的来源并理解它

问题描述 投票:0回答:1

我正在使用

pytorch
pytorch-lightning
segmentation-models-pytorch
开发深度学习模型。当我运行
pytorch_lightning.Trainer.fit()
时,我收到数百条以下警告:

OpenBLAS Warning : Detect OpenMP Loop and this application may hang. Please rebuild the library with USE_OPENMP=1 option.

我有以下问题:

  1. 如何确定我的代码或源代码的哪一部分引发了此警告?
  2. 我如何评估此警告是否相关或可以忽略?
  3. 如果我决定忽略该警告,如何抑制该警告?

我熟悉通过 python 的

warnings
模块处理警告。但是,这在这里没有帮助,因为警告来自
OpenBLAS
,它不是 python 库。

还有其他几个关于如何解决导致此警告的问题,例如这里这里。我的问题是了解警告的来源,决定我是否关心它,如果我不关心就压制它。

预先感谢您对上述问题的任何提示或答案。如果这些是愚蠢或表述不当的问题,我深表歉意,因为我完全不熟悉

OpenBLAS
OpenMP

python openmp warnings pytorch-lightning openblas
1个回答
0
投票

OpenBLAS 是一个低级库,提供(大多数(如果不是全部))线性代数运算的快速实现,而 OpenMP 提供了在共享内存机器上进行并行计算的原语。

Pytorch 以及其他机器学习/科学计算库使用一个或两个库。例如,Numpy 基于 openBLAS,保证非常快速的矩阵运算,scikit-learn 使用 OpenMP 来执行并行作业。

一个问题是 OpenBLAS 是使用 OpenMP 构建的。数值计算库需要构建特定版本的 OpenBLAS(OpenMP 的某些特定构建配置),这可能与其他也可能依赖于 OpenMP 进行构建的库发生冲突。

以下是有关如何跨不同软件包发行版管理这些依赖项的更多信息:https://pypackaging-native.github.io/key-issues/native-dependency/blas_openmp/

根据同一来源,PyTorch 使用 OpenMP,但没有明确指定要使用哪个 openMP 实例或如何使用它。这与其他多线程库冲突,并可能导致构建问题。

在您的情况下,OpenBLAS 发出的警告意味着 openBLAS 检测到多个 OpenMP 线程,这是意外的(请参阅 https://github.com/open-ce/pytorch-feedstock/issues/34https://github.com)。 com/pytorch/pytorch/issues/52047,https://github.com/OpenMathLib/OpenBLAS/issues/2197)。

提出从 PyTorch 方面解决此问题的解决方案(因为这是我们案例中的根本原因)是告诉 PyTorch 使用另一个可用的并行计算依赖项,称为 TBB(请参阅 https://pytorch.org/docs/稳定/笔记/cpu_threading_torchscript_inference.html)。构建 Torch 时设置 USE_TBB=1 即可。

© www.soinside.com 2019 - 2024. All rights reserved.