Skip to content

构建通用 HPC 性能压测工具箱

摘要: 传统 HPC 验收测试需要在每台服务器上繁琐地安装编译器、数学库和测试工具。本文提出一种基于 Docker 的解决方案:将 GPU HPL、CPU Linpack、STREAM、FIO、OSU Micro-benchmarks 集成到一个“超级镜像”中,实现“一次构建,到处运行”的高效交付压测。

1. 基础环境构建

压测工具箱的基础是宿主机的 Docker 环境及 NVIDIA Container Toolkit。

1.1 宿主机准备

RedHat / CentOS:

bash
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io

# 安装 NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | tee /etc/yum.repos.d/nvidia-container-toolkit.repo
yum install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker

1.2 基础镜像选择

推荐基于 NVIDIA 官方 HPC Benchmarks 镜像进行二次封装:

bash
docker pull nvcr.io/nvidia/hpc-benchmarks:24.03

2. 工具箱集成方案

我们将基于上述镜像,通过 Dockerfile 或交互式 Commit 方式集成以下组件。

2.1 GPU HPL (已内置)

官方镜像已包含优化好的 HPL 和 HPL-MxP。

单机 8 卡测试命令:

bash
mpirun --bind-to none -np 8 \
  hpl.sh --cpu-affinity 0-31:32-63:64-95:96-127:128-159:160-191:192-223:224-255 \
  --gpu-affinity 0:1:2:3:4:5:6:7 \
  --dat /workspace/hpl-linux-x86_64/sample-dat/HPL-8GPU.dat

2.2 集成 Intel CPU Linpack & OneAPI

在容器内安装 Intel OneAPI Base & HPC Toolkit,用于 CPU 算力压测。

bash
# 下载并安装 Base Kit
wget https://registrationcenter-download.intel.com/.../l_BaseKit_p_2024.1.0.596_offline.sh
sh ./l_BaseKit_p_2024.1.0.596_offline.sh -a --silent --eula accept

# 下载并安装 HPC Kit (包含 MPI 和 MKL)
wget https://registrationcenter-download.intel.com/.../l_HPCKit_p_2024.1.0.560_offline.sh
sh ./l_HPCKit_p_2024.1.0.560_offline.sh -a --silent --eula accept

# 环境变量加载脚本
echo "source /opt/intel/oneapi/setvars.sh" >> /etc/profile

2.3 集成 AMD CPU Linpack

针对 AMD 平台,需传入 AMDLinpack.zip 并解压配置。

注意

AMD CPU 压测建议关闭 BIOS 中的 SMT (超线程),以获得更准确的物理核性能峰值。

2.4 集成 STREAM (内存带宽)

在容器内编译 STREAM 工具。

bash
# 编译 CPU STREAM
icc -O3 -xCORE-AVX512 -qopenmp -DSTREAM_ARRAY_SIZE=80000000 -o stream_cpu stream.c

# GPU STREAM (NVIDIA 镜像通常已内置)
/workspace/stream-gpu-linux-x86_64/stream-gpu-test.sh

2.5 集成 FIO & IOzone (存储 I/O)

用于测试本地 NVMe RAID 或并行文件系统性能。

bash
# 安装 FIO
yum install -y fio

# 编译 IOzone
wget http://www.iozone.org/src/current/iozone3_506.tar
tar xf iozone3_506.tar
cd iozone3_506/src/current
make linux-AMD64
cp iozone /usr/local/bin/

2.6 集成 OSU Micro-benchmarks (网络)

用于测试 InfiniBand/RoCE 网络的延迟与带宽。

bash
# 通常集成在 MPI 包中,或单独编译
# 自动化测试脚本示例
mpirun --allow-run-as-root -np 2 -H host1,host2 \
  -x UCX_NET_DEVICES=mlx5_0:1 \
  /opt/osu-micro-benchmarks/mpi/pt2pt/osu_bw

3. 多机压测部署流程

3.1 容器启动

在所有测试节点启动“特权容器”,挂载宿主机设备:

bash
docker run -d --net=host --privileged --ipc=host \
  --gpus all --name hpc-tool \
  -v /root/.ssh:/root/.ssh \
  my-hpc-toolkit:v1.0 sleep infinity
  • --net=host: 使用宿主机 IB 网络。
  • --ipc=host: 优化 Shared Memory 性能。
  • -v /root/.ssh: 共享宿主机 SSH 密钥,实现容器间免密。

3.2 批量执行

编写简单的 Orchestration 脚本(如 Ansible 或 Shell 循环),在 Head 节点触发 mpirun 命令,即可调度整个集群的容器进行协同压测。

4. Live USB 便携方案

为了保护客户现场环境(不污染现有 OS),可制作 Live USB 启动盘。

  1. 制作启动盘: 使用 Ubuntu/Rocky Linux Live ISO 刻录 U 盘。
  2. 置入镜像: 将 hpc-toolkit.tar 放入 U 盘数据分区。
  3. 现场执行:
    • U 盘引导启动服务器。
    • 安装 Docker (使用离线包)。
    • docker load -i hpc-toolkit.tar
    • 执行一键压测脚本。

5. 总结

该方案实现了 HPC 性能测试的标准化可移植化

  • 统一基准: 避免了因编译器版本、数学库差异导致的测试结果波动。
  • 快速交付: 从数小时的环境配置缩短至几分钟的镜像分发。
  • 全栈覆盖: 一个镜像涵盖算力 (HPL)、内存 (STREAM)、存储 (FIO)、网络 (OSU) 四大维度。

AI-HPC Organization