【问题标题】:Large RAM Requirements and Clusters/Clouds大型 RAM 需求和集群/云
【发布时间】:2011-11-03 21:37:21
【问题描述】:

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

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

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

感谢您的帮助!

为澄清而编辑:假设上面提到的程序(Velvet/Oases 和 Trinity)需要具有大量 RAM 池的单个系统。简而言之,我正在寻找一种可行的方法将一堆节点“粘贴”到一个虚拟超级节点中,其中单个进程可以访问所有节点的所有 RAM,就像它是一个单一系统一样。我知道这样的事情可能会对性能产生相当大的影响,但我正在寻找可能的东西,但不一定有效。

附言对不起,如果我的术语让事情变得混乱。我对其中的很多内容都有些陌生。

【问题讨论】:

  • AWS 怎么样?也许他们提供的服务的组合可能是一个不错的选择。
  • 据我所知,AWS 也有类似的问题。集群/云的许多小型(无论如何都是中小型)节点,并且没有简单的方法将一些小型节点粘贴到一个大型环境中以运行需要 1TB RAM 的单个线程。
  • 如果您可以添加一些有关要完成的实际处理的注释,那将非常有帮助。更多地描述数据也会有所帮助。

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


【解决方案1】:

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

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

  1. 数据密集型:试试 Hadoop 或 Dryad 或类似的东西。
  2. 进程密集型并在其块之间传递许多消息:尝试 MPI
  3. 包含许多轻量级线程:为您的应用使用 GPGPU。
  4. ....

看看斯坦福大学的RAMCloud project。它在某种程度上是相关的。

【讨论】:

  • 感谢您的帖子。但是当应用程序“可分割成并发块”时呢?想象一下,有问题的应用程序是单线程程序,在单个系统上需要 100GB 以上的 RAM。这就是我提到共享内存分布式操作系统的原因。我当然不是分布式操作系统或 SMP 方面的专家,但我的理解是它们都提供了将多个较小的系统基本上粘贴到单个更大的共享资源池中的能力,然后单个进程可能会访问这些资源?我将编辑我的帖子以反映这种特殊性。
  • 好吧,如您所知,DSM 系统(分布式共享内存)由于在节点之间传输页面而遭受性能不佳的困扰。如您所知,在这些系统中,每个内存页面请求都被捕获以查找其在池中的位置,并且可能需要该页面的网络传输。但它受益于更简单的编程模型,即比分布式更方便的共享内存范式。因此,如果您的应用程序不可分割成不同的部分,我的建议是只推广您的硬件并忘记分布式解决方案,就像您提到的那样。
  • 忘了说,如果你在一个资源池上运行你的应用程序,你将只使用其他节点的内存,而不是它们的处理器或磁盘。因此,将这些额外的内存芯片放在您的主机上而不是将它们分布在您的池中更合乎逻辑
  • 再次感谢您的帖子,您确认了很多我不确定的内容。但问题仍然存在,我们中的许多人可以免费访问数百甚至数千个集群/云节点,而无法访问具有大量 RAM 的单个系统。我可以想象这些程序在未来一两年内在单个系统上需要 1TB 以上的 RAM。完全无视使用类似这样的分布式或虚拟的东西引起的性能抖动,你是说这是不可能的还是以前没有做过?
  • 当然使用 DSM 或类似的东西是可能的,这是毫无疑问的。您可以设置自己的 DSM 系统,这样就可以了。但是让我们通过比较这两种选择来澄清我的话 1) 使用在节点之间共享大量内存的 DSM 2) 使用具有 64G RAM 的单个系统。 --- 在第一种情况下,您应该使用网络来弥补内存不足。在第二种情况下,您应该使用磁盘(虚拟内存)来弥补您的不足。如您所见,在这两种情况下,您都依赖于 I/O,无论是网络还是磁盘。那么,你认为网络比磁盘快吗?我不这么认为
【解决方案2】:

您的问题忽略了要完成的处理的性质。这是特别重要的。例如,每个对象真的是 100GB,还是 100GB 是由许多更小的对象组成的集合?

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

正如您所注意到的,有 MOSIX 或 MPI 等选项,或者您可以查看 memcached 或 memcacheDB,尽管我认为从长远来看这不会很好。在为您的系统排序方面,我建议先进行内存映射,然后是 MPI、MOSIX 和 memcached。

【讨论】:

    【解决方案3】:

    无论如何,不​​要使用 MOSIX 来解决这个问题。 MOSIX 是一个分配 CPU 密集型线程的系统,当您需要大量协作时,它通常不会很好地执行。无论如何,您都必须使用 MPI 才能使用这个大型数据集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多