这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
atk:通过命令行方式手动提交quantumatk计算 [2018/05/23 21:38] – [在Linux单机上并行计算] fermi | atk:通过命令行方式手动提交quantumatk计算 [2023/09/03 16:23] (当前版本) – [并行提交脚本设置] fermi | ||
---|---|---|---|
行 1: | 行 1: | ||
====== 通过命令行方式手动提交QuantumATK计算 ====== | ====== 通过命令行方式手动提交QuantumATK计算 ====== | ||
- | ===== 运行串行计算 ===== | + | ===== 串行计算 ===== |
在Linux单机上安装好并行环境后,可以直接通过交互式命令来并行计算: | 在Linux单机上安装好并行环境后,可以直接通过交互式命令来并行计算: | ||
<code bash> | <code bash> | ||
- | atkpython input.py | tee log | + | # |
+ | [atk_installdir]/ | ||
</ | </ | ||
- | ===== 在Linux单机上并行计算 ===== | + | ===== 在 Linux 并行计算 ===== |
在Linux单机上安装好并行环境后,可以直接通过交互式命令来并行计算: | 在Linux单机上安装好并行环境后,可以直接通过交互式命令来并行计算: | ||
<code bash> | <code bash> | ||
- | [atk_installdir]/ | + | # |
- | 假设ATK安装路径为[atk_installdir] | + | [atk_installdir]/ |
</ | </ | ||
行 17: | 行 19: | ||
=== 注意 === | === 注意 === | ||
* 在单机上使用MPI并行可能和MKL的多线程并行互相干扰,降低并行效率。应使用环境变量 MKL_NUM_THREADS=1 MKL_DYNAMIC=FALSE 将动态多线程功能关闭。 | * 在单机上使用MPI并行可能和MKL的多线程并行互相干扰,降低并行效率。应使用环境变量 MKL_NUM_THREADS=1 MKL_DYNAMIC=FALSE 将动态多线程功能关闭。 | ||
- | * 2017版本以后,QuantumATK使用内置Intel MPI并行,可更好的管理同时使用MPI多进程和MKL多线程并行,敬请测试。 | + | * 大型HPC服务器上的并行计算效率与机器的配置和管理方式强烈相关,用户应当与HPC管理员和技术人员协商如何进行提交脚本的设置。 |
</ | </ | ||
===== 在Linux计算机集群上并行计算 ===== | ===== 在Linux计算机集群上并行计算 ===== | ||
==== 并行提交脚本设置 ==== | ==== 并行提交脚本设置 ==== | ||
- | 以下是一个典型的PBS提交脚本,用户可根据实际情况修改使用。用户应对实际安装的系统进行一些测试计算以得到最佳的运行方案。 | + | |
+ | 以下是几个典型的提交脚本示例,用户需要根据实际情况修改。调试成功后,应对实际安装的系统进行一些测试计算以得到最佳的运行方案。 | ||
+ | |||
+ | === PBS === | ||
<file bash atk.pbs> | <file bash atk.pbs> | ||
#!/bin/bash | #!/bin/bash | ||
行 39: | 行 45: | ||
## | ## | ||
- | ## 设置输入文件的名称 | + | ## 设置输入文件的名称(不写.py) |
- | SCRIPT=atktest.py | + | SCRIPT=atktest |
## | ## | ||
## | ## | ||
- | ATK_BIN_DIR=/ | + | ## |
- | MPI_DIR=/your/ | + | ATK_BIN_DIR=[atk_installdir]/QuantumATK-2022.12/bin/atkpython |
- | export LD_LIBRARY_PATH=$MPI_DIR/lib: | + | |
- | export PATH=$MPI_DIR/bin:$PATH | + | ## 为适配HPC硬件并正确使用并行网络 mpiexec.hydra可能需要带一些参数,请咨询HPC硬件或服务商 |
+ | MPI_DIR=[atk_installdir]/QuantumATK-2022.12/mpi/bin/mpiexec | ||
## 通知计算时需要访问的License server所在位置或自动搜索 | ## 通知计算时需要访问的License server所在位置或自动搜索 | ||
- | export | + | export |
+ | ## 将启动的MPI进程总数为NP | ||
+ | NP=$( sort $PBS_NODEFILE | wc -l ) | ||
+ | |||
+ | ## 关闭MKL的OpenMP线程 | ||
+ | export OMP_NUM_THREADS=1 | ||
+ | export MKL_NUM_THREADS=1 | ||
+ | export MKL_DYNAMIC=FALSE | ||
+ | |||
+ | |||
+ | ## 并行计算命令 | ||
cd $PBS_O_WORKDIR | cd $PBS_O_WORKDIR | ||
+ | $MPI_DIR -n $NP $ATK_BIN_DIR ${SCRIPT}.py > ${SCRIPT}.out | ||
- | # | + | </file> |
- | cat $PBS_NODEFILE | + | |
- | echo ------------------------------------------------------ | + | === LSF === |
- | 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 ------------------------------------------------------ | + | |
- | ############################################################# | ||
- | ## 三种并行方案,使用时选择一种,并去掉相应的“# | ||
- | ############################################################# | ||
- | ## 方案 1: 每计算核心上安排一个MPI进程(适用于小体系计算) | + | <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 " | ||
- | ## 将启动的MPI进程总数为NP | + | ##--------------------------------------------------------- |
- | #NP=$( sort $PBS_NODEFILE | wc -l ) | + | ## 设置输入文件的名称(不写.py) |
+ | SCRIPT=atktest | ||
+ | ## | ||
- | ## 每个节点上分配的MPI进程数(需要Linux支持bc计算器命令) | + | ##修改路径以适配系统 |
- | #N_PER_NODE=`$( sort $PBS_NODEFILE | wc -l ) / $( sort $PBS_NODEFILE | uniq | wc -l ) |bc` | + | ## |
+ | ATK_BIN_DIR=[atk_installdir]/ | ||
+ | ## QATK自带的MPI,用户应测试使用这个还是HPC安装的其他MPI(仅支持MPICH和Intel MPI) | ||
+ | MPI_DIR=[atk_installdir]/QuantumATK-2022.12/ | ||
- | ## 关闭MKL的OpenMP线程 | + | ## 通知计算时需要访问的License server所在位置或自动搜索 |
- | #export | + | export |
- | #export MKL_NUM_THREADS=1 | + | |
- | #export MKL_DYNAMIC=FALSE | + | |
- | ## 方案 2: 每路CPU上安排一个MPI进程,适用于中等体系计算 | + | ## 并行计算命令 |
- | ## 例如:在开头的资源请求行设置4个节点,假设每个节点有二路CPU,则: | + | ## 使用QATK自带MPI时 |
+ | ## $MPI_DIR -n $NP $ATK_BIN_DIR $SCRIPT > $.out | ||
+ | ## 使用HPC的MPI时 | ||
+ | $ATK_BIN_DIR ${SCRIPT}.py > ${SCRIPT}.out | ||
- | ## 总MPI进程数NP | + | </ |
- | #NP=8 | + | |
- | ## 每个节点上MPI进程数(每个节点上的CPU数)N_PER_NODE | + | === SLURM === |
- | #N_PER_NODE=2 | + | |
- | ## 默认使用OpenMP | ||
- | ## 方案 3: 每个节点一个MPI进程,适用于超大体系计算 | + | <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 | ||
- | ## | + | ##--------------------------------------------------------- |
- | #NP=$( sort $PBS_NODEFILE | uniq | wc -l ) | + | ## 设置输入文件的名称 |
+ | SCRIPT=atktest.py | ||
+ | ## | ||
- | ## | + | ##修改路径以适配系统 |
- | #N_PER_NODE=1 | + | ## |
+ | ATK_BIN_DIR=[atk_installdir]/ | ||
+ | ## 为适配HPC硬件并正确使用并行网络 mpiexec可能需要带一些参数,请咨询HPC硬件或服务商 | ||
+ | MPI_DIR=[atk_installdir]/ | ||
- | ## | + | ## 通知计算时需要访问的License server所在位置或自动搜索 |
+ | export SNPSLMD_LICENSE_FILE=" | ||
## 并行计算命令 | ## 并行计算命令 | ||
- | $MPI_DIR/ | + | $MPI_DIR -n $NP $ATK_BIN_DIR $SCRIPT > $.out |
</ | </ | ||
- | ==== 正确选择并行网络 ==== | ||
- | 目前主流的计算机集群都配备了InfiniBand(IB)高速网络用于节点间并行的高速数据交换,用户应选择IB网络进行并行。 | ||
- | |||
- | <WRAP center important 100%> | ||
- | ==== 注意 ==== | ||
- | 与OpenMPI不同,MPICH和Intel MPI可能不会自动选择IB网络,敬请留意。 | ||
- | </ | ||
- | |||
- | <WRAP center important 100%> | ||
- | ==== 说明 ==== | ||
- | 以上脚本的修改需要根据具体的集群hosts文件中的主机名规律进行调试。 | ||
- | </ | ||