我正在使用
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.
我有以下问题:
我熟悉通过 python 的
warnings
模块处理警告。但是,这在这里没有帮助,因为警告来自 OpenBLAS
,它不是 python 库。
还有其他几个关于如何解决导致此警告的问题,例如这里和这里。我的问题是了解警告的来源,决定我是否关心它,如果我不关心就压制它。
预先感谢您对上述问题的任何提示或答案。如果这些是愚蠢或表述不当的问题,我深表歉意,因为我完全不熟悉
OpenBLAS
和OpenMP
。
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/34 和 https://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 即可。