Torque/MPI调度环境简介

 

一,程序与文档下载

http://www.clusterresources.com/

二,Torque/Maui

Torque是个分布式的资源管理器,可以管理批处理任务和分布式计算节点上的资源。Torque是在openPBS基础上发展来的。

Torque自身的任务调度器比较简单,想用复杂的调度器可以使用Maui插件

三,MPI

Message Passing Interface定义了计算机间协作通讯和计算的标准,可以用于分布式计算和集群环境搭建。通常,会用Torque管理MPI的计算资源和批处理任务。

四, 编译安装Torque

1,configure参考参数如下

$./configure --enable-docs --enable-mom --enable-server --enable-clients --with-scp

--enable-mom, 打开计算节点功能
--enable-server, 打开pbs管理服务器节点功能
--enable-clients,打开连接pbs服务器的客户功能

mom/pbs server/client关系请参考管理员手册

2,$make clean; make

3,$sudo make install

在当前节点安装管理服务器,计算节点,客户端组件。管理服务器主要用于作业提交管理,通常会使用客户端连接管理服务器进行管理操作。计算节点是实际执行作业计算的节点。管理服务器节点既可以仅仅作为管理节点,也可以同时作为计算节点。

4,$make packages

制作计算节点的安装包,避免在每个计算节点编译Torque。将安装包scp到计算节点执行即可,这是个sh脚本加上压缩数据的安装包。只有mom安装包是计算节点必须的。如果要从计算节点提交作业,请一并安装clients组件。

五,编译安装Maui

1, Maui patch

Maui在一些平台会有编译错误,请使用这个patch

MPBSI.c:177: error: conflicting types for get_svrport
/usr/local/include/pbs_ifl.h:684: note: previous declaration of get_svrport was here
MPBSI.c:178: error: conflicting types for openrm
/usr/local/include/pbs_ifl.h:685: note: previous declaration of openrm was here
make[1]: *** [MPBSI.o] Error 1

@@ -174,8 +174,8 @@
 
 extern int pbs_errno;
 
-extern int get_svrport(const char *,char *,int);
-extern int openrm(char *,int);
+//extern int get_svrport(const char *,char *,int);
+//extern int openrm(char *,int);
 extern int addreq(int,char *);
 extern int closerm(int);
 extern int pbs_stagein(int,char *,char *,char *);

2, Make & install

$./configure --with-pbs
$make
$sudo make install

六,启动Torque集群

1,配置pbs server节点列表

/var/spool/torque/server_priv/nodes

## This is the TORQUE server "nodes" file.
##
## To add a node, enter its hostname, optional processor count (np=),
## and optional feature names.
##
## Example:
##    host01 np=8 featureA featureB
##    host02 np=8 featureA featureB
##
## for more information, please visit:
##

host1

host2

2, 初始化pbs server

执行源码树中的脚本,初始化server

$./torque.setup root


3, 配置mom节点

 /var/spool/torque/mom_priv/config
$pbsserver hostname # hostname running pbs server
$logevent 225 # bitmap of which events to log

4,启动pbs server

因为是在pbs server节点上编译的Torque, 可以在Torque的源码树下torque-4.1.0/contrib/init.d目录中发现服务的脚本文件,将这些服务加入系统。具体操作请参考管理员手册。

需要启动pbs_server/trqauthd服务,后者用于对pbs_server服务器的认证。

启动Maui服务器

$/usr/local/maui/sbin/maui

5, 启动计算节点mom server

$pbs_mom

6, check节点状态

$pbsnodes

七,提交MPI作业

1,配置集群上的MPI环境

2,编写MPI程序

#include "mpi.h"
#include

int main(int argc,char *argv[])
{
    int    i, sum, n, myid, numprocs;
    double startwtime = 0.0, endwtime;
    int    namelen;
    char   processor_name[MPI_MAX_PROCESSOR_NAME];
    MPI_Comm   myComm;
    int membershipKey;

    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD,&myid);
    MPI_Get_processor_name(processor_name,&namelen);

    fprintf(stdout,"Process %d of %d is on %s\n",
            myid, numprocs, processor_name);
    fflush(stdout);

    membershipKey = myid % 3;

    MPI_Comm_split(MPI_COMM_WORLD, membershipKey, myid, &myComm);

    MPI_Comm_size(myComm,&numprocs);
    MPI_Comm_rank(myComm,&myid);
    MPI_Get_processor_name(processor_name,&namelen);

    fprintf(stdout,"after split Process %d of %d is on %s\n",
            myid, numprocs, processor_name);
    fflush(stdout);

    n = 10000;
    if (myid == 0)
        startwtime = MPI_Wtime();

    MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);

    i = n + 10000;

    MPI_Reduce(&i, &sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);

    MPI_Comm_rank(MPI_COMM_WORLD,&myid);
    if (myid == 0) {
        endwtime = MPI_Wtime();
        printf("the sum is %d\n", sum);

        printf("wall clock time = %f\n", endwtime-startwtime);        
        fflush(stdout);
    }

    MPI_Finalize();
    return 0;
}

3,编写PBS脚本

PBS脚本 job.sh

#!/bin/sh
#PBS -o /pbso
#PBS -e /pbse
#PBS -N MPIjob
#PBS -l nodes=a+b,walltime=00:01:00
#PBS -q batch
#PBS -m abe
#print the time and date
mpiexec ./summe >> /mpiout


说明

#PBS -o 配置程序执行时候的输出文件
#PBS -e 配置程序执行时候的错误输出文件

4,提交作业

$qsub ./job.sh

查看任务状态

$qstat

5, 常见错误1,执行时候的权限错误

通常会使用下面的命令初始化环境,而提交作业时候又不能使用root用户,执行时候可能会发生权限错误
$./torque.setup root

解决方法

$qmgr

Qmgr: set server managers += user@host
Qmgr: set server operators += user@host

6, 常见错误2,没有生成程序执行输出和错误文件

这个是scp没有配置好引起的,要保证管理服务器和计算节点间任何两个节点都可以使用ssh登陆与复制文件,请使用密钥认证方式

7, 常见错误3,mpiexec找不到

shell环境问题,简单解决办法,使用全路径

8,查看执行结果

 cat mpiout
the sum is 40000
wall clock time = 0.000190

9,查看执行日志

pbs_server

/var/spool/torque/server_logs/

mom节点

/var/spool/torque/mom_logs/

八,其它

1,ssh/scp 登录

ssh-keygen

ssh-copy-id -i .ssh/id_rsa.pub [email protected]


 

你可能感兴趣的:(MPI)