用户工具

站点工具

本页面的其他翻译:
  • zh

atk:通过命令行方式手动提交atk计算

这是本文档旧的修订版!


通过命令行方式手动提交ATK计算

运行串行计算

在Linux单机上安装好并行环境后,可以直接通过交互式命令来并行计算:

atkpython input.py | tee log

在Linux单机上并行计算

在Linux单机上安装好并行环境后,可以直接通过交互式命令来并行计算:

/home/username/mpich-3.0.4/bin/mpirun -np 4 atkpython input.py | tee log

注意

在单机上使用MPI并行可能和MKL的多线程并行互相干扰,降低并行效率。应使用环境变量 MKL_NUM_THREADS=1 MKL_DYNAMIC=FALSE 将动态多线程功能关闭。

在Linux计算机集群上并行计算

并行提交脚本设置

以下是一个典型的PBS提交脚本,用户可根据实际情况修改使用。用户应对实际安装的系统进行一些测试计算以得到最佳的运行方案。

atk.pbs
#!/bin/bash
## 下载调试此脚本应将中文注释删去,否则可能会有兼容性问题
##
## 提交任务的名称
#PBS -N atktest
## 根据系统提供的队列名设置(这里是low)
#PBS -q low
## 请求计算资源(示例为请求4个节点,每节点20个核)
#PBS -l nodes=4:ppn=20
## 导出环境变量
#PBS -V
## 将out和err合并输出
#PBS -j oe
 
##---------------------------------------------------------
## 设置输入文件的名称
SCRIPT=atktest.py
##---------------------------------------------------------
 
##修改路径以适配系统
ATK_BIN_DIR=/your/route/to/QuantumWise/VNL-ATK-2014.2/bin/
MPI_DIR=/your/route/to/mpich-3.1.4/
export LD_LIBRARY_PATH=$MPI_DIR/lib:$LD_LIBRARY_PATH
export PATH=$MPI_DIR/bin:$PATH
 
cd $PBS_O_WORKDIR
 
#创建hostfile
cat $PBS_NODEFILE > hostile.$PBS_JOBID
 
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 ------------------------------------------------------
 
#############################################################
## 三种并行方案,使用时选择一种,并去掉相应的“#”
#############################################################
 
## 方案 1: 每计算核心上安排一个MPI进程(适用于小体系计算)
 
## 将启动的MPI进程总数为NP
#NP=$( sort $PBS_NODEFILE | wc -l )
 
## 每个节点上分配的MPI进程数(需要Linux支持bc计算器命令)
#N_PER_NODE=`$( sort $PBS_NODEFILE | wc -l ) / $( sort $PBS_NODEFILE | uniq | wc -l ) |bc`
 
## 关闭MKL的OpenMP线程
#export OMP_NUM_THREADS=1
#export MKL_NUM_THREADS=1
#export MKL_DYNAMIC=FALSE
 
## 方案 2: 每路CPU上安排一个MPI进程,适用于中等体系计算
## 例如:在开头的资源请求行设置4个节点,假设每个节点有二路CPU,则:
 
## 总MPI进程数NP
#NP=8
 
## 每个节点上MPI进程数(每个节点上的CPU数)N_PER_NODE
#N_PER_NODE=2
 
## 默认使用OpenMP
 
## 方案 3: 每个节点一个MPI进程,适用于超大体系计算
 
##  总MPI进程数NP
#NP=$( sort $PBS_NODEFILE | uniq | wc -l )
 
##  每个节点上一个进程
#N_PER_NODE=1
 
##  默认使用OpenMP
 
## 并行计算命令
$MPI_DIR/bin/mpirun -ppn $N_PER_NODE -np $NP -f hostfile.$PBS_JOBID $ATK_BIN_DIR/atkpython $SCRIPT > ${PBS_JOBNAME}.out

正确选择并行网络

目前主流的计算机集群都配备了InfiniBand(IB)高速网络用于节点间并行的高速数据交换,用户应选择IB网络进行并行。

注意

与OpenMPI不同,MPICH和Intel MPI可能不会自动选择IB网络,敬请留意。

通常情况下/etc/hosts中,能看到eth和ib等多套节点主机名配置,以备使用。用户应进行一个多节点的测试计算,并注意上述PBS脚本中

cat $PBS_NODEFILE > hostfile.$PBS_JOBID

输出的节点主机名文件hostfile.XXXX中的信息,并与/etc/hosts中的IB网络主机名进行比较确认。

例如在PBS的输出的log文件中看到:

Job is running on node(s): 
c0101
c0101
c0101
c0101
c0101
c0101
c0101
c0101
c0102
c0102
c0102
c0102
c0102
c0102
c0102
c0102

而在/etc/hosts中看到:

# 以下是以太网络的IP和主机名
192.168.1.1	c0101
192.168.1.2	c0102
192.168.1.3	c0103
...
...
192.168.2.11	c0211
192.168.2.12	c0212
 
#以下是ib网络的IP和主机名
10.10.1.1	c0101-ib
10.10.1.2	c0102-ib
10.10.1.3	c0103-ib
...
...
10.10.2.12	c0212-ib

这说明计算使用的是以太网络。

为使计算使用高速的ib网络,应修改主机名。 上例中,需要在hostfile的每行结尾增加'-ib',即可将主机名改为正确的ib网络主机名。为此,需要将PBS脚本中

#创建hostfile
cat $PBS_NODEFILE > hostfile.$PBS_JOBID

修改为:

#创建hostfile
sed 's/$/&-ib/g' $PBS_NODEFILE > hostfile.$PBS_JOBID

有些集群的ib主机名为eth主机名前增加“ib”,PBS脚本中应为:

#创建hostfile
sed 's/^/ib&/g' $PBS_NODEFILE > hostfile.$PBS_JOBID

说明

以上脚本的修改需要根据具体的集群hosts文件中的主机名规律进行调试。

atk/通过命令行方式手动提交atk计算.1464868395.txt.gz · 最后更改: 2016/06/02 19:53 由 dong.dong

© 2014-2022 费米科技(京ICP备14023855号