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

Kun*_*Shi 4 python parallel-processing openmp tensorflow

我正在 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/

例如,代码是分段的,它对很多人都很好,但在我的情况下却失败了。

为什么会发生?如何解决?

J.E*_*E.K 6

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

问题:

我有一个安装了 Numpy、SciPy 和 TensorFlow 的 conda 环境。

Conda 正在使用 Intel(R) MKL 优化,请参阅文档

Anaconda 已将一些最流行的数值/科学 Python 库的 MKL 驱动的二进制版本打包到 MKL 优化中,以提高性能。

英特尔 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 优化


Kun*_*Shi 5

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

为什么会发生?

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

如何解决?

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

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