View Categories

集群软件环境与使用指南

ch01 集群使用指南 #

更新日期:2026-09-29
登录节点:login01
公共提交脚本:/public/slurm_scripts
脚本选择助手:yskit

本指南面向在 ch01 集群上提交科学计算任务的用户,重点介绍各软件的编译方式、编译器、MPI、CUDA、数学库、指令集、精度与功能,同时提供计算资源、安装路径和常用操作。软件清单依据当前安装目录、公共脚本及项目验收记录整理;节点空闲情况以 Slurm 实时查询为准。

目录 #

1. 集群简介 #

ch01 提供 Intel Xeon CPU 节点以及 NVIDIA P100、V100 GPU 节点,用于第一性原理计算、分子动力学、机器学习势训练和相关数据处理。

用户在 login01 整理输入、选择软件和提交作业,计算任务通过 Slurm 分配到计算节点。不要在登录节点直接运行生产模拟或模型训练。

GPU 是否更快取决于软件实现、体系规模、k 点数量、显存和并行配置。小体系或通信占比较高的任务,不一定随显卡数量增加而加速。

2. 节点配置与分区 #

2.1 计算资源 #

内存列为 Slurm 配置的可调度内存,单位 MB。

分区节点CPU 核数内存GPU单卡申请参数
cpu-8173mccn001-8173m56187200无不申请 GPU
gpu-8p100-hsgcn001-8p100361248008 × P100 16GB--gres=gpu:p100-16g:1
gpu-8p100-tcgcn002-8p100361248008 × P100 16GB--gres=gpu:p100-16g:1
gpu-8v100-16g-hsgcn001-8v100-16g241872008 × V100 16GB--gres=gpu:v100-16g:1
gpu-8v100-32g-tcgcn001-8v100-32g241872008 × V100 32GB--gres=gpu:v100-32g:1

CPU 软件目录中的 8173m 对应 Xeon Platinum 8173M 节点。GPU 目录中的 p100、v100 分别对应两种 GPU 架构;多数已部署软件的 V100 16GB、32GB 共用程序,但提交分区和显存容量不同。

2.2 用户类型与资源权限 #

  • hs_user:核时用户脚本目录,对应获授权的 hs 分区。
  • tc_user:套餐用户脚本目录,对应获授权的 tc 分区。
  • cpu-8173m 的实际可用权限仍以账户配置为准。
  • GPU 申请必须写明型号,不能将 --gres=gpu:1 当作本集群通用写法。
  • 保留 Slurm 设置的 CUDA_VISIBLE_DEVICES,不要在提交脚本中改为整机显卡编号。

收费标准、存储额度、账户并发限制和套餐有效期,由管理员按账户说明;本文件不预设统一价格或配额。

3. 登录、目录与任务提交 #

3.1 常用目录 #

用途路径
用户家目录$HOME,通常为 /public/home/<用户名>
科学软件/public/software
编译器、CUDA、Conda 等工具/public/toolkit
公共模块/public/modulefiles
公共 Slurm 脚本/public/slurm_scripts
安装和验收记录/public/software/agent

在自己的项目目录保存输入、脚本和输出。公共软件环境由管理员维护;需要额外 Python 包时,先确认是否应建立个人环境。

3.2 使用 yskit 复制脚本 #

在准备运行的算例目录执行:

yskit

选择 (1) 复制脚本,依次选择用户类型、软件、版本和节点。也可以直接运行:

yskit copy
yskit list

脚本复制到当前目录;已有同名文件时不会覆盖。yskit 不会自动提交任务。(9) 查看使用说明,(0) 退出主菜单。

检查输入文件、分区、进程数、CPU 线程数和 GPU 数后,再提交复制得到的脚本。

3.3 常用 Slurm 命令 #

sinfo                                      # 查看分区与节点状态
squeue -u "$USER"                           # 查看自己的作业
sbatch submit.sh                           # 提交任务,替换为实际脚本名
scontrol show job JOBID                     # 查看任务详情
sacct -j JOBID --format=JobID,State,ExitCode,Elapsed
scancel JOBID                              # 取消指定任务

JOBID 替换为实际作业编号。作业从 squeue 消失后,使用 sacct 和计算输出确认结果。

当前公共脚本以 %j.out 保存作业输出,标准错误合并到同一文件。不要仅凭 Slurm 显示 COMPLETED 判断电子迭代、MD 或模型训练已达到预期。

3.4 首次登录与文件传输 #

管理员提供登录地址、SSH 端口和账号。login01 是集群内部名称,不一定能从个人电脑直接解析。下面的 LOGIN_HOST、PORT、USERNAME 必须替换成实际信息;命令在自己的电脑终端执行。

ssh -p PORT USERNAME@LOGIN_HOST

Windows 可使用支持 SSH/SFTP 的终端工具;Linux、macOS 可使用系统 SSH。首次连接先核对管理员给出的主机指纹;密码输入时终端不显示字符是正常行为。账号认证和外网入口信息不在公共指南中统一填写。

上传一个算例目录与下载结果的示例:

# 在个人电脑上执行;先将占位符替换为实际信息
scp -P PORT -r ./case01 USERNAME@LOGIN_HOST:~/
scp -P PORT USERNAME@LOGIN_HOST:~/case01/OUTCAR ./

SSH 的端口选项是小写 -p,SCP 是大写 -P。大量文件可使用 SFTP 客户端;传输前确认远端目录,避免覆盖已完成的算例。POTCAR、波函数等文件可能很大,尽量按后续计算需求保留和传输,不要在每次查看结果时复制整个目录。

3.5 算例目录如何组织 #

每次独立计算使用独立目录。同一目录同时提交两个会写同名输出的任务,会互相覆盖文件。

project/
├── README.md             # 体系、目的、软件版本、参数与作业编号
├── inputs-original/      # 原始输入副本
├── relax/                # 结构优化
├── scf/                  # 静态自洽
├── analysis/             # 后处理
└── benchmark/            # 同一输入的不同并行配置

这只是用户目录的组织示例,不要求固定名称。推荐在每个算例目录保留实际提交的脚本、输入文件和 %j.out,并记录最终使用的程序版本与路径。续算前确认旧作业已结束,识别软件所需的检查点;不要把“重新提交脚本”当成所有软件通用的续算操作。

公共 /public/software 和 /public/toolkit 存放程序,不是用户计算输出目录。集群暂未在本指南承诺公共 scratch、自动备份和统一清理周期;重要结果需要用户自行保留副本。

3.6 从零提交一次作业 #

以核时用户的 ABACUS 3.10.1 P100 单卡任务为例:

# 在已准备好输入的算例目录执行
pwd
ls -l INPUT STRU KPT
cp -i /public/slurm_scripts/hs_user/abacus/3.10.1/p100/sub_abacus_3.10.1_p100-16g.sh .
cat sub_abacus_3.10.1_p100-16g.sh
bash -n sub_abacus_3.10.1_p100-16g.sh
sbatch --test-only sub_abacus_3.10.1_p100-16g.sh
sbatch sub_abacus_3.10.1_p100-16g.sh

INPUT/STRU 中引用的赝势和轨道也必须存在。cp -i 在目标已存在时询问是否覆盖。bash -n 只检查 Shell 语法;sbatch --test-only 检查调度侧可接受性,两者都不会验证科学输入是否合理。

提交后记下返回的作业编号,例如 12345:

squeue -j 12345
scontrol show job 12345
# 输出文件出现后查看;Ctrl+C 只结束 tail,不取消作业
tail -f 12345.out
sacct -j 12345 --format=JobID,State,ExitCode,Elapsed,AllocCPUS

在实际使用时替换示例作业编号。需要取消任务时,先核对编号,再执行 scancel 12345。修改本地脚本不会改变已经提交的作业;不要让前一次任务仍运行时,在同一目录再提交修改版。

3.7 理解 Slurm 参数 #

参数含义本集群使用要点
--job-name队列中显示的任务名用体系或用途命名,便于区分
--partition选择分区必须与账号权限、程序架构一致
--nodes节点数当前多数模板按单节点验收
--ntasks总进程数通常对应 MPI ranks;不等于 CPU 线程数
--ntasks-per-node每个节点的进程数不要与总进程数设置相互矛盾
--cpus-per-task每个进程分配的 CPU 数OpenMP 程序还需对应的线程环境变量
--gresGPU 型号及数量本集群必须使用带型号的写法
--output作业日志%j 会替换为作业编号
--time作业时间上限仍受分区、账户和 QOS 限制
--exclusive独占节点请求不等于应用自动使用了所有 CPU

单节点时,CPU 需求通常按 ntasks × cpus-per-task 理解。例如 2 个 MPI 进程、每个 2 线程,合计申请 4 个 CPU;它与申请 4 张 GPU 没有直接关系。核数不能超过节点资源,还可能受到 GPU/CPU 配额关联限制。

