论文部分内容阅读
Relion是冷冻电镜图片三维重建的事实标准软件,通过Relion可以还原出被冷冻电镜观测物体的原有结构。冷冻电镜原本得到的二维图片进行三维重建问题的关键在于确定二维图片的位置参数,即角度和距离,即得到的电镜图片是原来标准图片如何旋转和移动得到的,其中角度等参数就是要求的关键。Relion在求这类参数时所使用的算法是一种最大似然估计,通过反复迭代计算优化得到最终的还原结构模型。Relion采用了MPI和Pthread的粗细粒度结合的并行框架。在基于MPI实现多进程的计算框架中,主节点负责分发任务,当计算集群规模扩大到一定规模以后,多个节点频繁请求任务,主节点分发任务就会变的繁忙,成为一个瓶颈。另一方面,MPI本身缺乏容错机制,如果计算任务的某个实例计算失败,则所有实例都需要重新计算,这也大大降低了并行计算效率和可扩展性。值得一提的是,Relion中占绝大部分耗时的最大似然估计算法是一种较为简单的同步并行计算,非常适合移植到现有的Spark计算框架上。在移植到Spark计算框架过程中,为利用Spark特性来支持高性能计算主要做了以下三个方面的工作:利用一个Spark RDD对象产生的DAG实现作业调度,代替原来基于MPI通讯功能的主节点给各工作节点请求式分发任务的调度机制;通过Spark的RDD Shuffle和Broadcast操作代替原来基于MPI通讯功能的数据传递方式;通过JNA调用的C++代码来使用native的BLAS等高性能线性代数计算库,并利用JNA模拟结构体进行跨语言数据传递。经测试,这种将Spark作为粗粒度计算框架的最大似然估计并行化算法具有了很好的容错性,准线性的加速比和可扩展性。与此同时,因为Relion分发的每个小任务的计算量依然巨大,需要利用Pthread、GPU等技术在细粒度并行算法层面进行多线程地计算加速,而这种基于Spark的计算框架简化和模块化了代码结构,所以这项工作也更有利于进一步无冲突的异构计算开发。