使用 Ansible 在树莓派上构建一个基于 Linux 的高性能计算系统
创始人
2024-03-01 22:17:46
0

使用低成本的硬件和开源软件设计一个高性能计算集群。

在我的 之前发表在 Opensource.com 上的文章中,我介绍了 OpenHPC 项目,它的目标是致力于加速高性能计算(HPC)的创新。这篇文章将更深入来介绍使用 OpenHPC 的特性来构建一个小型的 HPC 系统。将它称为 HPC 系统 可能有点“扯虎皮拉大旗”的意思,因此,更确切的说法应该是,它是一个基于 OpenHPC 项目发布的 集群构建方法 的系统。

这个集群由两台树莓派 3 系统作为计算节点,以及一台虚拟机作为主节点,结构示意如下:

Map of HPC cluster

我的主节点运行的是 x86_64 架构的 CentOS 操作系统,而计算节点运行了 aarch64 的轻度修改版的 CentOS 操作系统。

下图是真实的设备工作照:

要把我的系统配置成像上图这样的 HPC 系统,我是按照 OpenHPC 的集群构建方法的 CentOS 7.4/aarch64 + Warewulf + Slurm 安装指南 (PDF)的一些步骤来做的。这个方法包括了使用 Warewulf 的配置说明;因为我的那三个系统是手动安装的,我跳过了 Warewulf 部分以及创建 Ansible 剧本 的一些步骤。

Ansible 剧本中设置完成我的集群之后,我就可以向资源管理器提交作业了。在我的这个案例中, Slurm 充当了资源管理器,它是集群中的一个实例,由它来决定我的作业什么时候在哪里运行。在集群上启动一个简单的作业的方式之一:

[ohpc@centos01 ~]$ srun hostname
calvin

如果需要更多的资源,我可以去告诉 Slurm,我希望在 8 个 CPU 上去运行我的命令:

[ohpc@centos01 ~]$ srun -n 8 hostname
hobbes
hobbes
hobbes
hobbes
calvin
calvin
calvin
calvin

在第一个示例中,Slurm 在一个单个的 CPU 上运行了指定的命令(hostname),而在第二个示例中,Slurm 在 8 个 CPU 上运行了那个命令。我的计算节点一个命名为 calvin,而另一个命名为 hobbes;在上面的命令输出部分可以看到它们的名字。每个计算节点都是由 4 个 CPU 核心的树莓派 3 构成的。

在我的集群中提交作业的另一种方法是使用命令 sbatch,它可以用于运行脚本,将输出写入到一个文件,而不是我的终端上。

[ohpc@centos01 ~]$ cat script1.sh
#!/bin/sh
date
hostname
sleep 10
date
[ohpc@centos01 ~]$ sbatch script1.sh
Submitted batch job 101

它将创建一个名为 slurm-101.out 的输出文件,这个输出文件包含下列的内容:

Mon 11 Dec 16:42:31 UTC 2017
calvin
Mon 11 Dec 16:42:41 UTC 2017

为示范资源管理器的基本功能,简单的串行命令行工具就行,但是,做各种工作去配置一个类似 HPC 系统就有点无聊了。

一个更有趣的应用是在这个集群的所有可用 CPU 上运行一个 Open MPI 的并行作业。我使用了一个基于 康威生命游戏 的应用,它被用于一个名为“使用 Red Hat 企业版 Linux 跨多种架构运行康威生命游戏”的 视频。除了以前基于 MPI 的 Game of Life 版本之外,在我的集群中现在运行的这个版本对每个涉及的主机的单元格颜色都是不同的。下面的脚本以图形输出的方式来交互式启动应用:

$ cat life.mpi
#!/bin/bash

module load gnu6 openmpi3

if [[ "$SLURM_PROCID" != "0" ]]; then
    exit
fi

mpirun ./mpi_life -a -p -b

我使用下面的命令来启动作业,它告诉 Slurm,为这个作业分配 8 个 CPU:

$ srun -n 8 --x11 life.mpi

为了演示,这个作业有一个图形界面,它展示了当前计算的结果:

红色单元格是由其中一个计算节点来计算的,而绿色单元格是由另外一个计算节点来计算的。我也可以让康威生命游戏程序为使用的每个 CPU 核心(这里的每个计算节点有四个核心)去生成不同的颜色,这样它的输出如下:

感谢 OpenHPC 提供的软件包和安装方法,因为它们让我可以去配置一个由两个计算节点和一个主节点的 HPC 式的系统。我可以在资源管理器上提交作业,然后使用 OpenHPC 提供的软件在我的树莓派的 CPU 上去启动 MPI 应用程序。


想学习更多的关于使用 OpenHPC 去构建树莓派集群,请参与 Adrian Reber 在 DevConf.cz 2018 的讨论,它于 1月 26-28 日在 Brno,Czech Republic 举行,以及在 CentOS Dojo 2018 ,它于 2 月 2 日在 Brussels 举行。

关于作者

Adrian Reber —— Adrian 是 Red Hat 的高级软件工程师,他早在 2010 年就开始了迁移处理过程到高性能计算环境,从那个时候起迁移了许多的处理过程,并因此获得了博士学位,然后加入了 Red Hat 公司并开始去迁移到容器。偶尔他仍然去迁移单个处理过程,并且它至今仍然对高性能计算非常感兴趣。关于我的更多信息点这里


via: https://opensource.com/article/18/1/how-build-hpc-system-raspberry-pi-and-openhpc

作者:Adrian Reber 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

通过Linux串口实现树莓...
目录 一  串口说明 二  USB—TTL模块 ● usb-ttl...
2025-06-01 20:44:00
嵌入式Linux入门必看!...
最近总有人问我:想学嵌入式Linux,到底该买哪块开发板?这问题就...
2025-05-10 12:17:26
不明白为什么在树莓派上使用...
在树莓派上使用join()函数会导致TypeError错误的原因是...
2024-12-26 22:02:04
不明白为什么我的树莓派3没...
要解决树莓派3没有向服务器发送RSSI数据的问题,以下是一些可能的...
2024-12-26 21:30:46
步进电机在工作一段时间后停...
步进电机在工作一段时间后停止工作,尽管代码仍然正常,可能有以下几个...
2024-12-25 21:02:03
BitpandaPHPCU...
若在使用Bitpanda API时遇到此问题,先确认你的API k...
2024-12-19 20:31:18

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...