#SBATCH 行由 Slurm 解析,不是普通 Shell 命令;不要在这些行里写 $HOME 等变量并期待 Shell 自动展开。环境变量设置、module 加载和程序启动放在指令区之后。

3.8 常见并行配置对照 #

下表是现有模板的起点,不是所有体系的最优参数。

软件/任务MPI 进程每进程 CPUGPU还需对应的设置
GPU VASP 单卡111对应 P100/V100 程序、匹配的 INCAR
ABACUS CPU2820OMP_NUM_THREADS=2
ABACUS GPU PW 单卡121INPUT 中 device、求解器与 kpar
DeePMD 单卡训练模板121选择 TF/PT 后端;模板限制单卡
LAMMPS 配套 GPU 模板每 GPU 1 进程按模板与进程数一致区分 deepmd、classic、deepmd-kk 模式
GROMACS GPU thread-MPISlurm 1 个 task41程序内部 -ntmpi 1 -ntomp 4
LOBSTER1560OMP_NUM_THREADS=56,直接启动
Wannier90 3.1.0 MPI 模板5610seedname 参数;MPI 启动

已有脚本里设置的 MPI 启动器和绑定参数属于软件运行配置,不应统一替换成另一套 mpirun 或 srun。需要多节点时,单独确认软件支持、通信路径和输入规模,不能仅把 --nodes=1 改成 2。

4. 基础软件环境 #

4.1 Modules #

Modules 用于加载和切换软件运行环境。常用命令:

module avail                               # 列出模块
module list                                # 查看已加载模块
module help abacus/3.10.1-v100              # 查看指定模块说明
module load abacus/3.10.1-v100              # 加载指定版本
module unload abacus/3.10.1-v100            # 卸载指定版本
module purge                               # 卸载当前所有模块

优先使用公共提交脚本中指定的环境。不同程序可能依赖不同 MPI,不能只替换二进制路径而沿用另一套 MPI。

4.2 Miniconda #

公共安装路径:/public/toolkit/miniconda3。现有环境位于其 envs 子目录。

source /public/toolkit/miniconda3/etc/profile.d/conda.sh
conda env list
conda activate deepmd-kit-3.2.0
conda list
conda deactivate

个人环境可以安装到自己的目录,例如:

conda create -p "$HOME/conda-envs/analysis" python=3.11
conda activate "$HOME/conda-envs/analysis"
pip install tqdm -i https://pypi.tuna.tsinghua.edu.cn/simple

此例仅用于个人环境,不用于修改公共 DeePMD 环境。Conda 下载源沿用账户已配置的镜像。

4.3 编译器、CUDA 与 MPI #

工具当前目录或版本使用说明
Intel oneAPI 2023.2/public/toolkit/oneapi/2023.2按对应 CPU 软件脚本加载
Intel oneAPI 2024.2/public/toolkit/oneapi/2024.2按对应 CPU 软件脚本加载
NVIDIA HPC SDK 25.3/public/toolkit/nvhpc/25.3已交付 GPU VASP 模板使用此版本
NVIDIA HPC SDK 26.9/public/toolkit/nvhpc/26.9不作为本指南的已验收替代环境
CUDA Toolkit 12.8/public/toolkit/cuda/12.8随软件构建选择
CUDA Toolkit 12.9/public/toolkit/cuda/12.9随软件构建选择
HPC-X/public/toolkit/hpcx/2.50包含原生 ompi5 及其他构建,按软件脚本选择
Open MPI/public/toolkit/openmpi模块 openmpi/5.0.10-cuda12.8
CMake管理节点 /usr/bin/cmake,3.28.3用于构建;其他节点以 cmake --version 为准

ABACUS GPU 环境使用 HPC-X 自带的多线程 UCX。DeePMD/LAMMPS、GROMACS、VASP 各自使用已匹配的运行环境,不能将这项设置不加区分地套给所有程序。

4.4 检查当前环境是否正确 #

module list
command -v python
command -v mpirun
command -v nvcc
printf '%s\n' "${CONDA_PREFIX:-未激活Conda环境}"

这些命令用于确认当前终端的环境;批作业真正使用什么环境,应以提交脚本及其日志为准。比如登录终端的 python 来自 base 环境,不代表 DeePMD 模板也会使用 base,因为模板会自行激活对应环境。

遇到导入或动态库错误时,先核对脚本指定的版本。module purge 可以卸载模块,但不会自动清除所有手动 source、Conda 或自行设置的环境变量。不要通过反复追加不同版本的 LD_LIBRARY_PATH 来碰运气;使用新的登录终端,重新选择正确模板更容易定位问题。

公共 DeePMD 环境已按对应版本配置。用户自行执行 pip install --upgrade 可能改变 TF/PT、NumPy 或 CUDA 依赖;数据整理需要新包时优先使用个人环境,将转换后的数据交给训练环境读取。

4.5 NVIDIA 驱动 #

2026-09-29 现场查询结果:

节点驱动版本
gcn001-8p100580.173.02
gcn002-8p100580.178.04
gcn001-8v100-16g580.173.02
gcn001-8v100-32g580.173.02

nvidia-smi 标题中的 CUDA 版本表示驱动支持能力,不代表当前软件实际使用的 CUDA Toolkit 版本。

4.6 如何阅读软件编译环境 #

各软件章节下面的“编译方式与环境”说明当前交付程序实际如何构建,不是要求用户重新安装。编译器负责生成程序,MPI 负责进程通信,CUDA/NVHPC 提供 GPU 编译与运行支持,MKL/OpenBLAS/FFTW/ELPA 等提供数值计算能力。这几层的版本需要分别记录,不能只用一句“Intel 编译”或“支持 CUDA”概括。

常见名称在本集群中的含义
ifort / iccIntel 经典 Fortran/C 编译器,主要用于 VASP 5.4.4 及配套库
ifx / icx / icpxIntel LLVM 系列 Fortran/C/C++ 编译器,主要用于新 CPU 构建
mpiifort / mpiifxIntel MPI 的 Fortran 编译包装器,底层分别调用 ifort/ifx
nvfortran / nvc / nvc++NVHPC 编译器;GPU VASP 使用 OpenACC 路径
GCC / G++ / GFortranGNU 编译器,ABACUS GPU、DeePMD、GROMACS GPU 等使用
mpicc / mpicxx / mpif90MPI 包装器名称;仅凭命令名不能判断底层编译器和 MPI 来源
MKL LP64MKL 的 32 位整数接口;不是将浮点数改成单精度
AVX-512 / AVX2CPU 指令集目标;不等于 GPU 架构
sm_60 / sm_70分别对应 P100 / V100 GPU 设备代码目标
OpenMP / OpenACC分别用于线程并行和加速器卸载的编程接口;软件可能同时使用
mixed / double / single软件或特定组件的精度策略;不同软件不能直接类比

MPI 环境对照 #

软件构建使用的 MPI 来源不可直接替代为
新编 CPU VASP、CPU ABACUS、CPU GROMACS 外部 MPI对应 oneAPI 的 Intel MPINVHPC 自带 Open MPI
已交付 GPU VASP 25.3 构建NVHPC 25.3 的 HPC-X 2.22.1 / Open MPI 4.1.7rc1DeePMD 所用 HPC-X 2.50
DeePMD 配套 LAMMPS / PLUMED/public/toolkit/hpcx/2.50/ompi5 原装 MPI额外编译的 ompi5-nvhpc
GPU ABACUS同一 HPC-X 2.50 原装 MPI,配套多线程 UCX 环境未匹配的普通 UCX 环境
GPU GROMACS 外部 MPI/public/toolkit/openmpi/5.0.10-cuda12.8Intel MPI 或 NVHPC MPI
GROMACS thread-MPI程序内部 thread-MPI外部 mpirun 并非此模板的启动方式

本页将完整构建记录、用户回传配置和二进制依赖检查区分说明。旧程序缺少原始编译日志时,写明能确认的运行环境,不反推未知的优化开关。下方配置片段用于解释已交付版本,不能单独替代完整构建脚本。

5. 应用软件 #

5.1 VASP #

VASP 提供 CPU 与 GPU 构建,并按功能分别安装。选择版本时,同时确认功能分支和目标节点。

VASP 编译方式与环境 #

VASP 使用源码自带的 Make 构建系统,以对应版本 arch 模板生成 makefile.include,分别构建 std/gam/ncl。功能分支是在独立源码树中接入相应补丁或库后编译,不是运行时随意加载插件。

