当使用pytorch 多卡训练时可能会报错
mkl-service Intel(R) MKL MKL_THREADING_LAYER=INTEL is incompatible ...
,本文记录解决方案。
问题原因
出现问题的条件
- 在 pytorch 1.5 以上的版本
- 在多卡训练
- 在import torch 在 import numpy 之前
原因
如果在 numpy 之前导入了 torch,那么这里的子进程将获得一个 GNU 线程层(即使父进程没有定义变量)
但是如果 numpy 在 Torch 之前被导入,子进程将获得一个 INTEL 线程层,这种情况会导致线程之间打架
- 错误信息
Error: mkl-service Intel® MKL: MKL_THREADING_LAYER=INTEL is incompatible with libgomp.so.1 library. Try to import numpy first or set the threading layer accordingly. Set MKL_SERVICE_FORCE_INTEL to force it.
解决方案
方案一
降级pytorch
- 降级 pytorch 到1.5 一下
方案二
谁会接受降级啊
使用单卡训练
方案三
单卡batch size 不够大啊
- 在python 程序入口 import numpy
- 可以极大程度上减少 error 信息输出
方案四
正儿八经的
- 在环境变量添加
'MKL_SERVICE_FORCE_INTEL' = '1'
代码语言:javascript复制Linux 中
export MKL_SERVICE_FORCE_INTEL=1
可以使得程序继续运行,但错误信息还是会报
- 再加入
'MKL_THREADING_LAYER' = 'GNU'
据说可以避免报错
- 可以查看原始 issues
参考资料
- https://github.com/pytorch/pytorch/issues/37377
- https://blog.csdn.net/qq_40246742/article/details/117898715