我试着在一个集群上运行一个计算代码。但是从计算机和集群上得到的结果是不同的,集群往往会崩溃。我认为这是因为软件的问题,因此在集群中安装了与计算机相同版本的miniconda。但是,它出现了相同的问题。
更复杂的计算结果在不同的计算机上进行了验证,结果在数值上是一致的,与分析计算结果相匹配。但使用同一个python软件包的集群提供了不同的结果,而且往往会崩溃。
附上了一个例子。
from scipy import integrate
import numpy as np
def integrand(theta, t,theta_1x,theta_2x):
return np.sin(t/2)*np.sin(theta)*np.cos(t/2)**2/np.sqrt(t-b+a)/np.sqrt(b+a-t)*np.sin(theta_1x)/theta_1x/theta_2x;
def theta_integral(t,ax,bx):
return integrate.quad(integrand, bx-ax, t , args=(t,ax,bx,))[0]
b=1.5
a=0.1
integral_result_temp=integrate.quad(theta_integral, b-a,b+a ,args=(a,b,) );
print(integral_result_temp)
该计算机
Python 3.9.12 (main, Apr 4 2022, 05:22:27) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
该集群
Python 3.9.12 (main, Jun 1 2022, 11:38:51)
[GCC 7.5.0] :: Anaconda, Inc. on linux
他们使用了相同版本的软件包
import numpy as np
print(np.__version__)
import scipy as scipy
print(scipy.__version__)
1.21.5
1.7.3
计算机提供了一个结果
(0.07410654702360654, 1.34140350493972e-08)
其中该群集提供了
(0.07410654255620497, 1.1830009194468971e-11)
正如你所看到的,他们的结果已经不同了,实际上超出了不同的方差。
在一个更复杂的集成版本中,计算机能够提供正确的结果,而集群通常失败。
这怎么可能?怎么解决?
相关:What's the difference between Python built by MSC and Python built by GCC?
1条答案
按热度按时间baubqpgj1#
我可以保证你不是在处理一个不精确的浮点运算的问题。这里有一个关于这个主题的问题:
Is floating point math broken?