构建范围工具链MPI / 数学库CPU / GPU 目标与证据
本次重建的 5.4.4 CPU 扩展分支oneAPI 2023.2;ifort/icc 2021.10Intel MPI;MKL、ScaLAPACK、Intel MPI BLACS8173m,-xCORE-AVX512;各分支保留批准配置
本次重建的 6.3.2 CPU 分支(普通版是否重建见正文)oneAPI 2024.2;ifx/icx/icpx 2024.2.1Intel MPI 2021.13;MKL 2024.2 LP64、ScaLAPACK8173m,通常显式 -xCORE-AVX512;历史普通版另见下文
本次重建的 6.4.2 CPU 分支(普通版是否重建见正文)oneAPI 2024.2;ifx/icx/icpx 2024.2.1Intel MPI 2021.13;MKL 2024.2 LP64、ScaLAPACK8173m,通常显式 -xCORE-AVX512;历史普通版另见下文
本次重建的 6.4.3 CPU 分支(普通版是否重建见正文)oneAPI 2024.2;ifx/icx/icpx 2024.2.1Intel MPI 2021.13;MKL 2024.2 LP64、ScaLAPACK8173m,通常显式 -xCORE-AVX512;历史普通版另见下文
本次重建的 6.5.1 CPU 分支(普通版是否重建见正文)oneAPI 2024.2;ifx/icx/icpx 2024.2.1Intel MPI 2021.13;MKL 2024.2 LP64、ScaLAPACK8173m,通常显式 -xCORE-AVX512;历史普通版另见下文
本次重建的 6.6.1 CPU 分支(普通版是否重建见正文)oneAPI 2024.2;ifx/icx/icpx 2024.2.1Intel MPI 2021.13;MKL 2024.2 LP64、ScaLAPACK8173m,通常显式 -xCORE-AVX512;历史普通版另见下文
GPU 普通 6.3.2NVHPC 25.3;oneAPI 2023.2 仅提供 MKLNVHPC 自带 HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译
GPU 普通 6.4.3NVHPC 25.3;oneAPI 2023.2 仅提供 MKLNVHPC 自带 HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译
GPU 普通 6.5.1NVHPC 25.3;oneAPI 2023.2 仅提供 MKLNVHPC 自带 HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译
GPU VTST 6.3.2(本次补齐)NVHPC 25.3;oneAPI 2023.2 MKLHPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译
GPU VTST 6.4.2(本次补齐)NVHPC 25.3;oneAPI 2023.2 MKLHPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译
GPU VTST 6.4.3(本次补齐)NVHPC 25.3;oneAPI 2023.2 MKLHPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译
GPU VTST 6.5.1(本次补齐)NVHPC 25.3;oneAPI 2023.2 MKLHPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译
GPU optcell 6.3.2NVHPC 25.3;oneAPI 2023.2 MKLHPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译;每节点最多 make -j16
GPU optcell 6.4.2NVHPC 25.3;oneAPI 2023.2 MKLHPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译;每节点最多 make -j16
GPU optcell 6.4.3NVHPC 25.3;oneAPI 2023.2 MKLHPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译;每节点最多 make -j16
GPU optcell 6.5.1NVHPC 25.3;oneAPI 2023.2 MKLHPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译;每节点最多 make -j16
GPU optcell 6.6.1NVHPC 25.3;oneAPI 2023.2 MKLHPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACSCUDA 12.8;P100 cc60、V100 cc70,分别编译;每节点最多 make -j16
既有普通 6.4.2沿用已有交付,非上述普通版重编批次以保存配置、依赖核查和正式模板为准不把后补模板当成重新编译的证据
既有普通 6.6.1沿用已有交付,非上述普通版重编批次以保存配置、依赖核查和正式模板为准不把后补模板当成重新编译的证据

CPU 5.4.4 optcell 使用 arch/makefile.include.linux_intel;6.4.2 等新 CPU 构建使用各自 arch/makefile.include.intel,Fortran 包装器改为 mpiifx,C/C++ 分别为 icx/icpx。新 CPU 构建采用 MKL sequential 接口及 MPI 分布式线性代数;默认 56 MPI 的模板不代表同时启动 56 个 OpenMP 线程。

CPU 指令集不能简单按目录统一推断:例如已存档的普通 6.6.1 配置保留 -xHOST,而新编普通 6.3.2/6.4.3/6.5.1 及相应扩展构建明确采用 -xCORE-AVX512。旧普通 5.4.4/6.4.2 的历史配置证据不完整,本页不把其所有参数等同于新构建。

GPU 新编版本以自身 makefile.include.nvhpc_ompi_mkl_omp_acc 为模板,关键配置含义如下:

设置当前新编 GPU 构建采用方式
GPU 卸载mpif90 -acc -mp,NVHPC OpenACC + OpenMP;P100/V100 分别选择 cc60/cc70、cuda12.8
CPU 目标保留 -tp host;P100 在 E5-2696v3 节点编译,V100 在 Gold 6146 节点编译
数学库cuBLAS/cuSOLVER/cuFFT/NCCL + MKL ScaLAPACK/OpenMPI BLACS
四倍精度支持NVHPC 自带 QD 软件模拟库
nonlr 优化OFLAG_IN = -fast -Mwarperf、SOURCE_IN := nonlr.o 已启用,并核对实际日志
tripcount旧模板显式补 -gpu=tripcount:host,较新模板保留其判断块;逐版以批准配置为准
独立 ScaLAPACK未使用模板中 /path/to/... 的独立库覆盖行,使用 MKL 提供的实现

-tp host 优化的是宿主 CPU,不是自动选择任意 GPU;因此程序仍按 P100/V100 分目录。普通 GPU 6.4.2 的早期记录主要是二进制依赖证据,不能把新 VTST/optcell 的开关全部追认到该旧程序。NVHPC 26.9 手工构建也不属于本页已验收的 25.3 正式程序。

VASP 功能分支如何编入 #

分支编译时增加的内容是否默认包含其他分支
普通版原版源码及该版本批准的配置不默认包含下列扩展
optcell对应版本的晶胞约束补丁;5.4.4 使用 patch -p0 < cell_relax_finner.patch不叠加 VTST/溶剂模型
VTST按版本接入 VTST 源文件、对象顺序和主程序接口;新 GPU 批次用 revision 214 的对应目录不表示所有 VTST 步骤均在 GPU 执行
Wannier90 / VASP 5.4.4-DVASP2WANNIER90,链接匹配工具链的 libwannier.aWannier90 2.1.0;本次为 CPU
Wannier90 / VASP 6.3.2-DVASP2WANNIER90,链接匹配工具链的 libwannier.aWannier90 3.1.0;本次为 CPU
Wannier90 / VASP 6.4.2-DVASP2WANNIER90,链接匹配工具链的 libwannier.aWannier90 3.1.0;本次为 CPU
Wannier90 / VASP 6.4.3-DVASP2WANNIER90,链接匹配工具链的 libwannier.aWannier90 3.1.0;本次为 CPU
Wannier90 / VASP 6.5.1-DVASP2WANNIER90,链接匹配工具链的 libwannier.aWannier90 3.1.0;本次为 CPU
Wannier90 / VASP 6.6.1-DVASP2WANNIER90,链接匹配工具链的 libwannier.aWannier90 3.1.0;本次为 CPU
VASPsol按对应 VASP 版本接入经典 VASPsol 源码/补丁与 VASPsol++ 分开交付
VTST + VASPsol++ 5.4.4按该版本兼容补丁构建是明确组合构建,不代表其他分支也含 VTST
VTST + VASPsol++ 6.3.2按该版本兼容补丁构建是明确组合构建,不代表其他分支也含 VTST
CP-VASP v2 / VASP 6.3.2在 sol++ 基础上接入按 sol++ 配置输入
CP-VASP v2 / VASP 6.4.2在经典 sol 基础上接入按经典 sol 配置输入
BEEF5.4.4 加 -Dlibbeef 并静态链接 libbeef 0.1.3无 VTST/sol/optcell/Wannier 叠加

libbeef 本身用 oneAPI 2023.2 ICC/ifort 构建,目标 AVX-512,安装在 /public/software/vasp/libbeef/0.1.3/oneapi-2023.2-icc/8173m。静态链接的 libbeef.a 不需要额外设置其动态库路径;VASP 仍需匹配的 Intel/MPI 环境。

构建证据:GPU 普通版、GPU VTST、GPU optcell、5.4.4 CPU optcell、6.4.2 CPU optcell、libbeef。

正式路径规则:

/public/software/vasp/<功能分支>/<版本>/<节点>/vasp_std

vasp_std 是标准程序;Gamma-only 或非共线任务按对应构建选择 vasp_gam、vasp_ncl。不同功能分支是独立构建,不表示所有补丁同时包含。

