Tensorflow OMP:训练时出现错误#15

时间:2018-04-17 14:24:27

标签: python tensorflow parallel-processing openmp

我在CentOS HPC上使用tensorflow训练我的神经网络。但是我在训练过程开始时遇到了这个错误:

OMP:错误#15:初始化libiomp5.so,但发现libiomp5.so已经初始化。 OMP:提示:这意味着OpenMP运行时的多个副本已链接到该程序中。这很危险,因为它会降低性能或导致错误的结果。最好的办法是确保只有一个OpenMP运行时链接到进程中,例如避免在任何库中静态链接OpenMP运行时。作为不安全,不受支持,未记录的变通方法,您可以将环境变量KMP_DUPLICATE_LIB_OK = TRUE设置为允许程序继续执行,但这可能会导致崩溃或无声地产生不正确的结果。有关详细信息,请参阅http://www.intel.com/software/products/support/

代码是例如分段,它适用于许多人,但在我的情况下失败了。

为什么会这样?怎么解决?

4 个答案:

答案 0 :(得分:5)

在macOS上,我遇到了类似的问题,并显示了相同的错误消息(see this question),发现以下原因:

问题:

我有一个conda环境,其中安装了Numpy,SciPy和TensorFlow。

Conda正在使用英特尔®MKL优化,请参阅docs

Anaconda已将一些最受欢迎的数字/科学Python库的MKL驱动的二进制版本打包到MKL Optimizations中,以提高性能。

英特尔MKL功能(例如FFT,LAPACK,BLAS)采用OpenMP技术。

但是在macOS上,您不需要MKL,因为Accelerate Framework附带了自己的优化算法,并且已经在使用OpenMP。这就是错误消息的原因:OMP Error #15: ...

解决方法

您应该安装所有没有MKL支持的软件包:

conda install nomkl

然后使用

conda install numpy scipy pandas tensorflow

之后

conda remove mkl mkl-service

有关更多信息,请参见conda MKL Optimizations

答案 1 :(得分:4)

我通过询问HPC服务器专家解决了这个问题。也许对Compute Canada系统用户有用。

为什么会发生?

此错误是由于张量流预先构建的Python轮(特定于Compute Canada系统)与conda环境之间的冲突造成的。 引用:“conda总是有点问题,因为它下载预编译的二进制文件,里程可能会有所不同......”

如何解决?

正如@abccd指出的那样“最好的办法是确保只有一个OpenMP运行时链接到进程中”。但是,我还没弄清楚如何确保这一点。

所以我卸载了conda,并使用pip install在模块系统中安装所有内容。然后网络工作正常。

答案 2 :(得分:2)

我通过添加消息来解决:

import os    
os.environ['KMP_DUPLICATE_LIB_OK']='True'

答案 3 :(得分:0)

使用Anaconda只需将我的TensorFlow版本降级即可。