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/。
例如,代码是分段的,它对很多人都很好,但在我的情况下却失败了。
为什么会发生?如何解决?
我在 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 优化。
我通过询问 HPC 服务器专家解决了这个问题。也许对 Compute Canada 系统用户有用。
为什么会发生?
此错误是由于 tensorflow 预构建的 Python 轮(特定于 Compute Canada 系统)和 conda 环境之间的冲突造成的。引用:“conda 总是有点问题,因为它下载预编译的二进制文件,里程可能会有所不同......”
如何解决?
正如@abccd 指出的那样,“最好的办法是确保只有一个 OpenMP 运行时链接到进程中”。但是,我还没有想出如何确保这一点。
所以我卸载了 conda,并使用 pip install 在模块系统中安装了所有东西。然后网络工作正常。