功能分支版本用途8173mP100 / V100
vasp5.4.4普通版本已部署未列入已交付 GPU 构建
vasp6.3.2普通版本已部署已部署
vasp6.4.2普通版本已部署已部署
vasp6.4.3普通版本已部署已部署
vasp6.5.1普通版本已部署已部署
vasp6.6.1普通版本已部署已部署
vasp-optcell5.4.4IOPTCELL 晶胞约束已部署未列入已交付 GPU 构建
vasp-optcell6.3.2IOPTCELL 晶胞约束已部署已部署
vasp-optcell6.4.2IOPTCELL 晶胞约束已部署已部署
vasp-optcell6.4.3IOPTCELL 晶胞约束已部署已部署
vasp-optcell6.5.1IOPTCELL 晶胞约束已部署已部署
vasp-optcell6.6.1IOPTCELL 晶胞约束已部署已部署
vasp-vtst5.4.4VTST 相关功能已部署未列入已交付 GPU 构建
vasp-vtst6.3.2VTST 相关功能已部署已部署
vasp-vtst6.4.2VTST 相关功能已部署已部署
vasp-vtst6.4.3VTST 相关功能已部署已部署
vasp-vtst6.5.1VTST 相关功能已部署已部署
vasp-vtst6.6.1VTST 相关功能已部署已部署
vasp-wannier905.4.4Wannier90 接口已部署未列入已交付 GPU 构建
vasp-wannier906.3.2Wannier90 接口已部署未列入已交付 GPU 构建
vasp-wannier906.4.2Wannier90 接口已部署未列入已交付 GPU 构建
vasp-wannier906.4.3Wannier90 接口已部署未列入已交付 GPU 构建
vasp-wannier906.5.1Wannier90 接口已部署未列入已交付 GPU 构建
vasp-wannier906.6.1Wannier90 接口已部署未列入已交付 GPU 构建
vasp-sol5.4.4VASPsol已部署未列入已交付 GPU 构建
vasp-sol6.3.2VASPsol已部署未列入已交付 GPU 构建
vasp-sol6.4.2VASPsol已部署未列入已交付 GPU 构建
vasp-sol6.4.3VASPsol已部署未列入已交付 GPU 构建
vasp-sol6.5.1VASPsol已部署未列入已交付 GPU 构建
vasp-sol6.6.1VASPsol已部署未列入已交付 GPU 构建
vasp-vtst-sol++5.4.4VTST + VASPsol++已部署未列入已交付 GPU 构建
vasp-vtst-sol++6.3.2VTST + VASPsol++已部署未列入已交付 GPU 构建
vasp-cpvasp6.3.2CP-VASP v2已部署未列入已交付 GPU 构建
vasp-cpvasp6.4.2CP-VASP v2已部署未列入已交付 GPU 构建
vasp-beef5.4.4libbeef / BEEF已部署未列入已交付 GPU 构建

CP-VASP 6.3.2 对应 VASPsol++,6.4.2 对应经典 VASPsol。两者的参数和电势定义不能直接互换。

例如,普通 VASP 6.4.2 的 P100 程序位于:

/public/software/vasp/vasp/6.4.2/p100/vasp_std

公共脚本根目录:

/public/slurm_scripts/hs_user/vasp
/public/slurm_scripts/tc_user/vasp

P100 核时用户单卡示例,与当前公共模板的环境一致:

#!/bin/bash
#SBATCH --job-name=vasp
#SBATCH --partition=gpu-8p100-hs
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --gres=gpu:p100-16g:1
#SBATCH --output=%j.out

VASP_BIN=/public/software/vasp/vasp/6.4.2/p100/vasp_std
source /public/toolkit/oneapi/2023.2/mkl/latest/env/vars.sh
module load nvhpc/25.3/nvhpc

export OMPI_MCA_coll_hcoll_enable=0
export NO_STOP_MESSAGE=1
export OMP_NUM_THREADS="${SLURM_CPUS_PER_TASK}"

mpirun --bind-to none -np "${SLURM_NTASKS}" "${VASP_BIN}"

多卡 GPU VASP 通常需要同步调整 --ntasks 与 --gres,并检查 INCAR 中的并行参数。CPU 版脚本不能只修改分区就作为 GPU 版使用。

Wannier 接口、CP-VASP、BEEF 等分支存在特定输入限制,开始使用前查阅对应部署记录,不要把短算例通过理解为所有输入均已验证。

VASP:提交前准备什么 #

文件作用检查重点
POSCAR晶格、元素与原子坐标元素顺序、数量、坐标类型是否正确
POTCARPAW 数据元素顺序与 POSCAR 一致,使用所需泛函对应的数据
INCAR计算参数任务类型、收敛条件、精度和并行参数
KPOINTSk 点采样与体系和计算目的匹配;Gamma-only 程序并非适合任意网格
提交脚本分区、程序和资源版本、功能分支、节点架构、进程数

这里不提供一份“所有体系通用”的 INCAR。结构优化、静态能量、杂化泛函、非共线、自旋轨道、溶剂模型与过渡态搜索需要不同参数。使用 optcell/VTST/sol 等分支前,先核对该分支的输入约定。

VASP:如何检查运行结果 #

# 在算例目录查看,不会启动计算
tail -n 30 OSZICAR
tail -n 60 OUTCAR

先看作业输出中的版本、GPU 检测和错误信息,再检查电子与离子迭代是否达到自己的收敛目标。OSZICAR 有能量记录只说明程序进行过迭代;出现正常计时尾部也不代表结构优化一定收敛。

结构优化后的结构通常保存在 CONTCAR;是否作为下一步 POSCAR 使用,应先检查几何和收敛状态。WAVECAR/CHGCAR 是否保留取决于后续任务,不要在不清楚后处理需求时直接删除。

对比 CPU/GPU 或不同并行配置时,使用完全相同的初始输入和收敛条件。不要一组读取已有 WAVECAR、另一组从头计算,然后把耗时差全部归因于 GPU。

5.2 ABACUS #

ABACUS 3.10.1 提供 PW 平面波、LCAO 局域轨道和 LCAO 杂化泛函相关功能,已安装 CPU、P100、V100 三套程序。

平台程序模块
8173m/public/software/abacus/3.10.1/8173m/bin/abacusabacus/3.10.1-8173m
P100/public/software/abacus/3.10.1/p100/bin/abacusabacus/3.10.1-p100
V100/public/software/abacus/3.10.1/v100/bin/abacusabacus/3.10.1-v100

ABACUS 编译方式与环境 #

使用 ABACUS 3.10.1 源码,CMake Release 构建,CPU/P100/V100 分别配置、安装;每套依赖也分别保存,不复用未经匹配的 VASP 数学库。

项目8173m CPUP100 / V100 GPU
C/C++/FortranoneAPI 2024.2 的 icx/icpx/ifxGCC/G++/GFortran 13.3
MPIIntel MPI 2021.13原装 HPC-X 2.50 ompi5
CPU 目标AVX-512AVX2
CUDA不启用CUDA Toolkit 12.8;sm_60 / sm_70
BLAS/LAPACKMKL LP64,sequentialOpenBLAS 0.3.30
ScaLAPACKMKL,Intel MPI 接口独立 ScaLAPACK 2.2.2
FFT配套 MKL/FFTW 接口FFTW 3.3.10 单/双精度、GPU 配套 CUDA 库
ELPA2024.05.001 CPU 构建2024.05.001,GPU 支持
泛函与杂化支持库Libxc 6.2.2、LibRI 0.2.1.1、LibComm 0.1.1相同版本,按 GPU 工具链构建
其他依赖cereal 1.3.0cereal 1.3.0

主要 CMake 开关:

CMAKE_BUILD_TYPE=Release
ENABLE_MPI=ON
USE_OPENMP=ON
ENABLE_LCAO=ON
USE_ELPA=ON
ENABLE_LIBXC=ON
ENABLE_LIBRI=ON
ENABLE_LIBCOMM=ON
ENABLE_FLOAT_FFTW=ON
ENABLE_NATIVE_OPTIMIZATION=OFF

GPU 两套另设 USE_CUDA=ON 和对应 CMAKE_CUDA_ARCHITECTURES,CPU 为 USE_CUDA=OFF。关闭 DeepKS、PAW、PEXSI;GPU 关闭 cuSOLVERMp。ENABLE_FLOAT_FFTW=ON 是允许支持的 PW 路径选择单精度,默认计算仍为 double。关闭 native optimization 后使用显式指定的 CPU 指令集,避免管理节点编译时意外生成不适合目标节点的代码。

构建采用 cmake -S ... -B ...、cmake --build ...、cmake --install ... 三阶段;各前缀写入匹配的依赖搜索路径。CPU 主程序显式优化参数为 -O2 -xCORE-AVX512;GPU 宿主为 -O2 -march=haswell -mtune=generic。GPU 运行环境加载 HPC-X 的多线程 UCX,以满足 MPI 线程支持需求,同时关闭 HCOLL。

依赖安装根目录:/public/software/abacus/deps/3.10.1/{8173m,p100,v100}。可追溯配置见 主程序构建脚本和依赖构建脚本;它们是维护证据,不应由普通用户直接重跑覆盖公共安装。

通过 yskit 选择 abacus → 3.10.1 → 节点,准备 INPUT、STRU、KPT 及相应赝势、轨道文件后提交。

