Skip to content

高性能计算(HPC)概览

HPC 与云计算的区别

云计算(通用):
  - 多租户共享资源
  - 虚拟化(有性能损耗)
  - 弹性伸缩
  - 适合 Web/应用服务

HPC(高性能计算):
  - 专用资源,无虚拟化
  - 裸金属(Bare Metal)运行
  - 高速互联(InfiniBand)
  - 适合科学计算、仿真、AI 训练

H3C HPC 解决方案

典型 HPC 集群架构

HPC 集群组成:

登录节点(Login Node)× 2
  └── 用户登录、作业提交入口

管理节点(Management Node)× 2
  └── 集群管理、调度、监控

计算节点(Compute Node)× N
  ├── CPU 节点:H3C R4900 G5(2×32C)
  ├── GPU 节点:H3C G5500 G5(8×A100)
  └── 大内存节点:H3C R6900 G5(6TB 内存)

存储节点(Storage Node)
  └── Lustre 并行文件系统

高速互联网络
  └── InfiniBand HDR 200Gbps

管理网络
  └── 1GbE(带外管理)

SLURM 作业调度

SLURM(Simple Linux Utility for Resource Management)是 HPC 领域最主流的作业调度系统:

基本概念

SLURM 核心概念:

Partition(分区):
  类似队列,按资源类型划分
  例:cpu-partition(CPU 节点)、gpu-partition(GPU 节点)

Job(作业):
  用户提交的计算任务
  包含:资源需求、运行时间、执行脚本

Node(节点):
  计算节点,有 idle/allocated/down 等状态

Account(账户):
  用于资源配额和计费管理

常用命令

bash
# 查看集群状态
sinfo                          # 查看分区和节点状态
squeue                         # 查看作业队列
squeue -u $USER                # 查看自己的作业
sacct -j <job-id>              # 查看作业历史

# 提交作业
sbatch job.sh                  # 提交批处理作业
srun --nodes=4 --ntasks=32 ./program  # 交互式运行

# 管理作业
scancel <job-id>               # 取消作业
scontrol hold <job-id>         # 暂停作业
scontrol release <job-id>      # 恢复作业

# 查看节点详情
scontrol show node <node-name>

作业脚本示例

bash
#!/bin/bash
#SBATCH --job-name=cfd-simulation
#SBATCH --partition=cpu-partition
#SBATCH --nodes=16
#SBATCH --ntasks-per-node=32        # 每节点 32 个 MPI 进程
#SBATCH --cpus-per-task=1
#SBATCH --mem=256G                  # 每节点内存
#SBATCH --time=48:00:00             # 最长运行 48 小时
#SBATCH --output=logs/cfd-%j.out
#SBATCH --error=logs/cfd-%j.err
#SBATCH --mail-type=END,FAIL
#SBATCH --mail-user=user@example.com

# 加载模块
module load openmpi/4.1.5
module load openfoam/10

# 设置工作目录
cd $SLURM_SUBMIT_DIR

# 运行 MPI 程序
mpirun -np $SLURM_NTASKS \
  --bind-to core \
  --map-by socket \
  simpleFoam -parallel

echo "作业完成,退出码: $?"

MPI 并行计算

MPI(Message Passing Interface)是 HPC 的核心并行编程模型:

c
// MPI Hello World 示例
#include <mpi.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
    int rank, size;
    char hostname[256];
    
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    gethostname(hostname, 256);
    
    printf("Hello from rank %d of %d on %s\n", rank, size, hostname);
    
    // 集合通信示例:AllReduce
    double local_sum = rank * 1.0;
    double global_sum;
    MPI_Allreduce(&local_sum, &global_sum, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
    
    if (rank == 0) {
        printf("全局求和结果: %.1f\n", global_sum);
    }
    
    MPI_Finalize();
    return 0;
}
bash
# 编译和运行
mpicc -O2 -o hello hello.c
mpirun -np 64 --hostfile hostfile ./hello

典型 HPC 应用场景

气象/气候模拟

WRF(Weather Research and Forecasting)模型:
  - 全球/区域天气预报
  - 需要大量 CPU 核心和内存
  - 典型规模:100-1000 节点
  
H3C 方案:
  - 计算节点:H3C R4900 G5(2×32C,512GB)
  - 存储:Lustre 并行文件系统(高吞吐)
  - 网络:InfiniBand HDR(低延迟)

分子动力学模拟

GROMACS/AMBER/NAMD:
  - 蛋白质折叠、药物设计
  - GPU 加速效果显著
  
H3C 方案:
  - GPU 节点:H3C G5500 G5(8×A100)
  - 存储:NVMe 全闪(高 IOPS)

有限元分析(CAE)

ANSYS/Abaqus/LS-DYNA:
  - 汽车碰撞仿真、结构分析
  - 需要大内存节点
  
H3C 方案:
  - 大内存节点:H3C R6900 G5(6TB 内存)
  - 存储:高速 NFS/Lustre

褚成志的云与计算笔记