一,程序与文档下载
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]