这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
atk:通过命令行方式手动提交quantumatk计算 [2023/05/13 21:20] – [并行提交脚本设置] fermi | atk:通过命令行方式手动提交quantumatk计算 [2023/09/03 16:23] (当前版本) – [并行提交脚本设置] fermi | ||
---|---|---|---|
行 1: | 行 1: | ||
====== 通过命令行方式手动提交QuantumATK计算 ====== | ====== 通过命令行方式手动提交QuantumATK计算 ====== | ||
- | ===== 运行串行计算 ===== | + | ===== 串行计算 ===== |
在Linux单机上安装好并行环境后,可以直接通过交互式命令来并行计算: | 在Linux单机上安装好并行环境后,可以直接通过交互式命令来并行计算: | ||
<code bash> | <code bash> | ||
行 8: | 行 8: | ||
</ | </ | ||
- | ===== 在Linux单机上并行计算 ===== | + | ===== 在 Linux 并行计算 ===== |
在Linux单机上安装好并行环境后,可以直接通过交互式命令来并行计算: | 在Linux单机上安装好并行环境后,可以直接通过交互式命令来并行计算: | ||
<code bash> | <code bash> | ||
行 19: | 行 19: | ||
=== 注意 === | === 注意 === | ||
* 在单机上使用MPI并行可能和MKL的多线程并行互相干扰,降低并行效率。应使用环境变量 MKL_NUM_THREADS=1 MKL_DYNAMIC=FALSE 将动态多线程功能关闭。 | * 在单机上使用MPI并行可能和MKL的多线程并行互相干扰,降低并行效率。应使用环境变量 MKL_NUM_THREADS=1 MKL_DYNAMIC=FALSE 将动态多线程功能关闭。 | ||
+ | * 大型HPC服务器上的并行计算效率与机器的配置和管理方式强烈相关,用户应当与HPC管理员和技术人员协商如何进行提交脚本的设置。 | ||
</ | </ | ||
===== 在Linux计算机集群上并行计算 ===== | ===== 在Linux计算机集群上并行计算 ===== | ||
行 24: | 行 25: | ||
==== 并行提交脚本设置 ==== | ==== 并行提交脚本设置 ==== | ||
- | 以下是一个典型的PBS提交脚本,用户可根据实际情况修改使用。用户应对实际安装的系统进行一些测试计算以得到最佳的运行方案。 | + | 以下是几个典型的提交脚本示例,用户需要根据实际情况修改。调试成功后,应对实际安装的系统进行一些测试计算以得到最佳的运行方案。 |
+ | |||
+ | === PBS === | ||
<file bash atk.pbs> | <file bash atk.pbs> | ||
行 42: | 行 45: | ||
## | ## | ||
- | ## 设置输入文件的名称 | + | ## 设置输入文件的名称(不写.py) |
- | SCRIPT=atktest.py | + | SCRIPT=atktest |
## | ## | ||
行 50: | 行 53: | ||
ATK_BIN_DIR=[atk_installdir]/ | ATK_BIN_DIR=[atk_installdir]/ | ||
- | ## 为适配HPC硬件并正确使用并行网络 mpiexec.hydra可能需要带一些参数,请咨询HPC硬件提供商 | + | ## 为适配HPC硬件并正确使用并行网络 mpiexec.hydra可能需要带一些参数,请咨询HPC硬件或服务商 |
- | MPI_DIR=[atk_installdir]/ | + | MPI_DIR=[atk_installdir]/ |
## 通知计算时需要访问的License server所在位置或自动搜索 | ## 通知计算时需要访问的License server所在位置或自动搜索 | ||
export SNPSLMD_LICENSE_FILE=" | export SNPSLMD_LICENSE_FILE=" | ||
- | |||
- | cd $PBS_O_WORKDIR | ||
- | |||
- | echo ------------------------------------------------------ | ||
- | echo 'Job is running on node(s): ' | ||
- | cat hostile.$PBS_JOBID | ||
- | echo ------------------------------------------------------ | ||
- | echo PBS: qsub is running on $PBS_O_HOST | ||
- | echo PBS: originating queue is $PBS_O_QUEUE | ||
- | echo PBS: executing queue is $PBS_QUEUE | ||
- | echo PBS: execution mode is $PBS_ENVIRONMENT | ||
- | echo PBS: current home directory is $PBS_O_HOME | ||
- | echo PBS: working directory is $PBS_O_WORKDIR | ||
- | echo PBS: job name is $PBS_JOBNAME | ||
- | echo PBS: job identifier is $PBS_JOBID | ||
- | echo PBS: PATH = $PBS_O_PATH | ||
- | echo PBS: node file is $PBS_NODEFILE | ||
- | echo ------------------------------------------------------ | ||
## 将启动的MPI进程总数为NP | ## 将启动的MPI进程总数为NP | ||
行 81: | 行 66: | ||
export MKL_NUM_THREADS=1 | export MKL_NUM_THREADS=1 | ||
export MKL_DYNAMIC=FALSE | export MKL_DYNAMIC=FALSE | ||
+ | |||
## 并行计算命令 | ## 并行计算命令 | ||
- | $MPI_DIR -n $NP $ATK_BIN_DIR $SCRIPT > ${PBS_JOBNAME}.out | + | cd $PBS_O_WORKDIR |
+ | $MPI_DIR -n $NP $ATK_BIN_DIR ${SCRIPT}.py > ${SCRIPT}.out | ||
</ | </ | ||
- | ==== 正确选择并行网络 ==== | ||
- | 目前主流的计算机集群都配备了InfiniBand(IB)高速网络用于节点间并行的高速数据交换,用户应选择IB网络进行并行。 | + | === LSF === |
+ | |||
+ | |||
+ | <file bash atk.lsf> | ||
+ | #!/bin/sh | ||
+ | #BSUB -q hpc_q | ||
+ | ## LSF经常在这里指定所使用的的MPI,最后不需要直接写出mpirun命令 | ||
+ | ## 也可以使用QATK自带的Intel MPI版本,具体如何修改脚本请咨询HPC管理员 | ||
+ | #BSUB -a intelmpi | ||
+ | #BSUB -n 12 | ||
+ | #BSUB -o output.%J | ||
+ | #BSUB -e error.%J | ||
+ | #BSUB -R " | ||
+ | |||
+ | ## | ||
+ | ## 设置输入文件的名称(不写.py) | ||
+ | SCRIPT=atktest | ||
+ | ## | ||
+ | |||
+ | ## | ||
+ | ## | ||
+ | ATK_BIN_DIR=[atk_installdir]/ | ||
+ | ## QATK自带的MPI,用户应测试使用这个还是HPC安装的其他MPI(仅支持MPICH和Intel MPI) | ||
+ | MPI_DIR=[atk_installdir]/ | ||
+ | |||
+ | ## 通知计算时需要访问的License server所在位置或自动搜索 | ||
+ | export SNPSLMD_LICENSE_FILE=" | ||
+ | |||
+ | ## 并行计算命令 | ||
+ | ## 使用QATK自带MPI时 | ||
+ | ## $MPI_DIR -n $NP $ATK_BIN_DIR $SCRIPT > $.out | ||
+ | ## 使用HPC的MPI时 | ||
+ | $ATK_BIN_DIR ${SCRIPT}.py > ${SCRIPT}.out | ||
+ | |||
+ | </ | ||
+ | |||
+ | === SLURM === | ||
+ | |||
+ | |||
+ | <file bash atk.srp> | ||
+ | # | ||
+ | #SBATCH -J test | ||
+ | #SBATCH -p test | ||
+ | #SBATCH --tasks=8 | ||
+ | #SBATCH --cpus-per-task=7 | ||
+ | #SBATCH -N 2 | ||
+ | #SBATCH -o test-%j.out | ||
+ | #SBATCH -e test-%j.err | ||
+ | #SBATCH --no-requeue | ||
+ | #SBATCH --tasks-per-node=4 | ||
+ | #SBATCH --ntasks-per-socket=2 | ||
+ | #SBATCH --export=ALL | ||
+ | |||
+ | ## | ||
+ | ## 设置输入文件的名称 | ||
+ | SCRIPT=atktest.py | ||
+ | ## | ||
+ | |||
+ | ## | ||
+ | ## | ||
+ | ATK_BIN_DIR=[atk_installdir]/ | ||
+ | ## 为适配HPC硬件并正确使用并行网络 | ||
+ | MPI_DIR=[atk_installdir]/ | ||
+ | |||
+ | ## 通知计算时需要访问的License server所在位置或自动搜索 | ||
+ | export SNPSLMD_LICENSE_FILE=" | ||
+ | |||
+ | ## 并行计算命令 | ||
+ | $MPI_DIR -n $NP $ATK_BIN_DIR $SCRIPT > $.out | ||
+ | |||
+ | </ | ||
- | <WRAP center important 100%> | ||
- | ==== 说明 ==== | ||
- | 以上脚本的修改需要根据具体的集群hosts文件中的主机名规律进行调试。 | ||
- | </ | ||