繁体   English   中英

在集群上使用 R 进行内存虚拟化

[英]Memory virtualization with R on cluster

我对并行计算几乎一无所知,所以这个问题可能非常愚蠢,而且可能无法做我想做的事情。

我正在使用具有 40 个节点的 linux 集群,但是由于我不知道如何在 RI 中编写并行代码,因此只能使用一个。 在这个节点上,我试图分析充斥内存(大约 64GB)的数据。 所以我的问题不是缺乏计算能力而是内存限制。

我的问题是,是否甚至可以使用一些 R 包(如 doSnow)进行隐式并行化以使用 2-3 个节点来增加 RAM 限制,或者我是否必须从头开始重写脚本以使其显式并行化?

对不起,如果我的问题很幼稚,欢迎提出任何建议。

谢谢,

西蒙

我不认为有这样的包。 原因是拥有一个没有多大意义。 内存访问速度非常快,相比之下,通过网络从另一台计算机访问数据非常慢。 因此,如果存在这样的包,它几乎没有用,因为处理器需要一直等待网络上的数据,这会使计算变得非常非常缓慢。

对于从现成硬件构建的常见计算集群来说,情况确实如此。 如果您碰巧有一个特殊的集群,远程内存访问速度很快,并且作为操作系统的服务提供,那么当然可能还不错。

否则,您需要做的是尝试手动将问题分成多个部分,然后使用 R 或其他工具并行化。

另一种方法是将一些数据保留在磁盘上,而不是将所有数据都加载到内存中。 在加载另一部分数据之前,您仍然需要(某种)划分问题,以确保内存中的数据部分用于合理的计算时间。

是否值得(或完全可能)执行这些选项中的任何一个,完全取决于您的应用程序。

顺便提一句。 R 中的高性能计算工具列表如下: http : //cran.r-project.org/web/views/HighPerformanceComputing.html

供日后查询:

您可能想看看两个包“snow”和“parallel”。 库“snow”扩展了apply/lapply/sapply...的功能,可以在多个核心和/或一个节点上工作。

当然,您可以使用多个内核执行简单的并行计算:

#SBATCH --cpus-per-task=(在此处输入一些数字)

您还可以使用多个节点(最好使用前面提到的库)执行并行计算:

#SBATCH --ntasks-per-node=(在此处输入一些数字)

但是,对于一些含义,您可能想考虑使用 Python 而不是 R,其中使用“Dask”worker 并行性可以更有效。

您可能想看看 TidalScale,它可以让您聚合集群上的节点,以使用底层节点的集体资源运行单个 Linux 实例。 www.tidalscale.com。 尽管 R 应用程序可能本质上是单线程的,但您将能够为您的 R 应用程序提供跨节点的单一、简单的连贯内存空间,这对您的应用程序是透明的。

祝你的项目好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM