WSL上错误packages/torch/lib/libtorch_cpu.so: undefined symbol: iJIT_NotifyEvent的解决方式
1. 今天在Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/root/anaconda3/envs/mask2former/lib/python3.10/site-packages/torch/init.py", line 235, in <module>
from torch._C import * # noqa: F403
ImportError: /root/anaconda3/envs/mask2former/lib/python3.10/site-packages/torch/lib/libtorch_cpu.so: undefined symbol: iJIT_NotifyEvent
- 官方的
2.1.0 + CUDA 11.8是稳定构建,不会触发iJIT_NotifyEvent; - 反而
2.1.2在部分平台(特别是 Linux/WSL)会引入 oneAPI runtime 依赖。
2. 但是降级后还是报错
你明明用的是 conda install -c pytorch -c nvidia,但是安装结果却还是生成了 .egg-info 文件,而不是 conda 的 .dist-info 目录。
👉 这说明 conda 环境里优先调用了 pip wheel,不是官方的 conda 包。
所以你安装的仍然是 pip 版(Intel oneAPI 依赖),不是你需要的 CUDA build
conda remove -y pytorch torchvision torchaudio pytorch-cuda
pip uninstall -y torch torchvision torchaudio functorch torchgen
rm -rf $CONDA_PREFIX/lib/python3.10/site-packages/torch*
rm -rf $CONDA_PREFIX/lib/python3.10/site-packages/torchaudio*
rm -rf $CONDA_PREFIX/lib/python3.10/site-packages/torchvision*
rm -rf $CONDA_PREFIX/lib/python3.10/site-packages/functorch*
rm -rf $CONDA_PREFIX/lib/python3.10/site-packages/torchgen*
# 关键:强制 conda 使用 strict 模式
conda config set channel_priority strict
# 再重新安装
conda install -y pytorch=2.1.0 torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
3. numpy降级后,又报错
😮 现在又回到了 iJIT_NotifyEvent 的老问题,说明什么?
👉 你在降级 NumPy 的时候,Conda 顺便 升级了 MKL / Intel OpenMP(intel-openmp 和 mkl 都被更新到 2025 版本)。
这些新 Intel 库又把 PyTorch 拉回去依赖 OneAPI runtime,所以重新触发了 iJIT_NotifyEvent 错误。
🔍 问题关键
- PyTorch 官方 CUDA build 并不需要
iJIT_NotifyEvent; - 但当
conda安装了新版 mkl / intel-openmp 时,PyTorch 会优先链接这些库 → 导致报错。
最后成功方式:
# 降级 numpy,但避免 mkl
conda install -y "numpy<2" nomkl
你现在遇到的各种 "mkl" / "intel-openmp" / "openblas",其实都是 数值计算库(数学加速库)。PyTorch、NumPy、SciPy 这些科学计算框架,很多底层矩阵运算都依赖它们。
我来给你分清楚:
🔢 三大主要数学库
1. Intel MKL (Math Kernel Library)
- 由 Intel 开发,专门优化了 Intel CPU 的矩阵、向量运算。
- 优点:在 Intel CPU 上速度通常最快。
- 缺点:
- 依赖 Intel OneAPI runtime(比如
libiomp5.so,iJIT_NotifyEvent就是这里来的)。 - 在非 Intel CPU 或者 WSL 环境下,可能会冲突、报错。
- 依赖 Intel OneAPI runtime(比如
2. OpenBLAS
- 一个开源的 BLAS/LAPACK 实现。
- 优点:
- 不依赖 Intel 的库 → 兼容性更好。
- 在 AMD CPU、ARM CPU、WSL 里通常比 MKL 更稳定。
- 缺点:在 Intel CPU 上,性能可能比 MKL 稍弱一些。
3. Intel OpenMP (intel-openmp)
- OpenMP 是并行计算框架,Intel 提供了自己的实现。
- MKL 默认用 Intel OpenMP 作为并行后端。
- 问题:
- 如果 PyTorch/NumPy 链接到了 Intel OpenMP,就会需要 OneAPI runtime。
- 这就是你看到的
undefined symbol: iJIT_NotifyEvent错误。
🔍 为什么你遇到问题?
- 你的 PyTorch CUDA 版本本来是 不需要 Intel 库 的。
- 但 conda 在解决依赖的时候,给 NumPy 安装了 MKL 版本(带上了
mkl和intel-openmp)。 - PyTorch 在运行时就优先链接这些库 → 然后报
iJIT_NotifyEvent错误。
✅ 解决思路
- 如果你只想跑 GPU(CUDA),完全没必要用 MKL。
- 最稳定的方案是:用 OpenBLAS + nomkl,这样就绕开 Intel 库。
- Conda 里有一个特别的虚拟包叫
nomkl,它的作用就是告诉 conda:别装 MKL,用 OpenBLAS。
更多推荐
所有评论(0)