Beowulf 核心哲學
Beowulf 非特定軟體,而是架構模式:商用現貨硬體 (COTS) + 商用現貨網路 (COTN) + 開源軟體 (Linux + MPI/PVM) = 低成本超級電腦。NASA Goddard 的 Thomas Sterling 與 Donald Becker 開創。
硬體規劃清單 (單節點最低規格)
| 元件 | 最低規格 | 建議規格 (2024) | 備註 |
| CPU | Intel 486 | AMD EPYC / Intel Xeon Scalable / Ryzen Threadripper | 多核心、AVX-512/AMX 加速 |
| 記憶體 | 16 MB | 64 GB+ (DDR5 ECC) | 每核心 2-4 GB |
| 本地儲存 | 200 MB | NVMe SSD 1 TB+ (OS + Scratch) | 並行檔案系統需高 IOPS |
| 網路 | 10/100 Mbps | 25/100/200 GbE (InfiniBand/RoCE) | 低延遲、RDMA 關鍵 |
| 電源 | 標準 ATX | 冗余電源 (1+1) + PDU 監控 | 節點級 IPMI/BMC |
網路拓撲設計
三網隔離
管理網路 (1 GbE) 業務/運算網路 (25-200 GbE) 儲存網路 (可合併業務)
│ │ │
[管理交換機] [高效能交換機] [儲存交換機]
│ │ │
┌───┴───┐ ┌───┴───┐ ┌───┴───┐
│ Head │◄────────────────────►│ Node1 │◄────────────────────►│ 共享 │
│ Node │ SSH/Ansible/PXE │ │ MPI/集體通訊 │ 儲存 │
└───────┘ └───┬───┘ └───────┘
│
┌────┴────┐
│ Node2 │
│ Node3 │
│ ... │
│ NodeN │
└─────────┘
IP 規劃範例
# 管理網 (192.168.10.0/24)
192.168.10.1 head
192.168.10.11 node1
192.168.10.12 node2
...
# 運算網 (10.0.0.0/16, 無路由)
10.0.0.1 head-ib
10.0.0.11 node1-ib
10.0.0.12 node2-ib
...
# /etc/hosts (所有節點同步)
10.0.0.1 head-ib head
10.0.0.11 node1-ib node1
10.0.0.12 node2-ib node2
軟體堆疊部署
1. 基礎 OS:Rocky Linux 9 / Ubuntu 22.04 LTS
- PXE + Kickstart/Autoyast 全自動部署
- 倉庫鏡像本地化 (dnf/apt mirror)
- 核心參數調優:
transparent_hugepage=never, numa_balancing=disable, processor.max_cstate=1
2. 叢集管理:Warewulf 4.x / xCAT / Bright Cluster Manager
# Warewulf 4 快速開始
dnf install -y warewulf
wwctl configure --all
wwctl node add node1 --ipaddr=192.168.10.11 --hwaddr=aa:bb:cc:dd:ee:ff --netdev=eth0
wwctl node add node2 --ipaddr=192.168.10.12 --hwaddr=aa:bb:cc:dd:ee:11 --netdev=eth0
wwctl overlay build
wwctl server restart
# 節點 PXE 開機自動加入叢集
3. 認證與同步:LDAP + NFS + Chrony
# Head 節點
dnf install -y openldap-servers nfs-utils chrony
# LDAP: 中心化用戶/群組
# NFS: /home, /opt/software, /scratch 掛載到所有節點
# Chrony: Head 為 NTP 伺服器,節點同步
# /etc/chrony.conf (Head)
allow 10.0.0.0/16
local stratum 10
# /etc/chrony.conf (Node)
server head-ib iburst
4. MPI 實作:OpenMPI / MPICH / Intel MPI
# OpenMPI (最通用)
dnf install -y openmpi openmpi-devel
# 環境變數 (所有節點)
export PATH=$PATH:/usr/lib64/openmpi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib
# 測試
mpirun -np 4 -host node1,node2 hostname
# 輸出 4 行主機名,證明跨節點啟動成功
5. 作業排程:Slurm (簡單) / PBS Pro / LSF (企業級)
# Slurm 快速部署
dnf install -y slurm slurm-slurmd slurm-slurmctld
# /etc/slurm/slurm.conf 關鍵
ClusterName=beowulf
ControlMachine=head
NodeName=node[1-32] CPUs=64 RealMemory=65536 State=UNKNOWN
PartitionName=debug Nodes=node[1-32] Default=YES MaxTime=1:00:00
PartitionName=batch Nodes=node[1-32] Default=NO MaxTime=7-00:00:00
systemctl enable --now slurmctld # Head
systemctl enable --now slurmd # Nodes
6. 並行檔案系統:Lustre / BeeGFS / CephFS / GPFS
- Lustre:傳統 HPC 首選、MDS/OSS 分離、極高擴展性
- BeeGFS:部署簡單、用戶態、中小叢集友善
- CephFS:統一物件/塊/檔、Kubernetes 原生
並行應用開發模式
Master/Worker (最直觀)
// Master
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank == 0) {
// 分割任務
for (i=1; i
領域分解
- 網格/網格劃分:每節點負責子網格 + 幽靈層 (halo/ghost cells)
- MPI 衍生資料型別傳遞邊界
- 非阻塞通訊
MPI_Isend/Irecv + MPI_Waitall 重疊計算與通訊
集體通訊優化
| 操作 | 用途 | 優化建議 |
| MPI_Bcast | 廣播參數/配置 | 小訊息,樹狀演算法 |
| MPI_Scatter/Gather | 分發/收集陣列區塊 | 大資料用 MPI_Scatterv/Gatherv |
| MPI_Allreduce | 全域歸約 (求和/最大值) | 內建樹狀/環狀,硬體加速 (NCCL/HCOLL) |
| MPI_Alltoall | 全對全交換 (FFT/轉置) | 頻寬敏感,拓撲感知排程 |
效能調優關鍵
- CPU 親和性:
mpirun --bind-to core --map-by ppr:1:core 綁核心、避免遷移
- 記憶體親和性 (NUMA):
numactl --interleave=all 或 --membind,配合 MPI_PROCESS_RANK 區域分配
- 網路卸載:InfiniBand/RoCE 啟用
UCX (Unified Communication X) 傳輸層,HCOLL 集體通訊加速
- I/O 模式:MPI-IO 共同檔案存取、
MPI_File_write_at_all 集體 I/O、條帶化 (stripe) 配置
- 負載均衡:異質節點 (CPU 核心數/型號不同) 需動態任務偷取或加權分割
從 Beowulf 到現代 HPC 雲
| 時代 | 特徵 | 代表技術 |
| Beowulf 經典 (1994-2010) | 以太網 + PVM/MPICH + NFS + 自製腳本 | Stone SouperComputer, LOBOS |
| InfiniBand 時代 (2005-2020) | RDMA + OpenMPI + Lustre/GPFS + PBS/Slurm | Top500 多數系統 |
| 雲原生 HPC (2020-) | 容器化 (Apptainer/Singularity) + Kubernetes (Kueue, MPI Operator) + 雲爆發 | AWS ParallelCluster, Azure CycleCloud, GCP HPC Toolkit |
| AI/HPC 融合 (2023-) | GPU 叢集 + NCCL + PyTorch Distributed + Slurm + Kubernetes | NVIDIA DGX SuperPOD, Megatron-LM |
啟動你的第一個 Beowulf 叢集 (最小驗證)
- 2 台 Linux PC (或 VM),同網段
- 設定
/etc/hosts、~/.ssh/authorized_keys (免密登入)
dnf install -y openmpi (兩台)
- Head:
mpirun -np 2 -host localhost,node2 hostname
- 看到 2 行不同主機名 → 成功!
- 編譯
mpicc hello.c -o hello && mpirun -np 2 ./hello
Beowulf 精神:**平價硬體、開源軟體、自主掌控、社群共創**。無論規模大小,這套方法論始終有效。