单、双精度支持已编入同一套程序,默认使用双精度。在 INPUT 中设置:

precision double

PW SCF 使用受支持的求解器时,可以选择 precision single;3.10.1 文档列出 cg、bpcg、dav,本次实际验证 cg。LCAO 不通过该参数切换为全流程单精度。单精度应先检查目标体系的能量、力和应力误差。

GPU PW 通常设置 device gpu,并结合显卡数量设置 kpar。LCAO 可选择 cusolver 或 elpa;genelpa 与 elpa 是不同接口,不能只凭名字认定 GPU 加速已经启用。

已验证 P100 单、双、四、八卡和 V100 32GB 单、双卡;V100 16GB、V100 四/八卡及跨节点未逐项验收。小算例不一定随 GPU 数量增加而加速。

详细使用和性能数据见 ABACUS 验收报告。

ABACUS:输入文件与求解路径 #

输入/组件用途
INPUT计算类型、基组、求解器、精度与收敛参数
STRU原子结构,并引用元素赝势、所需轨道文件
KPTk 点设置;是否需要独立文件取决于所选输入方式
赝势文件对应元素的离子实相互作用数据
数值原子轨道LCAO 路径需要与体系和计算方法匹配的轨道
LCAO以局域原子轨道展开电子波函数的基组方法
ELPA分布式本征值求解库,本次编译了适用的 GPU 支持
cuSOLVERNVIDIA 数值求解库;ABACUS 的 cusolver 路径与 ELPA 路径不同

下列内容是对现有 INPUT 的参数片段,不是完整可运行输入。不要在同一个 INPUT 末尾重复追加已经存在的同名参数。

PW GPU 单卡、双精度的选择示例:

basis_type pw
device gpu
ks_solver cg
precision double
kpar 1

LCAO GPU 的选择示例:

basis_type lcao
device gpu
ks_solver cusolver

使用已经验收的 ELPA GPU 路径时选择 ks_solver elpa。杂化泛函还需要正确的泛函及相关输入配置;加载了 LibRI/Libxc 并不等于任意 INPUT 自动变成 HSE 计算。

PW 多卡时同步修改 Slurm 的进程数、GPU 数和适用的 kpar,并检查实际 k 点是否足以分配。Gamma 点小体系不应简单照搬多 k 点测试的扩展结论。

ABACUS:精度与性能怎么选 #

先用 double 得到参考结果,再评估 single 对目标量的影响。已有 Si16 测试中,GPU single 相对 double 的总能量差约 0.00046 eV,最大力差约 0.0057 eV/Å;这些数值只对应该测试输入,不能作为所有体系的误差上限。

现有 Si16 PW PBE、double、相同收敛阈值的计时:

平台配置耗时/s
CPU 8173m56 MPI × 1 线程16.10
CPU 8173m28 MPI × 2 线程17.22
P1001 GPU,1 MPI × 2 线程25.87
P1002 GPU,2 MPI × 2 线程18.24
P1004 GPU,4 MPI × 2 线程13.59
P1008 GPU,8 MPI × 2 线程14.07
V100 32GB1 GPU,1 MPI × 2 线程22.64
V100 32GB2 GPU,2 MPI × 2 线程19.04

该小体系的 P100 四卡比八卡更快,整节点 CPU 也比单卡 GPU 更快。测试环境和样本有限,生产任务应使用自己的规模、k 点和输入做短基准,而不是直接固定用最多 GPU。原始条件及误差数据见本节上方验收报告。

5.3 DeePMD-kit #

各源码版本使用独立 Conda 环境,公共环境位置为 /public/toolkit/miniconda3/envs/<环境名>。

版本环境名后端
2.2.11deepmd-kit-2.2.11TensorFlow
3.0.0rc0deepmd-kit-3.0.0rc0TensorFlow、PyTorch
3.0.1deepmd-kit-3.0.1TensorFlow、PyTorch
3.1.3deepmd-kit-3.1.3TensorFlow、PyTorch
3.2.0deepmd-kit-3.2.0TensorFlow、PyTorch

DeePMD 编译方式与环境 #

这些 *-source 部署包含两个层次:Python 包从所选 DeePMD 源码通过 pip 构建安装;C/C++ 接口另用 CMake 编译,供内置 DeePMD 的 LAMMPS 调用。TF/PT 是环境中已安装的后端依赖,不等于本次把 TensorFlow 和 PyTorch 自身也从源码编译了一遍。

DeePMDPythonC/C++ 编译器CUDA 构建工具链TensorFlowPyTorch
2.2.113.11.16GCC 12.2.012.2.2,nvcc 12.2.1402.15.1未安装
3.0.0rc03.11.16Conda GCC/G++ 13.412.62.19.12.6.0+cu126
3.0.13.11 系列Conda GCC/G++ 13.412.62.19.12.6.0+cu126
3.1.33.11.16Conda GCC/G++ 13.412.62.19.12.6.0+cu126
3.2.03.12.14GCC/G++ 13.3.012.9.862.21.02.12.0

表中 CUDA 是 DeePMD/C++ 扩展的构建工具链;Python 后端包可能自带 CUDA 运行依赖,不能用 nvidia-smi 顶部的版本替换本表。3.0 系列的 TF/PT 组合经过加载冲突复测后确定,用户不应在公共环境单独升级其中一个后端。

以 3.2.0 为例,Python 构建设置 DP_VARIANT=cuda、DP_ENABLE_TENSORFLOW=1、DP_ENABLE_PYTORCH=1、关闭 Paddle 和 native optimization;使用源码 pip 隔离构建。C/C++ 设置 BUILD_CPP_IF=ON、BUILD_PY_IF=OFF,启用 TF/PT,并通过 USE_TF_PYTHON_LIBS、USE_PT_PYTHON_LIBS 使用该环境中的后端库。C++17、Release、宿主 -march=haswell,生成 sm_60/sm_70 设备代码。

3.2.0 的 TF 外部 protobuf/abseil 链接与 LAMMPS KOKKOS 兼容调整有专门记录;不能把普通 pip install . 视为同时完成 C/C++、PLUMED 和 LAMMPS 的安装。各版本的 API、构建变量和兼容补丁也不应互相照搬。

Python 环境不安装 jax/jaxlib 或 Paddle;3.2.0 允许上游自动编译的 C++ JAX 接口,因此“无 JAX Python 包”不等于所有库中都不存在 JAX 接口符号。

构建来源:2.2.11、3.0.0rc0、3.0.1、3.1.3、3.2.0。

训练脚本位于 /public/slurm_scripts/{hs_user,tc_user}/deepmd-kit,选择相应 *-source 目录。按脚本说明选择后端和输入文件,不把不同版本的命令参数直接混用。

3.1.3 的原版 PyTorch 训练入口需要可见 GPU,不作为已支持的 CPU 训练入口使用。不要在登录节点直接调用该训练入口进行试跑。

旧 /public/software/deepmd-kit/3.2.0-cuda12.9 与当前 3.2.0-source 是不同部署,路径和运行环境不能混用。版本限制及依赖见 DeePMD 部署索引。

DeePMD:训练入口与目录 #

以 3.2.0 源码环境、核时用户 P100 为例,先准备 input.json 和其中引用的数据集:

cp -i /public/slurm_scripts/hs_user/deepmd-kit/3.2.0-source/p100/sub_deepmd_p100.sh .
# 二选一提交,不要在同一目录同时运行两条
sbatch sub_deepmd_p100.sh -pt input.json
# sbatch sub_deepmd_p100.sh -tf input.json

该脚本默认选择 PyTorch,也接受显式 -pt、-tf;当前模板限制单节点、单 GPU、单 task。不能通过只增加 gres 将它变成多卡分布式训练脚本。2.2.11 只有 TensorFlow,不能照抄上述 PyTorch 用法。

阶段用户需检查的内容
数据准备原子类型映射、坐标/盒子/能量/力等数据及单位是否一致
训练输入输入格式与软件版本、后端、描述符和数据路径匹配
训练过程日志、损失曲线、检查点是否持续更新;有无 NaN 或异常退出
模型导出用同版本、同后端处理训练检查点,记录导出命令
模型测试使用独立测试数据,对比能量、力,必要时检查应力
LAMMPS 使用模型格式、类型映射与对应 C/C++ 构建匹配

训练完成、freeze 成功和模型适合目标模拟是三个不同检查。不要只看训练损失下降就跳过独立测试;也不要只把模型文件改后缀,当成 TF/PT 格式转换。

需要查看命令用法时,在对应环境中执行帮助命令;实际训练和批量推理仍提交计算节点:

source /public/toolkit/miniconda3/etc/profile.d/conda.sh
conda activate deepmd-kit-3.2.0
dp --version
dp --pt freeze --help
dp --pt test --help

5.4 LAMMPS 与 PLUMED #

通用 LAMMPS 安装根目录包括:

