我对并行计算几乎一无所知,所以这个问题可能很愚蠢,而且可能不可能做我想做的事情。
我使用的是有40个节点的linux集群,但是由于我不知道如何在R中编写并行代码,所以我只能使用一个。在这个节点上,我试图分析内存被淹没的数据(大约64 am )。所以我的问题不是缺乏计算能力,而是内存限制。
我的问题是,是否甚至可以使用一些R包(如doSnow)来进行隐式并行化,使用2-3个节点来增加内存限制,还是需要从地面重写脚本以使其显式并行化?
对不起,如果我的问题太天真,欢迎任何建议。
谢谢,
西蒙
发布于 2014-07-26 05:30:22
我不认为有这样的包裹。原因是这样做没有多大意义。内存访问非常快,从另一台计算机通过网络访问数据的速度与此相比非常慢。因此,如果存在这样一个包,它几乎是无用的,因为处理器需要一直等待网络上的数据,这将使计算非常慢。
这对于从现成硬件构建的普通计算集群来说是正确的.如果您有一个特殊的集群,其中远程内存访问是快速的,并且是作为操作系统的服务提供的,那么它当然不会那么糟糕。
否则,您需要做的是尝试将问题划分为多个部分,手动,然后使用R或其他工具进行并行化。
一种替代方法是将一些数据保存在磁盘上,而不是将所有数据加载到内存中。在加载数据的另一部分之前,您仍然需要(某种程度上)划分问题,以确保内存中的数据部分被用于合理的计算时间。
是否值得(或完全可能)执行这些选项,完全取决于您的应用程序。
顺便说一句。在R中有一个很好的高性能计算工具列表:http://cran.r-project.org/web/views/HighPerformanceComputing.html
发布于 2021-05-18 18:54:48
关于今后的调查:
你可能想看看两个包“雪”和“平行”。库“斯诺”扩展了apply/lapply/sapply的功能.在多个核心和/或一个节点上工作。
当然,您可以使用多个核心执行简单的并行计算:
#SBATCH --cpus每个任务=(在这里输入一些数字)
您还可以使用多个节点(最好使用前面提到的库)执行并行计算:
#SBATCH -n任务-每个节点=(在这里输入一些数字)
但是,考虑到几个方面的含义,您可能想要使用Python而不是R,在这里,使用"Dask“工作人员可以更有效地执行并行。
发布于 2014-09-17 23:42:12
您可能想看看TidalScale,它允许您聚合集群上的节点,使用底层节点的集合资源运行一个Linux实例。www.tidalscale.com。尽管R应用程序可能本质上是单线程的,但是您可以在节点之间为R应用程序提供一个单一的、简单的、连贯的内存空间,这对您的应用程序是透明的。
祝你的项目好运!
https://stackoverflow.com/questions/24967400
复制相似问题