构建通用 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 docker1.2 基础镜像选择
推荐基于 NVIDIA 官方 HPC Benchmarks 镜像进行二次封装:
bash
docker pull nvcr.io/nvidia/hpc-benchmarks:24.032. 工具箱集成方案
我们将基于上述镜像,通过 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.dat2.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/profile2.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.sh2.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_bw3. 多机压测部署流程
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 启动盘。
- 制作启动盘: 使用 Ubuntu/Rocky Linux Live ISO 刻录 U 盘。
- 置入镜像: 将
hpc-toolkit.tar放入 U 盘数据分区。 - 现场执行:
- U 盘引导启动服务器。
- 安装 Docker (使用离线包)。
docker load -i hpc-toolkit.tar。- 执行一键压测脚本。
5. 总结
该方案实现了 HPC 性能测试的标准化与可移植化。
- 统一基准: 避免了因编译器版本、数学库差异导致的测试结果波动。
- 快速交付: 从数小时的环境配置缩短至几分钟的镜像分发。
- 全栈覆盖: 一个镜像涵盖算力 (HPL)、内存 (STREAM)、存储 (FIO)、网络 (OSU) 四大维度。
