【高性能】HPC中mpi的启用
2016-03-02 16:15
393 查看
Mpi有多个实现版本,我目前接触到的有intelmpi,mpich2,openmpi。其中HPC默认使用的mpi版本是mpich2,客户经常使用的是openmpi。
整个HPC需要启用NIS服务来管理整个HPC系统的用户,这样登陆其中节点,可以不输入密码直接登陆HPC内部其他服务器,这样mpi可以方便无阻地启动任意服务器的mpi程序。
用户要使用mpich2,首先用自己的账号密码登陆HPC任意服务器节点,使用命令mpdboot -f {计算服务器列表} –n {计算服务器数量}在指定的计算服务器上启动mpi守护进程。待使用完毕,输入mpdallexit退出所有计算服务器上该用户的mpi守护进程。如果要单独启动某个服务器的mpi守护进程,输入mpd &。如果要查看某服务器是否启用mpi守护进程,输入mpdtrace。如果守护进程出现问题,输入mpdallexit,再使用mpdboot命令启动mpi守护进程。没有守护进程的服务器无法启用mpi。
如果使用openmpi,那么无需启动守护进程,直接给定计算节点列表文件、程序和相关参数就可以执行。
Mpi的运行命令为mpirun和mpiexec,通常情况下两者没有区别。Mpi启动命令:mpirun –n{进程数量} –hostfile {计算节点列表} {程序执行命令}。-n和-np是同一个命令;程序执行命令是一个命令,不一定是一个程序名。例如启动一个python程序:mpirun -np 5 -hostfile ./hostfile python ./mpiTest.py。
HPC中为了平衡科学计算的使用率,加入了PBS任务管理调度软件。我们将mpi任务编写进一个pbs任务脚本中去,模板如下:
#PBS -N hello (作业名称)
#PBS -l nodes=clustre1:ppn=12+ clustre2:ppn=12(nodes代表使用几个节点,ppn代表每个节点的核心数)
#PBS -l walltime=12:00:00 (作业运行时间)
#PBS -q batch (作业运行的队列)
#PBS -S /bin/bash
cd $PBS_O_WORKDIR
EXEC=可执行文件的路径
NP=`cat $PBS_NODEFILE | wc -l`#进程数
NN=`cat $PBS_NODEFILE | sort | uniq | tee/tmp/nodes.$$ | wc -l`#计算服务器数
cat $PBS_NODEFILE > /tmp/nodefile.$$#写入计算节点文件
mpdboot -f /tmp/nodefile.$$ -n $NN (启动并行环境)
mpiexec -genv I_MPI_DEVICE rdma-machinefile /tmp/nodefile.$$ -n $NP $EXEC (运行程序,开始计算)
mpdallexit (计算完毕后退出并行环境)
rm -f /tmp/nodefile.$$
然后在任务管理服务器输入qsub hello.pbs启动任务。输入qstat 查询所有任务,每个任务有自己的标号;设任务标号为1,则可输入qstat –n 1查看详细任务信息,输入qdel 1删除标号为1的任务。
整个HPC需要启用NIS服务来管理整个HPC系统的用户,这样登陆其中节点,可以不输入密码直接登陆HPC内部其他服务器,这样mpi可以方便无阻地启动任意服务器的mpi程序。
用户要使用mpich2,首先用自己的账号密码登陆HPC任意服务器节点,使用命令mpdboot -f {计算服务器列表} –n {计算服务器数量}在指定的计算服务器上启动mpi守护进程。待使用完毕,输入mpdallexit退出所有计算服务器上该用户的mpi守护进程。如果要单独启动某个服务器的mpi守护进程,输入mpd &。如果要查看某服务器是否启用mpi守护进程,输入mpdtrace。如果守护进程出现问题,输入mpdallexit,再使用mpdboot命令启动mpi守护进程。没有守护进程的服务器无法启用mpi。
如果使用openmpi,那么无需启动守护进程,直接给定计算节点列表文件、程序和相关参数就可以执行。
Mpi的运行命令为mpirun和mpiexec,通常情况下两者没有区别。Mpi启动命令:mpirun –n{进程数量} –hostfile {计算节点列表} {程序执行命令}。-n和-np是同一个命令;程序执行命令是一个命令,不一定是一个程序名。例如启动一个python程序:mpirun -np 5 -hostfile ./hostfile python ./mpiTest.py。
HPC中为了平衡科学计算的使用率,加入了PBS任务管理调度软件。我们将mpi任务编写进一个pbs任务脚本中去,模板如下:
#PBS -N hello (作业名称)
#PBS -l nodes=clustre1:ppn=12+ clustre2:ppn=12(nodes代表使用几个节点,ppn代表每个节点的核心数)
#PBS -l walltime=12:00:00 (作业运行时间)
#PBS -q batch (作业运行的队列)
#PBS -S /bin/bash
cd $PBS_O_WORKDIR
EXEC=可执行文件的路径
NP=`cat $PBS_NODEFILE | wc -l`#进程数
NN=`cat $PBS_NODEFILE | sort | uniq | tee/tmp/nodes.$$ | wc -l`#计算服务器数
cat $PBS_NODEFILE > /tmp/nodefile.$$#写入计算节点文件
mpdboot -f /tmp/nodefile.$$ -n $NN (启动并行环境)
mpiexec -genv I_MPI_DEVICE rdma-machinefile /tmp/nodefile.$$ -n $NP $EXEC (运行程序,开始计算)
mpdallexit (计算完毕后退出并行环境)
rm -f /tmp/nodefile.$$
然后在任务管理服务器输入qsub hello.pbs启动任务。输入qstat 查询所有任务,每个任务有自己的标号;设任务标号为1,则可输入qstat –n 1查看详细任务信息,输入qdel 1删除标号为1的任务。
相关文章推荐
- Linux socket 初步
- 超算即服务:超级计算机如何上云
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程