Saya mahu faham bagaimana cluster HPC sebenar berfungsi: peranan login/head dan compute node, penjadual job, storan kongsi, dan job MPI merentas beberapa node. Jadi saya bina satu cluster kecil di dalam lab Proxmox saya.

Hasilnya: cluster tiga node (Slurm + Munge + NFS + OpenMPI) siap dan diuji pada 11 Ogos 2026. Keempat-empat objektif tercapai:

  1. Peranan login/head/compute node dalam cluster sebenar
  2. Setup dan pentadbiran penjadual Slurm (slurmctld, slurmd, munge)
  3. Storan kongsi melalui NFS (/home dan /scratch)
  4. Job MPI yang berjalan merentas dua compute node

Model deployment: manual (setiap node ada OS sendiri pada disk tempatan). Model provisioning gaya Warewulf/BCM dibiarkan sebagai fasa 2.


Infrastruktur

ItemNilai
HypervisorProxmox, 48 core, 125 GB RAM
RangkaianVLAN 30 (10.10.30.0/24), gateway ialah firewall
ImageRocky Linux 9 GenericCloud qcow2 (617 MB)
Disk VM20 GB setiap node (local-lvm)
VMIDNamaIPSpesifikasiPeranan
120hpc-head10.10.30.102 vCPU / 4 GB / 20 GBslurmctld, munge, NFS server, slurmd
121hpc-cpu110.10.30.112 vCPU / 4 GB / 20 GBslurmd, munge, OpenMPI (compute)
122hpc-cpu210.10.30.122 vCPU / 4 GB / 20 GBslurmd, munge, OpenMPI (compute)

Stack: Rocky 9.6, Slurm 22.05.9, Munge 0.5.13, OpenMPI 4.1.1, NFSv4.


Lima masalah dan penyelesaiannya

Bahagian ini yang paling berguna untuk belajar.

1. Boot tersangkut di dracut:/#

Masalah: cloud image berhenti di emergency shell dan disk tidak dikesan. Punca: Proxmox menggunakan scsihw=lsi (pemacu mptspi) sebagai lalai, dan initramfs cloud image tidak mempunyai pemacu itu. Penyelesaian: qm set <vmid> --scsihw virtio-scsi-single. Pengajaran: cloud image memerlukan virtio-scsi-single, bukan LSI.

2. Hostname tidak dapat di-resolve

Masalah: slurmctld melaporkan Unable to resolve "hpc-cpu1" dan not a valid controller. Punca (ada dua):

  1. manage_etc_hosts: True dalam cloud-init menimpa /etc/hosts pada setiap boot, jadi entri kita hilang.
  2. NSS myhostname milik systemd memberi alamat IPv6 link-local (fe80::) untuk hostname sendiri.

Penyelesaian:

  • Tetapkan manage_etc_hosts: false dalam /etc/cloud/cloud.cfg
  • Tulis /etc/hosts secara statik (10.10.30.10 hpc-head, dan seterusnya)
  • Tambah /etc/gai.conf: precedence ::ffff:0:0/96 100 supaya IPv4 diutamakan

3. RealMemory yang tidak padan

Masalah: Low RealMemory (reported:3655 < configured:3700), dan node jadi INVAL/DRAIN. Penyelesaian: tetapkan RealMemory=3650 dalam slurm.conf, iaitu di bawah nilai yang dilaporkan node.

4. MPI dan Slurm

Masalah: melancarkan terus dengan srun gagal: “OMPI was not built with SLURM’s PMI support”. Punca: OpenMPI dari EPEL (4.1.1) tidak dibina dengan sokongan PMIx Slurm. Penyelesaian: guna mpirun (bukan srun) dalam skrip job, dengan pembolehubah persekitaran ini:

export OMPI_MCA_plm=slurm
export OMPI_MCA_btl=tcp,self
export OMPI_MCA_pml=ob1
mpirun --allow-run-as-root ./mpi_hello

5. Job “zombie” dalam keadaan CG

Masalah: job MPI yang hang kekal dalam keadaan CG (completing) dan menyekat node. Penyelesaian: hentikan slurmctld, kosongkan fail state (/var/spool/slurmctld/*state*), kemudian mulakan semula.

Padam fail state akan membuang rekod job yang sedang berjalan. Okay dalam lab; berhati-hati di tempat lain.


Pengesahan

$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
cpu*         up   infinite      3   idle hpc-cpu[1-2],hpc-head

Job MPI, dua node × dua task:

=== Job | nodes: hpc-cpu[1-2] | tasks: 4 ===
Hello from rank 0/4 on node hpc-cpu1
Hello from rank 1/4 on node hpc-cpu1
Hello from rank 3/4 on node hpc-cpu2
Hello from rank 2/4 on node hpc-cpu2

NFS merentas node juga berfungsi: tulis dari hpc-cpu1, baca dari hpc-head, dan /scratch termount pada kedua-dua compute node.

Arahan harian

sinfo                    # node dan partition
squeue                   # job dalam queue
scontrol show node       # butiran node
sbatch mpi_job.sh        # hantar job
srun -N1 -n1 hostname    # satu task pada satu node
srun --pty bash          # shell interaktif pada compute node
scancel <jobid>          # batalkan job

Fasa 2 (pilihan)

  • Warewulf: provisioning gaya BCM (golden image dan PXE boot)
  • GPU node: tambah partition gpu dan pemacu NVIDIA
  • slurmdbd: hidupkan accounting supaya sacct boleh digunakan
  • Monitoring: Prometheus dan Grafana dengan Slurm exporter

Langkah seterusnya yang sudah saya buat: Membina Lustre Lab di Rocky Linux 9.

Rujukan