
conda 环境下 LightGBM 随机崩溃并出现 Intel 与 LLVM OpenMP 同时加载告警怎么解决【免费下载链接】LightGBMA fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.项目地址: https://gitcode.com/GitHub_Trending/li/LightGBM在 conda 环境里使用 LightGBM Python 包时如果训练或预测程序随机崩溃同时日志里出现下面这类告警问题通常出在同一进程里同时加载了两个互相不兼容的 OpenMP 运行时库/root/miniconda/envs/test-env/lib/python3.8/site-packages/threadpoolctl.py:546: RuntimeWarning: Found Intel OpenMP (libiomp) and LLVM OpenMP (libomp) loaded at the same time. Both libraries are known to be incompatible and this can cause random crashes or deadlocks on Linux when loaded in the same Python program. Using threadpoolctl may cause crashes or deadlocks.上面是 LightGBM 官方 FAQ 中给出的文档示例其中的路径、Python 版本和环境名只是示例输出判断时以 Found Intel OpenMP (libiomp) and LLVM OpenMP (libomp) loaded at the same time 这句关键信息为准完整告警的结尾还指向了 threadpoolctl 项目关于多重 OpenMP 冲突的说明文档。依赖threadpoolctl的 Python 包在这种情况下都可能触发这条警告。判断多个 OpenMP 库安装冲突FAQ 对这类随机崩溃或操作系统挂起给出的可能原因是机器上安装了多个 OpenMP 库且它们互相冲突。在 conda 环境里高概率的具体成因是Conda 分发的 Python 带入了 Conda 的numpy包numpy又包含mkl包而它与环境中的系统级 OpenMP 库发生冲突。注意报错中库文件的扩展名会随操作系统变化例如 macOS 上可能出现OMP: Error #15: Initializing libiomp5.dylib, but found libomp.dylib already initialized.这类字样只要含义是第二个 OpenMP 运行时初始化时发现第一个已加载就属于同一类冲突。主路径conda 环境中的 Python 包只从 conda-forge 安装针对使用 LightGBM Python 包 conda 作为包管理器这一组合FAQ 的明确建议是把conda-forge作为所有 Python 包安装的唯一渠道因为该渠道的包内置了规避 OpenMP 冲突的补丁。FAQ 中从 conda 安装 LightGBM 该选哪个渠道一条的结论一致强烈建议从conda-forge安装而不是default渠道。具体操作是在出问题的 conda 环境中用conda-forge渠道重新安装lightgbm及其依赖并保证环境中其他 Python 包也来自同一渠道避免别的渠道再带入独立的 OpenMP 运行时。FAQ 没有给出整段现成命令下面这条是该渠道要求的直接实现包名以你环境里实际需要安装的为准conda install -c conda-forge lightgbm如果环境中还有其他通过default等渠道安装、自带 OpenMP 运行时的包按同样方式改从conda-forge重新安装否则冲突依旧存在。文档中给出的替代方案以下分支只在主路径不适用或你的环境符合其适用条件时使用。移除 Conda 包中的 MKL 优化FAQ 给出的另一条 conda 场景 workaround 是彻底移除 Conda 包中的 MKL 优化conda install nomkl副作用说明该命令会修改当前 conda 环境的包集合可能连带变更numpy等依赖 MKL 优化的包执行前确认环境可重建或已做备份。macOS Homebrew 下处理 OMP Error #15 形式的报错如果告警是OMP: Error #15: Initializing libiomp5.dylib, but found libomp.dylib already initialized.这种形式且环境是 macOS HomebrewFAQ 给出的处理是把 conda 环境目录$CONDA_PREFIX/lib里的 OpenMP 库替换为指向系统级Homebrew 安装库的符号链接或先更新 Conda 里的numpy包。OpenMP 8.0.0 之前可用的命令ln -sf ls -d $(brew --cellar libomp)/*/lib/* $CONDA_PREFIX/lib从 OpenMP 8.0.0 起Homebrew 的 OpenMP formula 带上了-DLIBOMP_INSTALL_ALIASESOFF选项上面的命令不再有效需要手动为库别名创建符号链接for LIBOMP_ALIAS in libgomp.dylib libiomp5.dylib libomp.dylib; do sudo ln -sf $(brew --cellar libomp)/*/lib/libomp.dylib $CONDA_PREFIX/lib/$LIBOMP_ALIAS; done副作用说明这两条命令会向当前激活 conda 环境的$CONDA_PREFIX/lib写入符号链接第二条使用了sudo执行前确认$CONDA_PREFIX指向目标环境、且你理解往该目录写系统库链接的含义。执行前请先conda activate进入目标环境。不属于上述场景时FAQ 对以上情况都不是的兜底结论是自己找出机器上互相冲突的 OpenMP 库安装只保留其中一个。文档没有给出更细的排查顺序因此这一步需要你按实际环境自行定位例如检查各包各自带入了哪个 OpenMP 运行时。修复后如何确认FAQ 把上面这条threadpoolctl警告作为该冲突在日志中的信号所以验证方式是重新运行原本崩溃的脚本检查日志中该警告是否还出现警告不再出现说明进程中不再同时加载 Intel 与 LLVM 两套 OpenMP 运行时警告仍然出现说明两套运行时依旧共存回到只保留一个 OpenMP 库的步骤继续处理。需要提醒的边界文档中这条警告描述的随机崩溃与死锁主要出现在 Linux 上conda-forge渠道建议针对的是 LightGBM Python 包 conda 的组合如果你的环境不符合该前提应以找出冲突的 OpenMP 安装并只留一个为最终依据。【免费下载链接】LightGBMA fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.项目地址: https://gitcode.com/GitHub_Trending/li/LightGBM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考