构建安装根目录
29Aug2024 Update 4/public/software/lammps/29Aug2024_update4
22Jul2025 Update 6/public/software/lammps/22Jul2025_update6

DeePMD 配套构建按下表分别安装,不只根据 LAMMPS 日期选择可执行程序。

DeePMD 版本LAMMPS 安装目录名,位于 /public/software/lammps
2.2.112Aug2023_update4-deepmd-2.2.11-source
3.0.0rc029Aug2024_update4-deepmd-3.0.0rc0-source
3.0.129Aug2024_update4-deepmd-3.0.1-source
3.1.322Jul2025_update6-deepmd-3.1.3-source
3.2.022Jul2025_update6-deepmd-3.2.0-source

配套构建按 {p100,v100}/{gpu,kokkos} 区分,内置 DeePMD 和 PLUMED 2.9.5。PLUMED 安装在 /public/software/plumed/2.9.5/deepmd-kit-<版本>,启用 crystallization、opes、ves、funnel,不启用 PLUMED 的 pytorch 模块。

公共脚本位于 /public/slurm_scripts/{hs_user,tc_user}/lammps,目录名同时标明 LAMMPS、DeePMD 和 PLUMED 版本。GPU 包与 KOKKOS 的启动参数不同,优先选择相应模板。

3.2.0 的 V100 deepmd/kk 图模型路径已做定向验证;P100 受该路径使用的 Triton 算力要求限制,不能把“已编译注册”理解为该路径可用。2.2.11 配套使用普通 pair_style deepmd,没有 deepmd/kk。

LAMMPS / PLUMED 编译方式与环境 #

DeePMD 配套 LAMMPS 使用 CMake,内置集成 DeePMD 与 PLUMED,不是启动时要求用户执行 plugin load 的部署。每个 DeePMD 版本对应独立前缀,P100/V100 再各分 GPU 包和 KOKKOS 两套,共四套。

构建项已交付方式
C/C++ 工具链与对应 DeePMD 源码栈匹配,见上一节 GCC/CUDA 版本表
MPIHPC-X 2.50 原装 /public/toolkit/hpcx/2.50/ompi5;3.2.0 记录为 Open MPI 5.0.10rc2
GPU 包CUDA 构建,P100/V100 分目标;GPU_PREC=mixed
KOKKOSCUDA 后端,分别匹配 Pascal60/Volta70;保留上游数值精度配置
PLUMED 接口内置 LAMMPS 接口,运行脚本指向匹配的 PLUMED kernel
精度边界GPU 包 mixed 不等于 DeePMD 模型、TF/PT 或整套 KOKKOS 全部变为 mixed
构建范围3.2.0 使用 most.cmake 包集合加 PLUMED;旧版包集合与兼容修改查各自记录

PLUMED 2.9.5 从源码通过 configure → make → make install 构建,各 DeePMD 环境独立安装。使用匹配的 MPI C/C++ 包装器,链接各自环境的 BLAS/LAPACK、GSL、FFTW,提供共享库与 Python 接口。已启用 MPI、rpath,并明确增加 crystallization、opes、ves、funnel;关闭 libtorch / pytorch 模块。这四个是指定增加的模块,不表示程序只有四个模块。

3.2.0 配套 PLUMED 最终构建采用 -O3 -march=haswell -ffp-contract=off;其他版本应以各自最终日志为准,不能仅因同为 2.9.5 就认定依赖 ABI 完全相同。

GROMACS 使用的 PLUMED 2.9.4 是另两套环境:CPU 为 oneAPI 2024.2 / Intel MPI,GPU 为 GCC / Open MPI 5.0.10。不要把这两套旧模块叠加到 DeePMD 2.9.5 的作业环境。来源见 PLUMED 索引。

通用 LAMMPS 是另一套源码交付,每个日期版本有 8173m、P100 GPU/KOKKOS、V100 GPU/KOKKOS 五套:

通用构建编译与依赖
CPU 8173moneAPI 2024.2、Intel MPI、匹配的 PLUMED 2.9.4
P100 / V100GCC、独立 Open MPI 5.0.10、CUDA 12.8、MKL、匹配的 PLUMED 2.9.4
GPU 包mixed 精度
KOKKOS / LAMMPS 22Jul2025 Update 6双精度;Kokkos 4.6.2
KOKKOS / LAMMPS 29Aug2024 Update 4双精度;Kokkos 4.3.1

PLUMED 2.9.4 的 CPU 构建通过 mpiicx/mpiicpx、ifx 编译,目标 skylake-avx512,MKL LP64 sequential,启用 GSL/zlib/OpenMP,关闭 Python 接口。它不适用于 P100 的 Haswell CPU。通用版与 DeePMD 配套版即使 LAMMPS 日期相同,也不意味着包集合、MPI 或依赖相同。来源:LAMMPS 部署索引、PLUMED 2.9.4 CPU 配置。

LAMMPS:提交与模式选择 #

以 DeePMD 3.2.0 + PLUMED 2.9.5 的 P100 GPU 包构建为例:

cp -i /public/slurm_scripts/hs_user/lammps/22Jul2025_update6-deepmd-3.2.0-plumed-2.9.5/p100/gpu/sub_lammps_p100_gpu.sh .
sbatch sub_lammps_p100_gpu.sh in.lammps deepmd

准备 in.lammps 及其引用的结构、势函数或模型。若使用 PLUMED,还需输入中启用相应 fix 并提供 PLUMED 输入文件;安装了 PLUMED 不代表普通模拟自动施加偏置。

模式适用内容注意事项
deepmd普通 DeePMD TF/PT 模型后端使用 GPU,不自动为所有 pair_style 加 /kk
classic支持所选加速包的传统势GPU 与 KOKKOS 的加速参数由各自模板处理
deepmd-kk相应图模型及 deepmd/kk当前 3.2.0 要选 V100 KOKKOS 模板;P100 GPU 模板会拒绝

以上模式参数以这套 3.2.0 模板为准,其他版本先阅读其脚本头部。输出日志名可能带作业编号,例如 log.lammps.12345;检查实际运行步数、温压/能量、报错和结束信息。PLUMED 的 COLVAR/HILLS 等输出取决于具体输入动作,不是每次运行都会生成。

单/双卡比较时,除了是否完成,还应比较物理量、每步时间和重复运行的一致性。不同浮点归约顺序会造成数值差异,不应要求长时间混沌轨迹逐帧完全一致。

5.5 DP-GEN #

DP-GEN 0.13.3 使用独立环境 /public/toolkit/miniconda3/envs/dpgen。主控、训练、LAMMPS 探索与 VASP 标注分别使用对应环境。

module load dpgen/0.13.3

配套工作流目录位于 /public/slurm_scripts/{hs_user,tc_user}/dpgen。每套目录包含配置程序、主控脚本与辅助启动器,使用时复制并阅读整套目录的 README,不要只复制其中一个 run.sh。

yskit 菜单主要面向可直接提交的 Slurm 脚本,不展示 DP-GEN 的所有辅助启动器。轻量主控可按模板说明在 login01 运行,训练、探索和标注由 Slurm 提交到计算节点。

新模板已做配置和组件检查,不代表每一种节点组合都完成了完整生产流程。详情见 DP-GEN 记录。

DP-GEN 安装方式与环境 #

DP-GEN 0.13.3 使用 Python 3.12 的独立 Conda 环境,Conda 环境通过镜像创建,程序由 pip 安装,不是 Intel/NVHPC 编译的 MPI 程序。模块只选择该 Python 环境的入口,不应为主控加载训练用的所有 CUDA/MPI 库。

归档安装依赖包含 dpdispatcher 1.1.0、dpdata 1.1.0、NumPy 2.5.3、ASE 3.29.0 等;这是安装记录快照。训练、探索、标注的编译器与加速能力分别来自 DeePMD、LAMMPS、VASP,不能将这些能力归到 DP-GEN 主控自身。

来源:DP-GEN 安装记录。

DP-GEN:首次运行前核对 #

DP-GEN 需要一整套工作流,而不是只有 Slurm 文件。复制所选模板目录后,先读 README,再逐项核对:

  1. 训练使用哪个 DeePMD 版本和后端,模型输出是否适配探索用的 LAMMPS。
  2. 探索使用 P100 还是 V100、GPU 包还是 KOKKOS,输入与启动器是否对应。
  3. 标注使用哪个 VASP 功能分支、CPU/GPU 程序及用户可用分区。
  4. 工作目录、初始结构、赝势和数据路径是否属于当前用户且可读写。
  5. 单任务资源、并发数量和每轮任务规模是否符合账户配额。

先完成小规模的一轮训练—探索—标注连通性检查,再扩大采样规模。主控退出不代表队列中的所有子任务都已停止;排障或续跑时同时检查主控记录与 Slurm 作业,避免重复产生子任务。

5.6 GROMACS #

