大RAM要求和群集/云

时间:2011-08-25 17:15:02

标签: cloud distributed-computing bioinformatics cluster-computing smp

这确实是一个生物信息学问题,但我会尽我所能。这是半假设的情况:

假设我可以访问群集甚至是云。我想在这个集群/云上运行一些非常具体的程序(确切地说是基因组/转录组装程序)。问题是我希望这些程序(Velvet / Oases,Trinity,无论如何)需要大量的RAM,保守地100GB +,而我的集群/云上最大的节点只有32GB。

现在除了切换到基于MPI / Hadoop的程序(ABySS或诸如此类),编写自己的程序或购买新计算机之外,我还有哪些可行的选择?有没有人尝试在群集/云的多个节点上使用分布式操作系统(MOSIX,Kerrighed,...)和共享内存?虚拟SMP怎么样?还有什么?

感谢您的帮助!

编辑以澄清:我们还要说上面提到的程序(Velvet / Oases和Trinity)需要一个具有大量RAM的单个系统。在坚果壳中,我正在寻找一种可行的方法将一堆节点“粘贴”到一个虚拟超级节点中,其中单个进程可以从所有节点访问所有RAM,就像它是单个系统一样。我知道任何类似这样的事情都可能会带来相当大的性能影响,但我正在寻找可能的,但不一定有效的东西。

P.S。对不起,如果我的术语令人困惑。我对这很多很新。

3 个答案:

答案 0 :(得分:2)

这完全取决于您的应用程序的性质。切换到Hadoop,MPI,MOSIX或VSMP可能无法解决您的问题,因为当您可以将应用程序划分为并发执行块时,这些技术很有用。

现在,如果您的应用程序可分区为并发块,请选择最适合您需求的软件技术。否则,建议升级硬件。如果您的应用程序选择软件技术:

  1. 数据密集型:尝试Hadoop或Dryad或类似的东西。
  2. 是流程密集型并在其块之间传递许多消息:尝试MPI
  3. 包含许多轻量级线程:为您的应用程序使用GPGPU。
  4. ....
  5. 看看斯坦福大学的RAMCloud project。它有点相关。

答案 1 :(得分:1)

您的问题忽略了要完成的处理的性质。这一点尤为重要。例如,每个对象真的是100GB,还是100GB是一个尺寸小得多的对象的集合?

尽管如此,在解决一般性问题时,我经常在内存映射文件中使用100GB +数据集。如果学习如何进行内存映射,您可能会发现这是一个非常简单的路径。更重要的是,如果数据在一个地方,那么一个简单的方法是使用NFS,然后多个系统可以同时访问相同的数据。无论如何,内存映射通常很容易编织到现有程序中,特别是与管理网格周围数据块的移动相比。

正如您所说,有一些选项,如MOSIX或MPI,或者您可以查看memcached或memcacheDB,但我认为从长远来看这不会很好。就系统的排序而言,我首先推荐内存映射,然后是MPI,MOSIX和memcached。

答案 2 :(得分:0)

在任何情况下,请勿使用MOSIX来解决此问题。 MOSIX是一个分配CPU密集型线程的系统,通常在需要大量协作时性能不佳。无论如何,您必须使用MPI来使用这个大型数据集。