Tag Archives: 计算密集型

天河这种大型机还有存在的必要吗?

  在知乎上回答了一个问题“有了分布式计算平台后,像天河这种大型机还有存在的必要吗?”

  超级计算机其实也是分布式集群架构,和普通集群很类似,编程模型都是MPI、Mapreduce那一套。稍有不同的是:

  1.超级计算机用infiniband背板提高各节点间的网络IO,常规分布式集群一般都是千兆、万兆网卡。
  2.超级计算机一般会配高档的磁盘阵列,而GFS+Mapreduce方案底层基于挂在各节点上的普通硬盘。
  2.超级计算机会使用更先进的CPU和GPU,更多内存。
  3.由于发热强劲,很多超级计算机采用水冷。

  从这些细节可以看出:

  1.超级计算机更适合计算密集型作业,如果用MPI算核物理、天体物理、蛋白质折叠、渲染《阿凡达》、求解普通PC上需要几千万年的迭代方程,那么就应该用超级计算机。反过来,分布式集群Mapreduce适合IO密集型的作业,加上成本低,可以把集群规模搞得很大,因此最适合扫描过滤海量的数据,例如互联网行业的经典应用:为搜索引擎创建全网Web页面的索引。

  2.超级计算机造价更昂贵,维护成本也高,甚至每小时电费就得上万元。记得我以前做蛋白质搜索引擎的时候,在某台国内最大的超级计算机之一跑过一个80分钟的job,花了老板5000多块上机费(因为我们有项目合作,人家已经给我们打了很低的折扣了)。不过这些作业用MapReduce在普通分布式集群上跑,跑了好几天。

  云计算是建立在廉价分布式硬件+牛B的软件系统设计上,在商业上越来越成功。所以正在抢占传统超级计算机的用户市场。例如阿里云刚刚和国内的动画公司合作渲染出来的《昆塔》,计算量是阿凡达的四倍。不过就我所知,各大传统超算中心其实依然是排队、忙不过来的。随着国内经济的升级,很多造船、石油、材料、生物、天体物理、军事领域的计算需求都很强烈,这一类计算密集型任务,性能和时间往往比成本更重要。

生物数据处理和分布式并行计算

  写一点我对生物信息云计算的粗浅认识。首先,所谓云计算是一个商业模式的概念,其内涵里Saas占很大比重,网络服务代替软件产品。另一方面,技术角度的个人观点,一个Web服务的后台涉及到了大规模分布式并行的基础设施,才有资格被称为“云计算”(当然,这一定义有争议)。这篇Blog先写技术观点,后面再加关于用户和服务的讨论。

  技术上,大规模分布式并行计算被分为计算密集型和数据密集型两类。

  很多物理、地质和气象等领域的科学计算都是典型的计算密集型问题,CPU是瓶颈,涉及到外存I/O量相对不高。对这类问题的解决思路就是传统的“数据找CPU”。具体一点说,目前编程实现的工业标准是MPI,利用MPI提供的Master/Slave模式启动和调度集群上各个节点上的进程,数据传输共享常利用NFS,底层可以用硬件手段提高数据I/O性能。像Fold@home这一类志愿计算项目,往往本质上也是计算密集型的,当然软件架构有所不同。

  而Web领域的计算问题,例如搜索引擎的信息检索,主要是数据密集型问题(或者也称为IO密集型问题),这种情况下,CPU不再稀缺,海量数据的内外存交换的性能成了的焦点。对此MapReduce模式给出了很有效的解决思路,也就是所谓“CPU找数据”。具体来说,Hadoop是目前最热门的主流框架,先对查询对象进行索引,通过分布式文件系统备份到集群各处,再调度相对轻量的进程,分阶段执行查找和归并操作。

  那么有没有这样的需求:输入输出的数据很海量,其处理过程的算法复杂性又很高,很占CPU。有的,例如现代天文学需要对成T甚至成P的哈勃望远镜图片进行搜索过滤……面对这一类的问题,MapReduce模型就不一定适用,其瓶颈出现在海量数据的传输性能上(Web搜索模型里,尽管是数据密集型应用,但被检索的关键词和输出结果是相对很小的,而在很多科学应用里,往集群提交的待查询本身就是海量数据)。Secter/Sphere在其论文和技术报告里总结,它对Hadoop有明显性能优势的原因之一,就是专门开发的底层传输协议UDT比后者使用的通用TCP/IP要高效。

  对Hadoop这个特定产品来说,由于它是Java实现的,相对于C/C++有性能劣势,这个短板对CPU耗费型的应用来说很要命(这也是Secter/Sphere快的另一个原因)。有很多解决方案,例如Yahoo!开发了MPI on Hadoop,用MPI具体负责干活,Hadoop包裹在上层负责宏观调度和容错;而百度实现了Hadoop C++ Extension,把Hadoop里面的关键瓶颈部件都换成了C++的;前不久刚刚发布的Hadoop下一个版本的Roadmap里,也宣布要进行彻底重构,重点解决性能问题。

  生物信息领域,无论是基因测序还是质谱鉴定蛋白,产生出来的数据量巨大,其处理运算又吃CPU。对现有的分布式计算模型是个挑战。其实分布式计算领域,从来都是应用拖着技术走的。例如是物理学家发明了集群运算,是信息检索工业逼出了MapReduce模式。所以,生物领域的挑战也许可以反过来给计算领域一个发展的机会。