版本平台构建类型路径规则
2025.58173m、P100、V100threadmpi、mpi-plumed/public/software/gromacs/2025.5/<节点>/<构建类型>
2026.38173m、P100、V100threadmpi、mpi-plumed/public/software/gromacs/2026.3/<节点>/<构建类型>

两类构建均采用 mixed 精度。threadmpi 使用内部线程 MPI;mpi-plumed 使用外部 MPI,并配套 PLUMED 2.9.4。

公共脚本位于 /public/slurm_scripts/{hs_user,tc_user}/gromacs。准备 md.tpr;需要 PLUMED 时另准备与体系匹配的 plumed.dat。

thread-MPI 的 -ntmpi/-ntomp 与外部 MPI 的进程配置不同,不能只调整 Slurm 的 --ntasks 就认为完成了多卡配置。已有 CPU 水盒验证与其他构建的验证范围见 GROMACS 记录。

GROMACS 编译方式与环境 #

2025.5 与 2026.3 均按三种硬件、两类并行模式从源码 CMake Release 构建,采用共享库、OpenMP 和 mixed 精度(GMX_DOUBLE=OFF)。

项目8173mP100 / V100
编译器oneAPI 2024.2.1GCC/G++ 13.3.0
CPU SIMDAVX_512AVX2_256
GPUCPU 后端CUDA 12.8,nvcc 12.8.93;sm_60 / sm_70
FFTFFTW;BLAS/LAPACK 链接 MKLFFTW 3.3.10 + cuFFT;内部 BLAS/LAPACK
外部 MPI 构建Intel MPI 2021.13Open MPI 5.0.10,独立 CUDA12.8 前缀
PLUMED kernel2.9.4 oneapi2024.22.9.4 gcc-openmpi5.0.10

threadmpi 开启内部线程 MPI、关闭 PLUMED;mpi-plumed 设置 GMX_MPI=ON、GMX_THREAD_MPI=OFF、GMX_USE_PLUMED=ON。因此两种目录不只是不同启动脚本,而是编译配置不同的程序。

已有配置包含 TNG,关闭 hwloc/tracing;精确的 Colvars 版本随 GROMACS 版本而异,不统一填成同一版。动态库检查通过不等于 GPU 直接通信、跨节点或 PLUMED 偏置生产算例全部验证。相关编译配置来自用户回传及保存的版本/缓存信息,完整证据范围见 GROMACS 索引。

GROMACS:输入和输出 #

当前模板默认读取 md.tpr,以 md 为输出前缀。TPR 应由与目标运行环境兼容的 GROMACS 工作流生成,并包含所需的拓扑、坐标和运行参数。

以核时用户 P100、2026.3 thread-MPI 为例:

cp -i /public/slurm_scripts/hs_user/gromacs/2026.3/p100/threadmpi/sub_gmx-2026.3-p100-threadmpi.sh .
sbatch sub_gmx-2026.3-p100-threadmpi.sh

模板内部已经设置 CPU 线程和 GPU offload 选项。修改 --cpus-per-task 会传给 -ntomp,但增加 GPU 数量不意味着内部 -ntmpi 1 自动改变。PLUMED 任务应改选 mpi-plumed 模板并核对其输入,而不是只给 thread-MPI 命令追加 PLUMED 参数。

重点检查 md.log 的运行设备、步数与性能信息,保留续算需要的检查点。断点续算应核对原始输出和检查点的一致性,不在未检查的情况下覆盖原目录重新开始。

5.7 SPPARKS #

安装版本标识:08Oct25。8173m 程序位于:

/public/software/spparks/spparks-08Oct25/8173m/spparks

公共模板在 spparks/08Oct25/8173m 子目录,当前示例读取 in.potts。按实际模型修改输入文件,使用 CPU 分区提交。

SPPARKS 编译环境的已知范围 #

当前 08Oct25 二进制和模板采用 oneAPI 2024.2 运行环境,通过 Intel MPI 启动,定位为 8173m CPU MPI 程序,脚本设 OMP_NUM_THREADS=1。目前项目未归档该二进制的完整编译命令、具体编译器版本及优化 flags;不能仅凭脚本加载 oneAPI 就断言原始 C++ 编译器必为 icpx,也不将它列为已编译 GPU 加速版。

6. 辅助工具 #

6.1 VASPKIT #

当前公共配置为 VASPKIT 1.3.5:

module load vaspkit/1.3.5
vaspkit

安装路径:/public/software/vaspkit/vaspkit.1.3.5。启动器首次运行时初始化个人 ~/.vaspkit,已有配置会保留。无需照搬其他集群覆盖配置文件的命令。

VASPKIT 安装方式与环境 #

1.3.5 使用已部署的程序包,项目记录的是模块、启动包装器、赝势路径和 Python 辅助环境配置,没有本集群从源码重编的证据。不能按 VASP 的 oneAPI 版本给 VASPKIT 填一个推测的编译器。

Python 辅助环境为 /public/toolkit/miniconda3/envs/vaspkit,主要服务相关脚本/绘图功能;这不意味着 VASPKIT 主程序本身是 Python 编译。具体 Python 包版本不能拿早期建议版本替代实际清单。来源:VASPKIT 部署记录。

6.2 Wannier90 #

版本独立程序能力安装前缀
2.1.0wannier90.x 串行;postw90.x 支持 MPI/public/software/wannier90/2.1.0/oneapi-2023.2-ifort/8173m
3.1.0wannier90.x、postw90.x 支持 MPI/public/software/wannier90/3.1.0/oneapi-2024.2-ifx/8173m

可执行程序在各前缀的 bin 中。供 VASP 调用的 libwannier.a 是单独的库接口,不能把 VASP 内部调用库等同于启动 wannier90.x。

公共独立程序模板位于 /public/slurm_scripts/{hs_user,tc_user}/wannier90。VASP 5.4.4 链接 2.1.0,当前五个 6.x 构建链接 3.1.0;接口输入限制见 Wannier90 交付记录。

Wannier90 编译方式与环境 #

版本Fortran 工具链MPI 包装器与程序目标VASP 链接库
2.1.0oneAPI 2023.2 ifortmpiifort;postw90 支持 MPI,wannier90 串行CPU 8173m单独串行编译的 libwannier.a
3.1.0oneAPI 2024.2 ifxmpiifx;wannier90、postw90 支持 MPICPU 8173m单独串行编译的 libwannier.a

通过源码 Make 系统和各自 make.inc 构建,优化参数为 -O2 -xCORE-AVX512,数学库为 MKL sequential(-qmkl=sequential)。独立 MPI 配置设置 COMMS=mpi,包装器分别为 mpiifort、mpiifx;串行库配置与独立 MPI 程序配置分开保存。VASP 5.4.4/6.x 分别链接同一 Fortran 工具链下的库,避免混用 ifort/ifx/NVHPC 的 Fortran 模块和运行库。

本次 Wannier90 是 CPU 构建;未来 GPU VASP 若启用该接口,需要适配 NVHPC 的库构建,不能直接把当前 Intel 编译的 libwannier.a 填进 GPU makefile。调用库的局域化阶段与 VASP 的 GPU 电子结构计算也属于不同阶段。来源:Wannier90 交付记录。

Wannier90:独立程序如何提交 #

3.1.0 模板允许把不带 .win 后缀的文件基名作为第一个参数。例如当前目录有 silicon.win 及本次步骤所需的其他数据:

cp -i /public/slurm_scripts/hs_user/wannier90/3.1.0/8173m/sub_wannier90_3.1.0_8173m.sh .
sbatch sub_wannier90_3.1.0_8173m.sh silicon

后处理使用 sub_postw90_3.1.0_8173m.sh,同样传入 seedname。没有传参时,模板默认 wannier90。不要把 silicon.win 整个文件名传成 seedname,导致程序查找错误名称。

Wannier90 局域化与 postw90 后处理是不同阶段,所需文件由具体流程决定。先确认 VASP 已生成匹配的接口数据,再运行相应阶段;不能仅复制一个 .win 就认为所有计算输入齐全。

6.3 LOBSTER #

已核对程序启动信息,安装版本为 4.1.0、5.1.1,普通用户均可执行。

版本程序公共脚本文件名
4.1.0/public/software/lobster/4.1.0/lobstersub_lobster.4.1.0.sh
5.1.1/public/software/lobster/5.1.1/lobstersub_lobster.5.1.1.sh

脚本位于 /public/slurm_scripts/{hs_user,tc_user}/lobster/8173m,也可通过 yskit 选择。模板申请 CPU 8173m 单节点、1 个进程、56 个 CPU 线程,设置 OMP_NUM_THREADS 后直接运行程序。调整线程数时修改 --cpus-per-task。

在包含 lobsterin 及相应电子结构计算输出的目录提交。已完成脚本语法与普通用户程序启动检查,尚未进行完整成键分析算例验收。修正详情见 LOBSTER 脚本维护记录。

LOBSTER 二进制环境 #

