我在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/。
代码是例如分段,它适用于许多人,但在我的情况下失败了。
为什么会这样?怎么解决?
答案 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版本降级即可。