Python 使用“英特尔MKL”在不同CPU上获得可复制的机器学习结果

Python 使用“英特尔MKL”在不同CPU上获得可复制的机器学习结果,python,numpy,machine-learning,intel-mkl,reproducible-research,Python,Numpy,Machine Learning,Intel Mkl,Reproducible Research,我正在使用conda,python==3.6.8和mkl==2019.1进行一个ML项目。我在英特尔奔腾G4560上设置了种子并多次运行代码,得到了完全相同的结果。但是,在相同的环境下在Intel i5-8257U上运行相同的代码时,从小数点后3/2位开始,得到的结果略有不同。在i5-8257U上,如果我多次运行代码,我会得到相同的结果。G4560运行的是Ubuntu 18.04,而i5-8257U运行的是macOS,我在基于Debian的Docker容器中运行代码 在线阅读了一些内容后,我发现

我正在使用
conda
python==3.6.8
mkl==2019.1
进行一个ML项目。我在英特尔奔腾G4560上设置了种子并多次运行代码,得到了完全相同的结果。但是,在相同的环境下在Intel i5-8257U上运行相同的代码时,从小数点后3/2位开始,得到的结果略有不同。在i5-8257U上,如果我多次运行代码,我会得到相同的结果。G4560运行的是Ubuntu 18.04,而i5-8257U运行的是macOS,我在基于Debian的Docker容器中运行代码

在线阅读了一些内容后,我发现了MKL的再现性标志,并设置了
MKL\u CBWR=SSE4\u 2
MKL\u NUM\u THREADS=1
MKL\u DYNAMIC=FALSE
(因为G4560只支持SSE4.2),但i5-8257U上的结果仍然是旧的


还有其他人经历过同样的事情吗?我正试图找到一种方法,使我的代码在计算机设置中重现。谢谢

您是否使用env变量pythonhasheed=0为python设置种子,并为计算中涉及的所有库(NumPy和ml库)设置种子?是的,我设置了
PTYHONHASHSEED=0
,还为NumPy、python和Tensorflow设置了全局种子。事实上,当在同一台机器上多次运行代码时,结果总是相同的,精确到小数点后7位,这对于我的用例来说已经足够了。