此处为已有二进制部署,没有本地源码重编记录。程序启动横幅显示:4.1.0 为 g++ 7.5.0,5.1.1 为 g++ 9.3.0。这是程序自身报告的编译器信息,不代表要用户在作业里加载这两个 GCC 版本。

两版都以单进程线程方式运行,当前模板由 OMP_NUM_THREADS 控制线程数,不通过 mpirun 启动。未归档原始优化 flags 或完整链接选项,因此不宣称它们专门以 AVX-512 编译,也不列为 GPU 加速程序。

6.4 其他工具 #

工具路径定位
yskit/public/toolkit/yskit交互选择、复制公共 Slurm 脚本
gpu-burn/public/toolkit/gpu-burn管理员 GPU 压力测试工具,不作为普通计算作业入口

yskit 与 gpu-burn 的实现环境 #

yskit 是本地维护的脚本选择工具,读取公共 Slurm 文件并复制,不需要 MPI/CUDA 编译环境。应用计算使用复制出来的模板所指定的工具链。

gpu-burn 从上游提交 3ead140434da9473582b68452f7115967a7a0581 源码通过 Make 构建,CUDA 12.8,设备代码同时包含 sm_60/sm_70,构建并行度为 4。源码和 Makefile 未修改,入口包装器设置 CUDA 库及内核文件位置。P100 验证 FP32/FP64,V100 验证 FP32/FP64/Tensor;这些是压力测试模式,不是集群其他应用的精度设置。来源:gpu-burn 构建记录。

本指南没有将参考网页中的 CP2K、GPUMD、Phonopy 等软件直接列为当前已安装软件;新增条目以本集群实际安装和检查结果为依据。

7. 常见问题 #

如何选择 P100 或 V100? #

先确认账户允许的分区,再根据软件支持、显存和实际性能选择。需要超过单卡 16GB 显存的任务可评估 V100 32GB;多卡不自动等于显存可任意合并。

申请两张 GPU 是否只修改 gres? #

不一定。GPU VASP、ABACUS PW、LAMMPS 和 GROMACS 的进程、线程及应用内部参数不同。选择相应软件模板,同时核对 ntasks、cpus-per-task、gres 和输入参数。

为什么仍需保留 VASP 的 HCOLL 设置? #

当前 GPU VASP 模板保留 OMPI_MCA_coll_hcoll_enable=0。已有测试表明升级 R580 小版本并没有消除旧通信栈的 HCOLL 初始化钩子报错。删除单独 err 文件只会改变输出位置,不能修复或消除错误。

单精度是否总是更划算? #

单精度可能降低耗时和显存,但需要检查科学结果。ABACUS 已提供运行时精度选择,默认仍为 double;能量接近也不代表力和应力已足够准确。

为什么不能只根据软件目录判断支持哪些功能? #

目录可能包含历史构建、实验程序或未完整验证的版本。优先使用公共提交模板及对应交付记录。比如旧式 vasp/vasp.6.4.2 路径不作为本指南正式 GPU VASP 的默认入口。

任务一直排队,怎么判断原因? #

squeue -u "$USER" -o '%.18i %.12P %.20j %.2t %.10M %.6D %R'
scontrol show job JOBID
状态/原因含义与处理方向
PENDING / Resources所申请的资源尚不能分配;检查申请是否过大
PENDING / Priority当前调度优先级下仍需等待
QOS 或 Association 相关限制核对账户并发、资源或时长限制,必要时联系管理员
Invalid account / partition核对用户权限与脚本分区,不随意换到另一类用户分区
节点 DRAIN / DOWN管理维护或故障;用户不要自行恢复节点状态

排队时长受其他作业和调度策略影响。sinfo 显示节点有空闲资源,不代表当前账号或当前资源组合一定可以马上启动。

作业启动后立即结束,怎么查? #

按“调度状态 → 作业日志 → 应用输出 → 环境与输入”的顺序检查:

sacct -j JOBID --format=JobID,State,ExitCode,Elapsed,AllocCPUS
scontrol show job JOBID
tail -n 80 JOBID.out
现象优先检查
No such file / 无法读取输入从哪个目录提交、相对路径、文件名大小写
Permission denied脚本调用的程序和输入是否对当前账号可访问
Module not found模块名称是否与模板一致、模块搜索路径是否正确
error while loading shared libraries是否加载了该构建的配套环境,是否混入其他 MPI/CUDA
Python ModuleNotFoundError日志中的 Python/Conda 环境;不要直接向 base 安装来掩盖问题
Invalid device / 没有 GPUGPU 申请、可见设备及模板的节点架构
OUT_OF_MEMORY区分主机内存耗尽与应用报告的显存不足
TIMEOUT调度时限到达;检查检查点,再决定如何续算
COMPLETED 但没有有效结果软件可能以 0 退出仍报告输入错误;必须检查应用日志

ExitCode 通常显示为 退出码:信号。非零值有助于定位问题,但 0:0 不证明科学结果合格。例如 LOBSTER 在缺少输入时可能输出错误后返回 0。

GPU 报错是否都是驱动问题? #

不是。输入、显存、编译器生成代码、动态库混用、MPI 通信和硬件都可能导致 GPU 错误。先保存完整错误和作业环境,再判断所属层次。

HCOLL 初始化报错与 CUDA illegal address 不是同一种错误。现有 VASP 模板关闭 HCOLL 是针对已确认的通信组件问题,不能保证修复程序内部的非法内存访问。NO_STOP_MESSAGE=1 也不修复数值或内存错误。

不要通过删除日志、降低 UCX 日志级别或更换驱动来代替定位。普通用户发现疑似节点故障时,把作业编号、节点、时间和完整错误交给管理员;不要自行在整机显卡上运行压力测试。

怎样做一次有意义的性能对比? #

  1. 固定软件版本、输入、初始状态与收敛条件,每种配置用独立目录。
  2. 先验证单配置可以正确完成,再比较 CPU、单卡和多卡。
  3. 同时记录总耗时与程序主要计算阶段耗时,避免启动开销主导结论。
  4. 记录 MPI 数、线程数、GPU 数、节点和是否存在其他负载。
  5. 对短任务重复测试,关注差异是否超过波动,并检查结果精度。

如果 4 卡比 2 卡只快很少,增加资源未必划算。对训练数据、结构优化或高精度能量差,还要把力、应力及收敛表现纳入判断,不能只比较总能量。

提问或报障时提供哪些信息? #

建议按下面格式提供,能减少反复确认:

软件及版本:
功能分支 / 后端:
任务目录:
提交脚本与提交命令:
Slurm 作业编号:
节点及 CPU / GPU 数:
首次出现问题的时间:
预期结果与实际现象:
完整错误所在日志及行附近内容:
同输入是否在其他版本或单卡成功:

保留实际提交的脚本与日志;不要只发最后一句 MPI_ABORT,前面的第一处错误通常更有价值。不要在公开渠道粘贴账号密码、密钥或受限制的完整势文件。

8. 文档维护 #

本文件作为面向用户的 Markdown 主文档维护:

/public/software/agent/cluster-guide.md

表格统一按软件版本逐行列出;不同版本不合并在同一行,也不用“同上六版”等省略具体版本。不同依赖组件的版本可以在对应构建行中共同列明。

新增或升级软件后,更新以下内容:

  1. 版本、实际安装路径及适用节点,源码或二进制部署方式。
  2. 编译器与 MPI 版本、CUDA/数学库、CPU/GPU 指令目标、关键编译开关及补丁。
  3. 运行环境、模块名称和公共 Slurm 脚本位置。
  4. 已验证的功能、精度、GPU 数量及已知限制。
  5. 本页更新日期和下方变更记录。

详细构建过程、失败日志、补丁和校验值保留在各软件记录目录;本页保留用户选择和运行软件所需的信息。长期维护时直接修改对应章节,不在正文反复追加互相冲突的旧状态。

日期更新内容
2026-09-29统一版本表格:GROMACS、VASP、基础工具、Wannier90 等逐版本独立列行
2026-09-29按用户重点补充各软件编译方式、工具链、MPI、CUDA、数值库、精度、优化与功能开关,标明旧二进制证据边界
2026-09-29扩充登录与传输、目录组织、Slurm 参数、逐软件输入与提交流程、性能实测解读、排障及报障信息
2026-09-29建立当前 ch01 用户指南;核对分区、软件路径、VASP 功能分支和驱动;加入 yskit、ABACUS 单/双精度及验收范围;修正 LOBSTER 模板版本、路径、线程配置与执行权限

编排形式参考:彩虹一号集群使用手册。硬件、软件、路径与验证状态采用当前 ch01 的现场信息和项目记录。

维护依据:项目索引、交接记录以及正文链接的各软件交付记录。现有计算助手指南 codex/site/cluster-agents.md 是独立文档,本次未覆盖其内容,也未将本页发布到网站。