马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1. 集群基本情况
本集群由两台 Dell PowerEdge R720 服务器组成,用于运行 VASP 6.4.2 第一性原理计算任务。两台服务器通过局域网互联,并通过 NFS 共享 /home 目录,实现统一的程序路径、计算目录和输入输出文件管理。 1.1 节点信息
节点名 IP 地址 角色
node1 192.168.3.122 主节点、NFS 服务端、推荐任务启动节点
node2 192.168.3.123 计算节点、NFS 客户端 1.2 硬件概况
每台服务器为 Dell PowerEdge R720,双路 CPU 架构。系统中每台服务器包含 2 个 NUMA 节点,适合进行 MPI 并行计算。 当前建议按物理核心优先使用,不建议一开始使用超线程跑满所有逻辑核心。 常用并行规模: 配置 含义 说明
-ppn 4 -np 8 每台 4 个 MPI 进程,总共 8 个进程 已验证稳定,可作为基础测试配置
-ppn 8 -np 16 每台 8 个 MPI 进程,总共 16 个进程 推荐日常测试配置
-ppn 16 -np 32 每台 16 个 MPI 进程,总共 32 个进程 两台服务器物理核心满载测试配置 2. 软件环境
2.1 操作系统
两台服务器均为 Ubuntu 系统。 2.2 共享存储
/home 目录通过 NFS 共享: · node1 为 NFS 服务端; · node2 挂载 node1 的 /home; · VASP 程序、测试目录、运行脚本均统一放在 /home/lxy 下。 这样可以保证两台服务器访问相同的 VASP 可执行文件和计算输入输出文件。 2.3 Intel oneAPI / MPI 环境
当前主要使用: /opt/intel/oneapi/mpi/2021.15 Intel MPI 版本: Intel(R) MPI Library, Version 2021.15 VASP 所需相关库主要包括: /opt/intel/oneapi/mpi/2021.15/lib
/opt/intel/oneapi/mpi/2021.15/opt/mpi/libfabric/lib
/opt/intel/oneapi/compiler/2025.1/lib
/opt/intel/oneapi/mkl/2025.1/lib OFI/libfabric provider 路径为: /opt/intel/oneapi/mpi/2021.15/opt/mpi/libfabric/lib/prov 当前跨节点 MPI 使用: I_MPI_FABRICS=shm  fi
I_MPI_OFI_PROVIDER=tcp
FI_PROVIDER=tcp 说明: · shm 用于同一节点内部 MPI 通信; · ofi 用于跨节点通信; · tcp 表示通过普通以太网进行跨节点通信。 3. VASP 程序位置
VASP 6.4.2 已编译完成,统一位于共享目录: /home/lxy/vasp.6.4.2/vasp.6.4.2/bin/vasp_std 两台服务器均通过 /home 共享目录访问同一个 vasp_std。 4. hosts 文件
在计算目录中准备 hosts.txt: node1
node2 也可以使用 IP 写法: 192.168.3.122
192.168.3.123 推荐优先使用节点名,前提是 /etc/hosts 中已经正确配置: 192.168.3.122 node1
192.168.3.123 node2 5. MPI 参数说明
5.1 -np
-np 表示总 MPI 进程数。 例如: -np 16 表示整个作业共启动 16 个 MPI rank。 5.2 -ppn
-ppn 表示每个节点启动多少个 MPI 进程。 例如: -ppn 8 -np 16 在两台服务器上表示: 节点 MPI 进程数
node1 8
node2 8
总计 16 5.3 NUMA 关系
-ppn 只控制每台机器启动多少个 MPI 进程,不直接控制这些进程放在哪个 NUMA节点上。 实际 MPI rank 到 CPU/NUMA 的分布由 Intel MPI 的 pinning 策略决定。可以通过: -genv I_MPI_DEBUG 10 查看 CPU pinning 信息。 推荐使用: -genv I_MPI_PIN 1
-genv I_MPI_PIN_DOMAINcore 使每个 MPI rank 尽量绑定到物理核心上,减少进程漂移,提高性能稳定性。 6. 推荐运行脚本
为了避免每次手动输入大量环境变量,建议创建统一的 VASP 环境包装脚本。 6.1 创建 /home/lxy/run_vasp_env.sh
cat > /home/lxy/run_vasp_env.sh <<'EOF'
#!/bin/bash
ulimit -s unlimited
export I_MPI_ROOT=/opt/intel/oneapi/mpi/2021.15
exportPATH=$I_MPI_ROOT/bin:/opt/intel/oneapi/2025.1/bin  PATH
exportLD_LIBRARY_PATH=$I_MPI_ROOT/lib  I_MPI_ROOT/opt/mpi/libfabric/lib:/opt/intel/oneapi/compiler/2025.1/lib:/opt/intel/oneapi/mkl/2025.1/lib  LD_LIBRARY_PATH
exportFI_PROVIDER_PATH=$I_MPI_ROOT/opt/mpi/libfabric/lib/prov
export OMP_NUM_THREADS=1
export MKL_NUM_THREADS=1
export OMP_STACKSIZE=512M
export MKL_DYNAMIC=FALSE
export OMP_DYNAMIC=FALSE
exec /home/lxy/vasp.6.4.2/vasp.6.4.2/bin/vasp_std
EOF
chmod +x/home/lxy/run_vasp_env.sh 该脚本的作用是: 1. 设置无限栈空间; 2. 设置 Intel MPI 路径; 3. 设置 MKL、compiler、libfabric 动态库路径; 4. 固定每个 MPI rank 使用 1 个 OpenMP/MKL 线程; 5. 启动 VASP。 7. VASP 正式运行命令
建议统一从 node1 启动任务。 进入计算目录: cd /home/lxy/6-6-GaN/test 7.1 8 核测试配置
mpirun -f hosts.txt -ppn 4 -np 8 \
-genv I_MPI_FABRICS shm  fi \
-genv I_MPI_OFI_PROVIDER tcp \
-genv FI_PROVIDER tcp \
-genv I_MPI_PIN 1 \
-genv I_MPI_PIN_DOMAIN core \
-genv OMP_NUM_THREADS 1 \
-genv MKL_NUM_THREADS 1 \
/home/lxy/run_vasp_env.sh > vasp_np8.log 2>&1 7.2 16 核推荐配置
mpirun -f hosts.txt -ppn 8 -np 16 \
-genv I_MPI_FABRICS shm  fi \
-genv I_MPI_OFI_PROVIDER tcp \
-genv FI_PROVIDER tcp \
-genv I_MPI_PIN 1 \
-genv I_MPI_PIN_DOMAIN core \
-genv OMP_NUM_THREADS 1 \
-genv MKL_NUM_THREADS 1 \
/home/lxy/run_vasp_env.sh > vasp_np16.log 2>&1 7.3 32 核满物理核心测试配置
mpirun -f hosts.txt -ppn 16 -np 32 \
-genv I_MPI_FABRICS shm  fi \
-genv I_MPI_OFI_PROVIDER tcp \
-genv FI_PROVIDER tcp \
-genv I_MPI_PIN 1 \
-genv I_MPI_PIN_DOMAIN core \
-genv OMP_NUM_THREADS 1 \
-genv MKL_NUM_THREADS 1 \
/home/lxy/run_vasp_env.sh > vasp_np32.log 2>&1 8. 后台运行任务
如果希望任务在断开终端后继续运行,可以使用 nohup: nohup mpirun -f hosts.txt -ppn 8 -np 16 \
-genv I_MPI_FABRICS shm  fi \
-genv I_MPI_OFI_PROVIDER tcp \
-genv FI_PROVIDER tcp \
-genv I_MPI_PIN 1 \
-genv I_MPI_PIN_DOMAIN core \
-genv OMP_NUM_THREADS 1 \
-genv MKL_NUM_THREADS 1 \
/home/lxy/run_vasp_env.sh > vasp_np16.log 2>&1 & 查看进程: ps -ef | grep vasp 查看日志: tail -fvasp_np16.log 查看 VASP 电子步: tail -f OSZICAR 9. VASP 并行参数建议
在 INCAR 中建议优先设置: NCORE= 4
KPAR = 1 9.1 NCORE
NCORE 用于控制每个轨道并行使用的核心数。 常用测试值: NCORE = 2
NCORE = 4
NCORE = 8 对于当前双路服务器,建议优先测试: NCORE = 4 如果使用 -np 32,可以进一步测试: NCORE = 8 9.2 KPAR
KPAR 用于 k 点并行。 如果是 Gamma 点或 k 点很少,建议保持: KPAR = 1 如果 KPOINTS 中 k 点较多,可以测试: KPAR = 2
KPAR = 4 注意: 总 MPI rank 数应能被 KPAR整除。 例如: 总 MPI rank 可测试 KPAR
8 1, 2, 4
16 1, 2, 4, 8
32 1, 2, 4, 8, 16 10. 性能测试方法
不同并行规模不一定核数越多越快,需要通过实际计算时间比较。 运行一段时间后查看: grep "LOOP:" OUTCAR | tail
grep "LOOP+" OUTCAR | tail 建议分别保存不同配置的输出文件: cp OUTCAR OUTCAR_np8
cp OSZICAR OSZICAR_np8
cp vasp_np8.logvasp_np8_finished.log 然后对 np16、np32 也做同样保存。 推荐测试顺序: 1. -ppn4 -np 8
2. -ppn 8 -np16
3. -ppn 16 -np 32 最终选择 LOOP 时间最短、运行最稳定的配置作为日常默认配置。 11. 运行过程中查看 CPU 状态
11.1 查看所有 CPU 核心负载
node1: mpstat -P ALL 1 node2: ssh node2 "mpstat-P ALL 1" 如果没有 mpstat,安装: sudo apt install sysstat 11.2 使用 htop
node1: htop node2: ssh node2
htop 建议在 htop 中添加 PROCESSOR 列,用于查看进程运行在哪个 CPU 核心上。 11.3 查看 VASP 进程所在 CPU
ps -eLo pid,tid,psr,pcpu,pmem,comm | grep vasp 持续刷新: watch -n 1 "ps -eLo pid,tid,psr,pcpu,pmem,comm | grep vasp" 11.4 查看进程绑核范围
for p in $(pgrep vasp_std); do
echo "  ID $p"
taskset -cp $p
done node2: ssh node2 'for pin $(pgrep vasp_std); do echo "  ID $p"; taskset -cp $p; done' 12. 查看 NUMA 信息
查看 NUMA 节点和 CPU 分布: numactl -H 或者: lscpu -e=CPU,CORE,SOCKET,NODE,ONLINE 查看运行过程中 NUMA 内存使用: numastat 查看单个 VASP 进程的 NUMA 分布: for p in $(pgrep vasp_std); do
echo "===== PID $p ====="
numastat -p $p
done 13. 常见问题与处理
13.1libfabric.so.1: cannot open shared object file
原因:远端 MPI 进程没有获得正确的 LD_LIBRARY_PATH。 解决方法:在 mpirun 命令中添加: -genv I_MPI_ROOT /opt/intel/oneapi/mpi/2021.15
-genv LD_LIBRARY_PATH/opt/intel/oneapi/mpi/2021.15/lib:/opt/intel/oneapi/mpi/2021.15/opt/mpi/libfabric/lib:/opt/intel/oneapi/compiler/2025.1/lib:/opt/intel/oneapi/mkl/2025.1/lib
-genv FI_PROVIDER_PATH/opt/intel/oneapi/mpi/2021.15/opt/mpi/libfabric/lib/prov 或者统一使用 /home/lxy/run_vasp_env.sh 包装脚本。 13.2 fi_info 找不到真实路径
原因:I_MPI_ROOT 指向了错误路径。 正确路径应为: export I_MPI_ROOT=/opt/intel/oneapi/mpi/2021.15 然后测试: fi_info -p tcp
fi_info -p shm 13.3 forrtl: error (78): process killed (SIGTERM)
如果使用了 timeout 命令,例如: timeout 120s mpirun ... 那么到时间后系统会主动终止 VASP,出现 SIGTERM 是正常的。 正式计算不要加 timeout。 13.4 mpiicc 报 icc: not found
原因:当前环境没有传统 Intel C 编译器 icc。 可以使用: export I_MPI_CC=icx 或: export I_MPI_CC=gcc 再编译 MPI 测试程序。 14. 推荐日常使用流程
14.1 准备输入文件
每个计算目录至少包含: INCAR
POSCAR
POTCAR
KPOINTS 进入计算目录: cd /home/lxy/6-6-GaN/test 14.2 检查 hosts
cat hosts.txt 建议内容为: node1
node2 14.3 运行 VASP
推荐先使用 16 rank: mpirun -f hosts.txt -ppn 8 -np 16 \
-genv I_MPI_FABRICS shm  fi \
-genv I_MPI_OFI_PROVIDER tcp \
-genv FI_PROVIDER tcp \
-genv I_MPI_PIN 1 \
-genv I_MPI_PIN_DOMAIN core \
-genv OMP_NUM_THREADS 1 \
-genv MKL_NUM_THREADS 1 \
/home/lxy/run_vasp_env.sh > vasp_np16.log 2>&1 14.4 查看进度
tail -f OSZICAR 或: tail -f vasp_np16.log 14.5 查看计算是否结束
grep "reachedrequired accuracy"OUTCAR 查看最终能量: grep "free energy TOTEN" OUTCAR | tail 15. 当前集群状态总结
当前双服务器集群已经完成以下配置和验证: 1.node1 与 node2SSH 免密登录正常;
2. node1 与 node2 主机名解析正常;
3. /home NFS 共享正常;
4. VASP 6.4.2 可执行文件位于共享目录;
5. Intel MPI 2021.15 本地多进程测试正常;
6. node2 本地 VASP 多进程运行正常;
7. 跨节点 Intel MPI + OFI/tcp 通信正常;
8. VASP 跨节点 -ppn 4 -np 8 已成功运行;
9. -ppn 8 -np 16 的 MPI rank 分布正常;
10. 当前阶段可以正式使用 node1 + node2 进行 VASP 并行计算。 推荐后续重点工作: 1. 固化运行脚本;
2. 测试 -np 8、-np 16、-np 32 的实际速度;
3. 对比 OUTCAR 中 LOOP 时间;
4. 调整 INCAR 中 NCORE 和 KPAR;
5. 根据实际体系确定日常最佳运行配置。 当前推荐默认配置: 运行规模:-ppn8 -np 16
INCAR 参数:NCORE = 4, KPAR = 1
启动节点:node1
通信方式:IntelMPI + shm  fi + tcp
|