ch01 集群使用指南 #
更新日期:2026-09-29
登录节点:login01
公共提交脚本:/public/slurm_scripts
脚本选择助手:yskit
本指南面向在 ch01 集群上提交科学计算任务的用户,重点介绍各软件的编译方式、编译器、MPI、CUDA、数学库、指令集、精度与功能,同时提供计算资源、安装路径和常用操作。软件清单依据当前安装目录、公共脚本及项目验收记录整理;节点空闲情况以 Slurm 实时查询为准。
目录 #
- 1. 集群简介
- 2. 节点配置与分区
- 3. 登录、目录与任务提交
- 4. 基础软件环境
- 编译环境与 MPI 对照
- 5. 应用软件
- VASP · ABACUS · DeePMD-kit
- LAMMPS / PLUMED · DP-GEN · GROMACS · SPPARKS
- 6. 辅助工具
- 7. 常见问题
- 8. 文档维护
1. 集群简介 #
ch01 提供 Intel Xeon CPU 节点以及 NVIDIA P100、V100 GPU 节点,用于第一性原理计算、分子动力学、机器学习势训练和相关数据处理。
用户在 login01 整理输入、选择软件和提交作业,计算任务通过 Slurm 分配到计算节点。不要在登录节点直接运行生产模拟或模型训练。
GPU 是否更快取决于软件实现、体系规模、k 点数量、显存和并行配置。小体系或通信占比较高的任务,不一定随显卡数量增加而加速。
2. 节点配置与分区 #
2.1 计算资源 #
内存列为 Slurm 配置的可调度内存,单位 MB。
| 分区 | 节点 | CPU 核数 | 内存 | GPU | 单卡申请参数 |
|---|---|---|---|---|---|
cpu-8173m | ccn001-8173m | 56 | 187200 | 无 | 不申请 GPU |
gpu-8p100-hs | gcn001-8p100 | 36 | 124800 | 8 × P100 16GB | --gres=gpu:p100-16g:1 |
gpu-8p100-tc | gcn002-8p100 | 36 | 124800 | 8 × P100 16GB | --gres=gpu:p100-16g:1 |
gpu-8v100-16g-hs | gcn001-8v100-16g | 24 | 187200 | 8 × V100 16GB | --gres=gpu:v100-16g:1 |
gpu-8v100-32g-tc | gcn001-8v100-32g | 24 | 187200 | 8 × 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 程序还需对应的线程环境变量 |
--gres | GPU 型号及数量 | 本集群必须使用带型号的写法 |
--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 进程 | 每进程 CPU | GPU | 还需对应的设置 |
|---|---|---|---|---|
| GPU VASP 单卡 | 1 | 1 | 1 | 对应 P100/V100 程序、匹配的 INCAR |
| ABACUS CPU | 28 | 2 | 0 | OMP_NUM_THREADS=2 |
| ABACUS GPU PW 单卡 | 1 | 2 | 1 | INPUT 中 device、求解器与 kpar |
| DeePMD 单卡训练模板 | 1 | 2 | 1 | 选择 TF/PT 后端;模板限制单卡 |
| LAMMPS 配套 GPU 模板 | 每 GPU 1 进程 | 按模板 | 与进程数一致 | 区分 deepmd、classic、deepmd-kk 模式 |
| GROMACS GPU thread-MPI | Slurm 1 个 task | 4 | 1 | 程序内部 -ntmpi 1 -ntomp 4 |
| LOBSTER | 1 | 56 | 0 | OMP_NUM_THREADS=56,直接启动 |
| Wannier90 3.1.0 MPI 模板 | 56 | 1 | 0 | seedname 参数;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-8p100 | 580.173.02 |
gcn002-8p100 | 580.178.04 |
gcn001-8v100-16g | 580.173.02 |
gcn001-8v100-32g | 580.173.02 |
nvidia-smi 标题中的 CUDA 版本表示驱动支持能力,不代表当前软件实际使用的 CUDA Toolkit 版本。
4.6 如何阅读软件编译环境 #
各软件章节下面的“编译方式与环境”说明当前交付程序实际如何构建,不是要求用户重新安装。编译器负责生成程序,MPI 负责进程通信,CUDA/NVHPC 提供 GPU 编译与运行支持,MKL/OpenBLAS/FFTW/ELPA 等提供数值计算能力。这几层的版本需要分别记录,不能只用一句“Intel 编译”或“支持 CUDA”概括。
| 常见名称 | 在本集群中的含义 |
|---|---|
| ifort / icc | Intel 经典 Fortran/C 编译器,主要用于 VASP 5.4.4 及配套库 |
| ifx / icx / icpx | Intel LLVM 系列 Fortran/C/C++ 编译器,主要用于新 CPU 构建 |
| mpiifort / mpiifx | Intel MPI 的 Fortran 编译包装器,底层分别调用 ifort/ifx |
| nvfortran / nvc / nvc++ | NVHPC 编译器;GPU VASP 使用 OpenACC 路径 |
| GCC / G++ / GFortran | GNU 编译器,ABACUS GPU、DeePMD、GROMACS GPU 等使用 |
| mpicc / mpicxx / mpif90 | MPI 包装器名称;仅凭命令名不能判断底层编译器和 MPI 来源 |
| MKL LP64 | MKL 的 32 位整数接口;不是将浮点数改成单精度 |
| AVX-512 / AVX2 | CPU 指令集目标;不等于 GPU 架构 |
| sm_60 / sm_70 | 分别对应 P100 / V100 GPU 设备代码目标 |
| OpenMP / OpenACC | 分别用于线程并行和加速器卸载的编程接口;软件可能同时使用 |
| mixed / double / single | 软件或特定组件的精度策略;不同软件不能直接类比 |
MPI 环境对照 #
| 软件构建 | 使用的 MPI 来源 | 不可直接替代为 |
|---|---|---|
| 新编 CPU VASP、CPU ABACUS、CPU GROMACS 外部 MPI | 对应 oneAPI 的 Intel MPI | NVHPC 自带 Open MPI |
| 已交付 GPU VASP 25.3 构建 | NVHPC 25.3 的 HPC-X 2.22.1 / Open MPI 4.1.7rc1 | DeePMD 所用 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.8 | Intel 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.10 | Intel MPI;MKL、ScaLAPACK、Intel MPI BLACS | 8173m,-xCORE-AVX512;各分支保留批准配置 |
| 本次重建的 6.3.2 CPU 分支(普通版是否重建见正文) | oneAPI 2024.2;ifx/icx/icpx 2024.2.1 | Intel MPI 2021.13;MKL 2024.2 LP64、ScaLAPACK | 8173m,通常显式 -xCORE-AVX512;历史普通版另见下文 |
| 本次重建的 6.4.2 CPU 分支(普通版是否重建见正文) | oneAPI 2024.2;ifx/icx/icpx 2024.2.1 | Intel MPI 2021.13;MKL 2024.2 LP64、ScaLAPACK | 8173m,通常显式 -xCORE-AVX512;历史普通版另见下文 |
| 本次重建的 6.4.3 CPU 分支(普通版是否重建见正文) | oneAPI 2024.2;ifx/icx/icpx 2024.2.1 | Intel MPI 2021.13;MKL 2024.2 LP64、ScaLAPACK | 8173m,通常显式 -xCORE-AVX512;历史普通版另见下文 |
| 本次重建的 6.5.1 CPU 分支(普通版是否重建见正文) | oneAPI 2024.2;ifx/icx/icpx 2024.2.1 | Intel MPI 2021.13;MKL 2024.2 LP64、ScaLAPACK | 8173m,通常显式 -xCORE-AVX512;历史普通版另见下文 |
| 本次重建的 6.6.1 CPU 分支(普通版是否重建见正文) | oneAPI 2024.2;ifx/icx/icpx 2024.2.1 | Intel MPI 2021.13;MKL 2024.2 LP64、ScaLAPACK | 8173m,通常显式 -xCORE-AVX512;历史普通版另见下文 |
| GPU 普通 6.3.2 | NVHPC 25.3;oneAPI 2023.2 仅提供 MKL | NVHPC 自带 HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 12.8;P100 cc60、V100 cc70,分别编译 |
| GPU 普通 6.4.3 | NVHPC 25.3;oneAPI 2023.2 仅提供 MKL | NVHPC 自带 HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 12.8;P100 cc60、V100 cc70,分别编译 |
| GPU 普通 6.5.1 | NVHPC 25.3;oneAPI 2023.2 仅提供 MKL | NVHPC 自带 HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 12.8;P100 cc60、V100 cc70,分别编译 |
| GPU VTST 6.3.2(本次补齐) | NVHPC 25.3;oneAPI 2023.2 MKL | HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 12.8;P100 cc60、V100 cc70,分别编译 |
| GPU VTST 6.4.2(本次补齐) | NVHPC 25.3;oneAPI 2023.2 MKL | HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 12.8;P100 cc60、V100 cc70,分别编译 |
| GPU VTST 6.4.3(本次补齐) | NVHPC 25.3;oneAPI 2023.2 MKL | HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 12.8;P100 cc60、V100 cc70,分别编译 |
| GPU VTST 6.5.1(本次补齐) | NVHPC 25.3;oneAPI 2023.2 MKL | HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 12.8;P100 cc60、V100 cc70,分别编译 |
| GPU optcell 6.3.2 | NVHPC 25.3;oneAPI 2023.2 MKL | HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 12.8;P100 cc60、V100 cc70,分别编译;每节点最多 make -j16 |
| GPU optcell 6.4.2 | NVHPC 25.3;oneAPI 2023.2 MKL | HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 12.8;P100 cc60、V100 cc70,分别编译;每节点最多 make -j16 |
| GPU optcell 6.4.3 | NVHPC 25.3;oneAPI 2023.2 MKL | HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 12.8;P100 cc60、V100 cc70,分别编译;每节点最多 make -j16 |
| GPU optcell 6.5.1 | NVHPC 25.3;oneAPI 2023.2 MKL | HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 12.8;P100 cc60、V100 cc70,分别编译;每节点最多 make -j16 |
| GPU optcell 6.6.1 | NVHPC 25.3;oneAPI 2023.2 MKL | HPC-X 2.22.1 / Open MPI 4.1.7rc1;MKL OpenMPI BLACS | CUDA 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.a | Wannier90 2.1.0;本次为 CPU |
| Wannier90 / VASP 6.3.2 | -DVASP2WANNIER90,链接匹配工具链的 libwannier.a | Wannier90 3.1.0;本次为 CPU |
| Wannier90 / VASP 6.4.2 | -DVASP2WANNIER90,链接匹配工具链的 libwannier.a | Wannier90 3.1.0;本次为 CPU |
| Wannier90 / VASP 6.4.3 | -DVASP2WANNIER90,链接匹配工具链的 libwannier.a | Wannier90 3.1.0;本次为 CPU |
| Wannier90 / VASP 6.5.1 | -DVASP2WANNIER90,链接匹配工具链的 libwannier.a | Wannier90 3.1.0;本次为 CPU |
| Wannier90 / VASP 6.6.1 | -DVASP2WANNIER90,链接匹配工具链的 libwannier.a | Wannier90 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 配置输入 |
| BEEF | 5.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。不同功能分支是独立构建,不表示所有补丁同时包含。
| 功能分支 | 版本 | 用途 | 8173m | P100 / V100 |
|---|---|---|---|---|
vasp | 5.4.4 | 普通版本 | 已部署 | 未列入已交付 GPU 构建 |
vasp | 6.3.2 | 普通版本 | 已部署 | 已部署 |
vasp | 6.4.2 | 普通版本 | 已部署 | 已部署 |
vasp | 6.4.3 | 普通版本 | 已部署 | 已部署 |
vasp | 6.5.1 | 普通版本 | 已部署 | 已部署 |
vasp | 6.6.1 | 普通版本 | 已部署 | 已部署 |
vasp-optcell | 5.4.4 | IOPTCELL 晶胞约束 | 已部署 | 未列入已交付 GPU 构建 |
vasp-optcell | 6.3.2 | IOPTCELL 晶胞约束 | 已部署 | 已部署 |
vasp-optcell | 6.4.2 | IOPTCELL 晶胞约束 | 已部署 | 已部署 |
vasp-optcell | 6.4.3 | IOPTCELL 晶胞约束 | 已部署 | 已部署 |
vasp-optcell | 6.5.1 | IOPTCELL 晶胞约束 | 已部署 | 已部署 |
vasp-optcell | 6.6.1 | IOPTCELL 晶胞约束 | 已部署 | 已部署 |
vasp-vtst | 5.4.4 | VTST 相关功能 | 已部署 | 未列入已交付 GPU 构建 |
vasp-vtst | 6.3.2 | VTST 相关功能 | 已部署 | 已部署 |
vasp-vtst | 6.4.2 | VTST 相关功能 | 已部署 | 已部署 |
vasp-vtst | 6.4.3 | VTST 相关功能 | 已部署 | 已部署 |
vasp-vtst | 6.5.1 | VTST 相关功能 | 已部署 | 已部署 |
vasp-vtst | 6.6.1 | VTST 相关功能 | 已部署 | 已部署 |
vasp-wannier90 | 5.4.4 | Wannier90 接口 | 已部署 | 未列入已交付 GPU 构建 |
vasp-wannier90 | 6.3.2 | Wannier90 接口 | 已部署 | 未列入已交付 GPU 构建 |
vasp-wannier90 | 6.4.2 | Wannier90 接口 | 已部署 | 未列入已交付 GPU 构建 |
vasp-wannier90 | 6.4.3 | Wannier90 接口 | 已部署 | 未列入已交付 GPU 构建 |
vasp-wannier90 | 6.5.1 | Wannier90 接口 | 已部署 | 未列入已交付 GPU 构建 |
vasp-wannier90 | 6.6.1 | Wannier90 接口 | 已部署 | 未列入已交付 GPU 构建 |
vasp-sol | 5.4.4 | VASPsol | 已部署 | 未列入已交付 GPU 构建 |
vasp-sol | 6.3.2 | VASPsol | 已部署 | 未列入已交付 GPU 构建 |
vasp-sol | 6.4.2 | VASPsol | 已部署 | 未列入已交付 GPU 构建 |
vasp-sol | 6.4.3 | VASPsol | 已部署 | 未列入已交付 GPU 构建 |
vasp-sol | 6.5.1 | VASPsol | 已部署 | 未列入已交付 GPU 构建 |
vasp-sol | 6.6.1 | VASPsol | 已部署 | 未列入已交付 GPU 构建 |
vasp-vtst-sol++ | 5.4.4 | VTST + VASPsol++ | 已部署 | 未列入已交付 GPU 构建 |
vasp-vtst-sol++ | 6.3.2 | VTST + VASPsol++ | 已部署 | 未列入已交付 GPU 构建 |
vasp-cpvasp | 6.3.2 | CP-VASP v2 | 已部署 | 未列入已交付 GPU 构建 |
vasp-cpvasp | 6.4.2 | CP-VASP v2 | 已部署 | 未列入已交付 GPU 构建 |
vasp-beef | 5.4.4 | libbeef / 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 | 晶格、元素与原子坐标 | 元素顺序、数量、坐标类型是否正确 |
| POTCAR | PAW 数据 | 元素顺序与 POSCAR 一致,使用所需泛函对应的数据 |
| INCAR | 计算参数 | 任务类型、收敛条件、精度和并行参数 |
| KPOINTS | k 点采样 | 与体系和计算目的匹配;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/abacus | abacus/3.10.1-8173m |
| P100 | /public/software/abacus/3.10.1/p100/bin/abacus | abacus/3.10.1-p100 |
| V100 | /public/software/abacus/3.10.1/v100/bin/abacus | abacus/3.10.1-v100 |
ABACUS 编译方式与环境 #
使用 ABACUS 3.10.1 源码,CMake Release 构建,CPU/P100/V100 分别配置、安装;每套依赖也分别保存,不复用未经匹配的 VASP 数学库。
| 项目 | 8173m CPU | P100 / V100 GPU |
|---|---|---|
| C/C++/Fortran | oneAPI 2024.2 的 icx/icpx/ifx | GCC/G++/GFortran 13.3 |
| MPI | Intel MPI 2021.13 | 原装 HPC-X 2.50 ompi5 |
| CPU 目标 | AVX-512 | AVX2 |
| CUDA | 不启用 | CUDA Toolkit 12.8;sm_60 / sm_70 |
| BLAS/LAPACK | MKL LP64,sequential | OpenBLAS 0.3.30 |
| ScaLAPACK | MKL,Intel MPI 接口 | 独立 ScaLAPACK 2.2.2 |
| FFT | 配套 MKL/FFTW 接口 | FFTW 3.3.10 单/双精度、GPU 配套 CUDA 库 |
| ELPA | 2024.05.001 CPU 构建 | 2024.05.001,GPU 支持 |
| 泛函与杂化支持库 | Libxc 6.2.2、LibRI 0.2.1.1、LibComm 0.1.1 | 相同版本,按 GPU 工具链构建 |
| 其他依赖 | cereal 1.3.0 | cereal 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 | 原子结构,并引用元素赝势、所需轨道文件 |
| KPT | k 点设置;是否需要独立文件取决于所选输入方式 |
| 赝势文件 | 对应元素的离子实相互作用数据 |
| 数值原子轨道 | LCAO 路径需要与体系和计算方法匹配的轨道 |
| LCAO | 以局域原子轨道展开电子波函数的基组方法 |
| ELPA | 分布式本征值求解库,本次编译了适用的 GPU 支持 |
| cuSOLVER | NVIDIA 数值求解库;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 8173m | 56 MPI × 1 线程 | 16.10 |
| CPU 8173m | 28 MPI × 2 线程 | 17.22 |
| P100 | 1 GPU,1 MPI × 2 线程 | 25.87 |
| P100 | 2 GPU,2 MPI × 2 线程 | 18.24 |
| P100 | 4 GPU,4 MPI × 2 线程 | 13.59 |
| P100 | 8 GPU,8 MPI × 2 线程 | 14.07 |
| V100 32GB | 1 GPU,1 MPI × 2 线程 | 22.64 |
| V100 32GB | 2 GPU,2 MPI × 2 线程 | 19.04 |
该小体系的 P100 四卡比八卡更快,整节点 CPU 也比单卡 GPU 更快。测试环境和样本有限,生产任务应使用自己的规模、k 点和输入做短基准,而不是直接固定用最多 GPU。原始条件及误差数据见本节上方验收报告。
5.3 DeePMD-kit #
各源码版本使用独立 Conda 环境,公共环境位置为 /public/toolkit/miniconda3/envs/<环境名>。
| 版本 | 环境名 | 后端 |
|---|---|---|
| 2.2.11 | deepmd-kit-2.2.11 | TensorFlow |
| 3.0.0rc0 | deepmd-kit-3.0.0rc0 | TensorFlow、PyTorch |
| 3.0.1 | deepmd-kit-3.0.1 | TensorFlow、PyTorch |
| 3.1.3 | deepmd-kit-3.1.3 | TensorFlow、PyTorch |
| 3.2.0 | deepmd-kit-3.2.0 | TensorFlow、PyTorch |
DeePMD 编译方式与环境 #
这些 *-source 部署包含两个层次:Python 包从所选 DeePMD 源码通过 pip 构建安装;C/C++ 接口另用 CMake 编译,供内置 DeePMD 的 LAMMPS 调用。TF/PT 是环境中已安装的后端依赖,不等于本次把 TensorFlow 和 PyTorch 自身也从源码编译了一遍。
| DeePMD | Python | C/C++ 编译器 | CUDA 构建工具链 | TensorFlow | PyTorch |
|---|---|---|---|---|---|
| 2.2.11 | 3.11.16 | GCC 12.2.0 | 12.2.2,nvcc 12.2.140 | 2.15.1 | 未安装 |
| 3.0.0rc0 | 3.11.16 | Conda GCC/G++ 13.4 | 12.6 | 2.19.1 | 2.6.0+cu126 |
| 3.0.1 | 3.11 系列 | Conda GCC/G++ 13.4 | 12.6 | 2.19.1 | 2.6.0+cu126 |
| 3.1.3 | 3.11.16 | Conda GCC/G++ 13.4 | 12.6 | 2.19.1 | 2.6.0+cu126 |
| 3.2.0 | 3.12.14 | GCC/G++ 13.3.0 | 12.9.86 | 2.21.0 | 2.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.11 | 2Aug2023_update4-deepmd-2.2.11-source |
| 3.0.0rc0 | 29Aug2024_update4-deepmd-3.0.0rc0-source |
| 3.0.1 | 29Aug2024_update4-deepmd-3.0.1-source |
| 3.1.3 | 22Jul2025_update6-deepmd-3.1.3-source |
| 3.2.0 | 22Jul2025_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 版本表 |
| MPI | HPC-X 2.50 原装 /public/toolkit/hpcx/2.50/ompi5;3.2.0 记录为 Open MPI 5.0.10rc2 |
| GPU 包 | CUDA 构建,P100/V100 分目标;GPU_PREC=mixed |
| KOKKOS | CUDA 后端,分别匹配 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 8173m | oneAPI 2024.2、Intel MPI、匹配的 PLUMED 2.9.4 |
| P100 / V100 | GCC、独立 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,再逐项核对:
- 训练使用哪个 DeePMD 版本和后端,模型输出是否适配探索用的 LAMMPS。
- 探索使用 P100 还是 V100、GPU 包还是 KOKKOS,输入与启动器是否对应。
- 标注使用哪个 VASP 功能分支、CPU/GPU 程序及用户可用分区。
- 工作目录、初始结构、赝势和数据路径是否属于当前用户且可读写。
- 单任务资源、并发数量和每轮任务规模是否符合账户配额。
先完成小规模的一轮训练—探索—标注连通性检查,再扩大采样规模。主控退出不代表队列中的所有子任务都已停止;排障或续跑时同时检查主控记录与 Slurm 作业,避免重复产生子任务。
5.6 GROMACS #
| 版本 | 平台 | 构建类型 | 路径规则 |
|---|---|---|---|
| 2025.5 | 8173m、P100、V100 | threadmpi、mpi-plumed | /public/software/gromacs/2025.5/<节点>/<构建类型> |
| 2026.3 | 8173m、P100、V100 | threadmpi、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)。
| 项目 | 8173m | P100 / V100 |
|---|---|---|
| 编译器 | oneAPI 2024.2.1 | GCC/G++ 13.3.0 |
| CPU SIMD | AVX_512 | AVX2_256 |
| GPU | CPU 后端 | CUDA 12.8,nvcc 12.8.93;sm_60 / sm_70 |
| FFT | FFTW;BLAS/LAPACK 链接 MKL | FFTW 3.3.10 + cuFFT;内部 BLAS/LAPACK |
| 外部 MPI 构建 | Intel MPI 2021.13 | Open MPI 5.0.10,独立 CUDA12.8 前缀 |
| PLUMED kernel | 2.9.4 oneapi2024.2 | 2.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.0 | wannier90.x 串行;postw90.x 支持 MPI | /public/software/wannier90/2.1.0/oneapi-2023.2-ifort/8173m |
| 3.1.0 | wannier90.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.0 | oneAPI 2023.2 ifort | mpiifort;postw90 支持 MPI,wannier90 串行 | CPU 8173m | 单独串行编译的 libwannier.a |
| 3.1.0 | oneAPI 2024.2 ifx | mpiifx;wannier90、postw90 支持 MPI | CPU 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/lobster | sub_lobster.4.1.0.sh |
| 5.1.1 | /public/software/lobster/5.1.1/lobster | sub_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 / 没有 GPU | GPU 申请、可见设备及模板的节点架构 |
| 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 日志级别或更换驱动来代替定位。普通用户发现疑似节点故障时,把作业编号、节点、时间和完整错误交给管理员;不要自行在整机显卡上运行压力测试。
怎样做一次有意义的性能对比? #
- 固定软件版本、输入、初始状态与收敛条件,每种配置用独立目录。
- 先验证单配置可以正确完成,再比较 CPU、单卡和多卡。
- 同时记录总耗时与程序主要计算阶段耗时,避免启动开销主导结论。
- 记录 MPI 数、线程数、GPU 数、节点和是否存在其他负载。
- 对短任务重复测试,关注差异是否超过波动,并检查结果精度。
如果 4 卡比 2 卡只快很少,增加资源未必划算。对训练数据、结构优化或高精度能量差,还要把力、应力及收敛表现纳入判断,不能只比较总能量。
提问或报障时提供哪些信息? #
建议按下面格式提供,能减少反复确认:
软件及版本:
功能分支 / 后端:
任务目录:
提交脚本与提交命令:
Slurm 作业编号:
节点及 CPU / GPU 数:
首次出现问题的时间:
预期结果与实际现象:
完整错误所在日志及行附近内容:
同输入是否在其他版本或单卡成功:
保留实际提交的脚本与日志;不要只发最后一句 MPI_ABORT,前面的第一处错误通常更有价值。不要在公开渠道粘贴账号密码、密钥或受限制的完整势文件。
8. 文档维护 #
本文件作为面向用户的 Markdown 主文档维护:
/public/software/agent/cluster-guide.md
表格统一按软件版本逐行列出;不同版本不合并在同一行,也不用“同上六版”等省略具体版本。不同依赖组件的版本可以在对应构建行中共同列明。
新增或升级软件后,更新以下内容:
- 版本、实际安装路径及适用节点,源码或二进制部署方式。
- 编译器与 MPI 版本、CUDA/数学库、CPU/GPU 指令目标、关键编译开关及补丁。
- 运行环境、模块名称和公共 Slurm 脚本位置。
- 已验证的功能、精度、GPU 数量及已知限制。
- 本页更新日期和下方变更记录。
详细构建过程、失败日志、补丁和校验值保留在各软件记录目录;本页保留用户选择和运行软件所需的信息。长期维护时直接修改对应章节,不在正文反复追加互相冲突的旧状态。
| 日期 | 更新内容 |
|---|---|
| 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 是独立文档,本次未覆盖其内容,也未将本页发布到网站。
