干货攻略:如何将手中20多台旧电脑,搭建成计算机集群
在科技飞速发展的今天,我们常常追求更强大的计算能力,以应对日益复杂的科学计算任务。而计算集群,作为一种能够联合多台计算机计算能力的解决方案,逐渐走进了人们的视野。然而,计算集群并非适用于所有场景,它有着特定的应用领域和局限性。
一、确认组建计算集群的需求
在决定踏上组建计算集群的征程之前,我们首先要冷静思考,自己是否真的需要它。除了要确保有足够的资源来搭建集群外,还得确定你的计算任务是否与计算集群完美契合。
一般来说,适合在计算集群上运行的计算任务有以下几个基本特点:
计算量较大:如果一个计算任务在单个普通民用计算机上运行所需的时间长得让人难以忍受,那它就可能适合计算集群。比如某些有限元、有限差分和有限体积法求解的 PDE 问题,在普通民用计算机上可能需要 100 天才能完成一次计算,而搬上计算集群若能加速 10 倍,变成 10 天,那就非常值得投入时间和资金去构建计算集群。
具有合适的计算类型:算法本身要具备开展并行化计算的基本条件。
比如气象、天体物理、生物、化学与材料科学、海洋科学与工程等领域的各类数学物理方程领域的复杂问题求解。这些问题通常需要对大规模稀疏系数矩阵进行操作、变换和求解,适合进行向量化,从而适合开展大规模并行化计算。
而像开大量游戏客户端脚本挂机这类任务,虽然计算量不小,但没必要组建计算集群,需要的是多台互不连接的计算机分别多线程执行脚本。
计算任务所用的代码、程序本身支持跨节点的并行化:一个计算任务要在分布式并行计算集群上运行,需要一套同步各个节点、处理器核心之间必要信息的通讯接口。
通常能兼容计算集群运行的软件或程序会使用现有的成熟并行化库,如基于 MPI(Message Passing Interface)技术接口的 openMPI、intelMPI、MPICH、HPE MPI、MS-MPI 等。要注意,采用 OpenMP 库的程序不支持跨节点并行化。
当你的计算需求满足上述三个基本要求,就可以考虑组建分布式计算集群开展并行计算了。
二、并行计算的加速效果
很多人可能会有这样的误解:一台电脑计算需要 10 天的任务,用十台电脑的集群并行计算就可以 1 天完成。但事实并非如此。并行计算的加速遵循 Amdahl’s Law。
举个简单的例子,假如一个并行计算流程中可以被并行计算加速的比重为 50%,加速比为 10,则理论全局加速比为 1.8182;而如果这个比重变为 80%,则理论全局加速比变为 2.6316。显然,如果 P=100%,理论全局加速比等于并行计算加速比 10;如果 P=0%,则理论全局加速比为 1.0。
Amdahl 定律告诉我们并行计算的加速并不是线性的,其加速效果与采用的并行计算算法和计算性质均有关系。大部分情况下,如果一台电脑计算需要 10 天,十台电脑的集群并行计算同一个任务的时间几乎必然大于 1 天,实际上可能往往需要 2~3 天甚至更多时间。
而且,该定律还没考虑另一个重要因素 —— 计算集群上运行的并行算法必不可少的通讯开销。当并行规模很小时,通讯量相对较小,对并行计算加速的影响较小;
而当并行规模很大时,通讯量较大,甚至会出现大量的 CPU 完成计算后需要挂起等待通讯完成的时间比计算时间本身更长的现象,导致并行计算 负加速。
所以,不是疯狂砸钱买 100 个节点,就可以解决一切计算上的困难。
根据计算的问题不同、节点间互联网络的性能不同,你耗费巨资建设的 100 个节点在你的计算问题上的实际效果可能反而不如别人精心构建的 5 个节点。
三、软件方面的基础背景知识
对于业余爱好者来说,组建的计算集群最好在 Linux 操作系统上开展部署,这就要求你必须具备使用 Linux 操作系统,特别是各类 shell 终端的经验和基本技能,同时最好能稍微懂点儿编译器(比如 gcc 之类)。
虽然完全不会这些基础知识也能跟随教程一步一步学会操作,但遇到兼容性问题、版本问题或其它奇怪问题时,就会束手无策。
四、硬件方面的准备
不少于 2 台的计算机作为计算节点:组建计算集群的最小单位是两台可以互相通信的计算机,这两台计算机最好是采用相同架构、相同配置的,这样才能实现并行计算中的最大加速,降低性能浪费。
一台高性能交换机和对应计算节点个数的网卡用于组建计算数据通讯网络:适合大规模并行化计算的任务必然涉及到不同 CPU 之间、不同计算节点之间的大量通讯,因此一个高性能的计算数据通讯网络是必不可少的。
可以使用千兆或万兆以太网交换机组网,但以太网存在通讯带宽不足、延迟较大、直接存取内存不便等问题。而 Infiniband 技术通讯延迟比以太网低一个数量级,带宽高,价格相对便宜,对于业余爱好者来说是个不错的选择。
当然,行业里还有一些其它高性能数据网络,但对于业余爱好者来说技术门槛较高。
登录节点 / 管理节点和存储节点:当计算集群规模较大、计算任务复杂时,需要异地托管,这就需要通过远程控制手段访问。单独设置一个登录节点,有利于使用远程桌面软件登录集群、开展 SSH 控制或计算的预处理、后处理。存储节点则用于存储计算数据、统一计算节点的运行环境,提升计算效率。
五、实际上手搭建
假设大家都具备基础的装机技术,这里搭建的计算集群属于 Beowulf 集群,相对简单容易上手。
批量部署操作系统:建议初学者使用 ubuntu 操作系统,统一系统版本、内核版本,禁止系统自动升级。可以先将一个计算节点的系统部署好、环境配置好,再批量克隆到其它节点上。
对所有计算节点批量部署好网络:对于使用 Infiniband 组网连接的集群,需要使用千兆以太网组建控制网络,并配置好固定 IP。安装好 Infiniband OFED 网卡驱动,启动子网管理服务后,可以使用 perftest 工具包测试 infiniband 网络的性能。
配置免密 SSH:openmpi 跨节点并行计算依赖 SSH 远程命令提示符进行跨节点的进程和环境变量控制,通过 rsa 加密技术为所有计算节点指定 ssh 授权的 白名单,并关闭通过密码校验 ssh 登录,实现计算集群上各节点间免密码验证的 SSH。
配置 NFS 网络共享文件系统:各个节点需要有一块可以共享写入、读取的磁盘文件系统,以实现同步读取数据、写入数据,方便构建同构的环境变量和计算程序。
编译计算程序:爱好者对各自的计算需求和对应技术熟悉的话,编译计算程序就不在话下了。
开始使用计算集群:按照相应的步骤和命令,就可以开始使用计算集群了。
总之,计算集群是一个强大的科学计算工具,但它并非适用于所有场景。在决定组建计算集群之前,一定要认真考虑自己的需求,做好充分的准备,才能让计算集群发挥出最大的作用。