通知公告

详细内容

当前位置:首页>>联系我们联系我们

河北大学超级计算机系统使用说明

1 超算系统管理

1.1  系统开关机

    集群系统设备的开启和关闭需要安装一定的顺序进行,如果不按照合理顺序进行,容易导致集群工作不正常。

1.1.1 集群系统开启的顺序

(一)  机柜上电。将机柜电源箱空开拨至“ON”状态,将每个机柜PDU的空开拨至“ON”状态。一般情况下,机柜上电后,会自动开启网络交换机、KVM等设备。

(二)  确保已开启网络交换设备,包括以太网交换机、IB交换机等。

(三)  确保已开启Parastor200存储,检查存储服务是否正常。

(四)  开启登陆管理节点,操作系统完全启动后,检查是否挂载上网络共享存储。

(五)  开启计算节点,包括刀片计算节点、GPGPU计算节点、SMP胖节点等,其中开启刀片计算节点前,需要按刀片机箱电源按钮为刀片机箱上电。

1.1.2 集群系统关闭的顺序

集群系统关机上与开启顺序相反

(一)  关闭所有计算节点,包括刀片计算节点、GPGPU计算节点、SMP胖节点等。

(二)  关闭登陆管理节点。

(三)  关闭Parastor200存储。

(四)  机柜下电,将机柜PDU的空开拨至“OFF”状态,将机柜电源箱空开也拨至“OFF”状态。机柜下电同时也关闭了网络交换机、磁盘阵列、KVM等设备。

 

 

1.1 Parastor200并行存储管理

1.1.1 存储登录

用户在浏览器地址栏中输入ParaStor并行存储管理系统URL,本项目IP10.188.255.24010.188.255.241(默认主服务在10.188.255.240上允许),端口为6080,则对应的URL

http:// 10.188.255.240:6080后,进入系统登录页面。

 

在系统登录页面中填写用户名、密码信息,选择认证方式(如认证方式选择为“操作系统用户”时,输入管理节点的操作系统用户名称和操作系统用户密码),单击“登录”按钮即可登录。

认证方式

用户名

密码

操作系统用户

root

parastor;123

WEB用户

admin

admin

1.1.1 客户端挂载并行存储

客户端操作系统需要安装Parastor200的客户端软件后得到授权后才能挂载使用,以b0100为例:

1.         进入/root/client目录

2.         执行./install_client.sh 10.10.10.231 7300,开始安装客户端软件

3.         设置自动挂载,增加mount -t parastor nodev -o fsname=public  /public mount -t parastor nodev -o fsname=home    /home两行到/etc/rc.local

1.2 VMware ESXi5.5 ib驱动安装

5.5及以上的版本,需要先删除inbox内置的驱动

               i.              Log into the ESXi server with root permissions

             ii.              esxcli software vib remove -n net-mlx4-en

           iii.              esxcli software vib remove -n net-mlx4-core

.       

            iv.              上传驱动MLNX-OFED-ESX-1.8.2.4-10EM-500.0.0.472560.zip/

              v.              安装驱动

esxcli software vib install -d /MLNX-OFED-ESX-1.8.2.4-10EM-500.0.0.472560.zip

            vi.              重启系统

          vii.              检查是否安装成功

 

2 用户管理

特别注意:为保证并行计算,用户的数据需要放置在统一的共享存储空间,即操作系统中的/home分区。普通用户在申请账号时,建议集群系统管理员把普通用户的账号路径建在/home下。

2.1  添加用户

添加用户需要使用root账户在管理节点上进行,需要确认添加的家目录为共享目录

$ clusconf -au username

也可以使用Linux自带命令,添加完成后进行用户同步

useradd -m -d /home/username username

clusconf -yu

2.2  删除用户

删除用户也需要使用root账户在管理节点上进行.

$ clusconf -du username

也可以使用Linux自带命令,删除完成后进行用户同步

userdel -d /home/username username

clusconf -yu


 

3 运行并行程序

3.1 编译、安装OpenMPI示例

OpenMPI 1.6.3为例:

$ tar zxvf openmpi-1.6.3.tar.gz

$ cd openmpi-1.6.3

$ ./configure --prefix=/public/software/mpi/openmpi-16-intel --enable-mpirun-prefix-by-default  --without-psm CC=icc CXX=icpc FC=ifort F77=ifort

$ make -j 8 && make install

设置环境变量脚本:

vim /public/software/profile.d/openmpi-intel-env.sh


#!/bin/bash

export MPI_HOME=/public/software/mpi/openmpi-16-intel

export PATH=${MPI_HOME}/bin:${PATH}

export LD_LIBRARY_PATH=${MPI_HOME}/lib:${LD_LIBRARY_PATH}

export MANPATH=${MPI_HOME}/share/man:${MANPATH}

þ  Tips

1. OpenMPI安装会自动检测编译节点本地可用的通信网络设备,如需支持InfiniBand网络,请确保编译MPI前该节点已安装OFED驱动。

2. 执行OpenMPI安装目录$MPI_HOME/bin下的ompi_info命令,可查询当前OpenMPI配置信息。


 

 

3.2 手动运行程序

3.2.1  运行串行程序

方法一

cd /home/your_account/your_workdir

./your_code

方法二

cd $HOME

vi .bashrc

添加

   export PATH=/home/your_account/your_workdir:$PATH

执行命令

your_code

 

 

3.2.2  使用openmpi运行并行程序

3.2.2.1 编译MPI程序

OpenMPI提供了C/C++Fortran等语言的MPI编译器,如下表所示:

语言类型

MPI编译器

C

mpicc

C++

mpicxx

Fortran77

mpif77

Fortran90

mpif90

MPI编译器是对底层编译器的一层包装,通过-show参数可以查看实际使用的编译器。比如:

$ mpicc -show

icc -I/public/software/mpi/openmpi-16-intel/include -pthread -L/public/software/mpi/openmpi-16-intel/lib -lmpi -ldl -lm -lnuma -Wl,--export-dynamic -lrt -lnsl -lutil

编译程序示例:

$ source /public/software/profile.d/openmpi-intel-env.sh

$ mpicc -o hello hello.c

$ mpif90 -o hello hello.f90

3.2.2.2 运行MPI程序

OpenMPI使用自带的OpenRTE进程管理器,启动命令为mpirun/mpiexec/orterun,基本格式如下:

$ mpirun -np N -hostfile <filename> <program>

Ÿ   -np N:运行N个进程

Ÿ   -hostfile:指定计算节点,文件格式如下:

node1 slots=8

node2 slots=8

slots=8代表可在该节点上执行8个进程,也可将node1node2分别写8行。

3.2.3 使用mpich2运行并行程序

3.2.3.1 编译MPI程序

MPICH2编译CC++Fortran77Fortran90的编译器分别为mpicc,mpicxx,mpif70mpif90。编译程序示例:

source /public/software/profile.d/mpich2-intel-env.sh

mpicc -o hello hello.c

mpif90 -o hello hello.f90

3.2.3.2 运行MPI程序

MPICH2默认使用hydra进程管理器,使用mpiexec启动MPI进程(无mpirun),命令格式如下:

$ mpiexec -f hostfile -n 6 ./program

hostfile文件格式如下:

node1:4     #<node name>:<number of cores>

node2:4

远程节点访问协议选择:MPICH2默认使用ssh,也可选择使用rshforkslurm等,利用-launcher选项进行设置:

$ mpiexec -launcher rsh -f hostfile -n 6 ./program

3.2.4 使用mvapich2运行并行程序

3.2.4.1 编译MPI程序

$ source /public/software/profile.d/mvapich2-intel.sh

$ mpicc -o hello hello.c

$ mpif90 -o hello hello.f90

MVAPICH2编译CC++Fortran77Fortran90的编译器分别为mpicc,mpicxx,mpif70mpif90

3.2.4.2 运行MPI程序

MVAPICH2提供了两种进程管理器:mpirun_rsh/mpispawn方式和mpiexec/Hydra方式。其中mpirun_rsh/mpispawn方式启动速度更快,支持集群规模更大,但容易出现任务意外终止后计算节点存在僵尸进程的情况发生。虽然官方推荐使用mpirun_rsh方式,但曙光HPC推荐使用mpiexec/Hydra方式。下面分别介绍:

1.        mpirun_rsh命令

$ mpirun_rsh -rsh -np 4 -hostfile hosts [ENV=value] ./program

Ÿ   -rsh-ssh:指定使用rshssh通信(默认ssh

Ÿ   np:进程数,hostfile文件格式与MPICH2相同(-np-hostfile是必备选项,不可缺少

Ÿ   ENV=value设置运行环境变量,如网络选择,进程绑定等,见下文。

2.        Hydra方式

mpiexe.hydra -launcher ssh -f hosts -n 4 [-env ENV value]./program

Ÿ   -launcher ssh/rsh:指定启动远程任务的方式,默认ssh

Ÿ   -f hosts:格式同MPICH2相同,<node name>:<proc num>

Ÿ   -n 4:指定进程数

Ÿ   -env ENV=value:设置运行环境变量

3.2.5 使用intelmpi运行并行程序

3.2.5.1 编译MPI程序

         IntelMPI提供了非常完整的MPI编译器,如下表所示:

MPI编译器

编译器说明

mpiccmpigcc

使用gcc编译C语言

mpicxxmpigxx

使用g++编译C++语言

mpif77

使用g77编译Fortran77语言

mpif90

使用gfortran编译Fortran90语言

mpifc

使用gfortran编译Fortran77/90语言

mpiicc

使用icc编译C语言,推荐使用

mpiicpc

使用icpc编译C++语言,推荐使用

mpiifort

使用ifort编译Fortran语言,推荐使用

可通过mpiicc -show来查看具体的编译器信息:

$ mpiicc -show


icc -ldl -I/public/software/intel/impi/4.1.0.024/intel64/include -L/public/software/intel/impi/4.1.0.024/intel64/lib -Xlinker --enable-new-dtags -Xlinker -rpath -Xlinker /public/software/intel/impi/4.1.0.024/intel64/lib -Xlinker -rpath -Xlinker /opt/intel/mpi-rt/4.1 -lmpi -lmpigf -lmpigi -lrt -lpthread

编译示例:

$ mpiicc -o hello hello.c

3.2.5.2 运行MPI程序

Ÿ   mpirun是简化的启动MPI进程方式,相当于执行mpdboot+mpiexec+mpdallexit

Ÿ   $ mpirun -r ssh -f mpd.hosts -machinefile mpd.hosts -np 16 -env I_MPI_DEVICE rdma ./program

Ÿ   选项顺序

Ÿ   (1) [mpdboot options -r ssh -f mpd.hosts (-nmpirun中不能用)]

Ÿ   (2) [mpiexec global options -machinefile mpd.hosts]

Ÿ   (3) [mpiexec local options -np 16 -env ...]

 

1 使用作业调度进行计算业务

1.1 命令行使用作业调度

1.1.1 PBS的基本命令

PBS系统中,用户使用qsub命令提交用户程序。

qsub xxx.pbs

用户运行程序的命令及PBS环境变量设置组成PBS作业脚本,提交格式如下:

注释,以“#”开头

PBS指令,以“#PBS”开头

示例OpenMPI脚本:openmpi.pbs

#PBS -N openmpi

#PBS -l nodes=1:ppn=8

#PBS -j oe

#PBS -l walltime=2:00:00

cd $PBS_O_WORKDIR

 

echo my job id is $PBS_JOBID | tee  openmpi.log

echo run nodes is following: | tee -a openmpi.log

cat $PBS_NODEFILE | tee  -a openmpi.log

 

echo begin time is `date` | tee -a  openmpi.log

id=`echo $PBS_JOBID|awk -F. '{print $1}' `

NP=`cat $PBS_NODEFILE|wc -l`

 

mpirun -np $NP -hostfile $PBS_NODEFILE --mca orte_rsh_agent ssh  --mca btl self,openib,sm  ./program  2>&1 | tee -a openmpi.log

 

echo end time is `date` | tee -a  openmpi.log

注意:算例规模的大小合理估算所需的walltimeMem,把其写进作业脚本里,这样有助于更快、更有效地分配资源;

1.1.2 查询队列信息

qmgr -c 'p s'

gpu节点为例:

#

# Create and define queue gpu

#

create queue gpu

set queue gpu queue_type = Execution

set queue gpu resources_max.nodect = 8

set queue gpu resources_max.walltime = 120:00:00

set queue gpu resources_default.neednodes = gpu

set queue gpu max_user_run = 2

set queue gpu enabled = True

set queue gpu started = True

 

qmgr -c set queue gpu acl_users += guest

添加可使用该队列的用户guest

1.1.3 查询节点信息 pestat

pestat |more

如下输出

  node state  load    pmem ncpu   mem   resi usrs tasks  jobids/users

  a110  busy* 12.00   12001  12  12001   4605  4/3   12    8904 hcding

  a111  busy* 12.00   12001  12  12001   4842  3/3   12    8904 hcding

  a112  free  0.00   12001  12  12001   1182  1/1    0

  a113  busy* 12.00   12001  12  12001   4753  2/2   12    8904 hcding

  a114  free  0.00   12001  12  12001    962  2/2    0

  a115  busy* 12.00   12001  12  12001   1473  4/3   12    9537 john

  a116  free  0.00   12001  12  12001   1156  3/3    0

  a117  busy* 12.00   12001  12  12001   5090  3/3   12    8904 hcding

  a118  free  0.00   12001  12  12001   2606  2/2    0

  a119  busy* 12.12   12001  12  12001   1674  4/3   12    9410 wxxu

  a120  busy* 12.00   12001  12  12001   1616  4/4   12    9410 wxxu

  a121  excl  11.91   12001  12  12001   2034  5/4   12    9503 john

  a122  free  0.07   12001  24  12001   2181  1/1    0

  a123  busy* 12.00   12001  12  12001   1625  3/3   12    9410 wxxu

  a124  free  0.01   12001  12  12001   2389  2/2    0

  a125  busy* 12.00   12001  12  12001   1652  4/4   12    9410 wxxu

  a126  free  0.00   12001  12  12001   2442  1/1    0

  a127  excl  11.39*  12001  12  12001   1898  3/3   12    9503 john

  a128  free  0.00   12001  12  12001   1032  1/1    0

  a129  excl  11.68   12001  12  12001   1712  3/3   12    9503 john

  a130  free  1.75*  12001  12  12001   3264  5/3    3    8216 wxxu 9187 wxxu 9533 wxxu

…………………………………….

…………………………………….

节点状态

excl :所有CPU资源已被占用;

busy CPU已接近满负荷运行;

free :全部或部分CPU空闲;

offl :管理员手动指定离线状态;

  

1.1.4 查询作业运行状态

qstat -an |more

如下输出:

mgmt:

                                                                         Req'd  Req'd   Elap

Job ID               Username Queue    Jobname          SessID NDS   TSK Memory Time  S Time

-------------------- -------- -------- ---------------- ------ ----- --- ------ ----- - -----

7010.mgmt            ymei     itcs     ga88_remd1_zj     22516     8  96    --  720:0 R 231:2

   a330/11+a330/10+a330/9+a330/8+a330/7+a330/6+a330/5+a330/4+a330/3+a330/2

   +a330/1+a330/0+a331/11+a331/10+a331/9+a331/8+a331/7+a331/6+a331/5+a331/4

   +a331/3+a331/2+a331/1+a331/0+a332/11+a332/10+a332/9+a332/8+a332/7+a332/6

   +a332/5+a332/4+a332/3+a332/2+a332/1+a332/0+a334/11+a334/10+a334/9+a334/8

   +a334/7+a334/6+a334/5+a334/4+a334/3+a334/2+a334/1+a334/0+a335/11+a335/10

   +a335/9+a335/8+a335/7+a335/6+a335/5+a335/4+a335/3+a335/2+a335/1+a335/0

   +a337/11+a337/10+a337/9+a337/8+a337/7+a337/6+a337/5+a337/4+a337/3+a337/2

   +a337/1+a337/0+a339/11+a339/10+a339/9+a339/8+a339/7+a339/6+a339/5+a339/4

   +a339/3+a339/2+a339/1+a339/0+a435/11+a435/10+a435/9+a435/8+a435/7+a435/6

   +a435/5+a435/4+a435/3+a435/2+a435/1+a435/0

 

查询作业命令  qstat [参数],其中参数可为:

    -q  :列出系统队列信息

    -B  :列出PBS服务器的相关信息

    -Q :列出队列的一些限制信息

    -an:列出队列中的所有作业及其分配的节点

    -r  :列出正在运行的作业

    -f jobid     :列出指定作业的信息

    -Qf queue:列出指定队列的所有信息

 

1.1.5 删除作业

作业删除命令:qdel  作业号

注意事项

  1、非root用户只能查看、删除自己提交的作业;

  2、强制删除作业,当某些作业由于节点死机无法删除时,可由root用户登录,使用qdel -p 作业号 来强制删除作业                                                                                                                          

1.1.6  作业调度系统使用举例

1.1.6.1 串行作业

#!/bin/bash -x

 

#PBS -N serial

#PBS -l nodes=1:ppn=1

#PBS -l walltime=60:00:00

#PBS -j oe

#PBS -q serial

 

#

#define variables

#

echo "This jobs is "$PBS_JOBID@$PBS_QUEUE

 

cd ${PBS_O_WORKDIR}

 

date

sleep 100

hostname

date

 

 

#PBS -l nodes=1:ppn=1表示申请1个节点上的1CPU

#PBS -q serial表示提交到集群上的serial队列。

 

1.1.6.2 并行作业

Ÿ   openmpi

并行作业的脚本以cpi为例。示例OpenMPI脚本:openmpi.pbs

#PBS -N openmpi

#PBS -l nodes=1:ppn=8

#PBS -j oe

#PBS -l walltime=2:00:00

cd $PBS_O_WORKDIR

 

echo my job id is $PBS_JOBID | tee  openmpi.log

echo run nodes is following: | tee -a openmpi.log

cat $PBS_NODEFILE | tee  -a openmpi.log

 

echo begin time is `date` | tee -a  openmpi.log

id=`echo $PBS_JOBID|awk -F. '{print $1}' `

NP=`cat $PBS_NODEFILE|wc -l`

 

mpirun -np $NP -hostfile $PBS_NODEFILE --mca orte_rsh_agent ssh  --mca btl self,openib,sm   ./program  2>&1 | tee -a openmpi.log

 

echo end time is `date` | tee -a  openmpi.log

Ÿ   mpich2

示例MPICH2脚本:mpich2.pbs

#PBS -N mpich2

#PBS -l nodes=1:ppn=8

#PBS -j oe

#PBS -l walltime=2:00:00

cd $PBS_O_WORKDIR

 

echo my job id is $PBS_JOBID | tee  mpich2.log

echo run nodes is following: | tee -a mpich2.log

cat $PBS_NODEFILE | tee  -a mpich2.log

 

echo begin time is `date` | tee -a  mpich2.log

id=`echo $PBS_JOBID|awk -F. '{print $1}' `

NP=`cat $PBS_NODEFILE|wc -l`

 

mpiexec.hydra  -n $NP -launcher ssh -f $PBS_NODEFILE ./program  2>&1 | tee -a mpich2.log

 

echo end time is `date` | tee -a  mpich2.log

Ÿ   mvapich2

MVAPICH2示例脚本:mvapich2.pbs

#PBS -N mvapich2

#PBS -l nodes=1:ppn=8

#PBS -j oe

#PBS -l walltime=2:00:00

cd $PBS_O_WORKDIR

 

echo my job id is $PBS_JOBID | tee  mvapich2.log

echo run nodes is following: | tee -a mvapich2.log

cat $PBS_NODEFILE | tee  -a mvapich2.log

 

echo begin time is `date` | tee -a  mvapich2.log

id=`echo $PBS_JOBID|awk -F. '{print $1}' `

NP=`cat $PBS_NODEFILE|wc -l`

 

mpiexec.hydra -n $NP -launcher ssh -f $PBS_NODEFILE cpi  2>&1 | tee -a mvapich2.log

 

echo end time is `date` | tee -a  mvapich2.log

Ÿ   intelmpi.pbs

IntelMPI示例脚本:intelmpi.pbs

#PBS -N intelmpi

#PBS -l nodes=1:ppn=8

#PBS -j oe

#PBS -l walltime=2:00:00

cd $PBS_O_WORKDIR

 

echo my job id is $PBS_JOBID | tee  intelmpi.log

echo run nodes is following: | tee -a intelmpi.log

cat $PBS_NODEFILE | tee  -a intelmpi.log

 

echo begin time is `date` | tee -a  intelmpi.log

id=`echo $PBS_JOBID|awk -F. '{print $1}' `

NP=`cat $PBS_NODEFILE|wc -l`

qstat -f1 $PBS_JOBID | grep exec_host | awk '{print $3}' | tr '+/' '\n ' | awk -v prog="cpi " -v net="" 'NR==1 {node=$1; count=1; core[count]=$2; next}; $1==node {count++; core[count]=$2}; $1!=node {printf("-n %d -host %s -env %s -env I_MPI_PIN_PROCESSOR_LIST ",count,node,net); for(i=1;i<count;i++) printf("%d,",core[i]); printf("%d %s\n",core[count],prog); node=$1; count=1; core[count]=$2}; END {printf("-n %d -host %s -env %s -env I_MPI_PIN_PROCESSOR_LIST ",count,node,net); for(i=1;i<count;i++) printf("%d,",core[i]); printf("%d %s\n",core[count],prog)}' >rankfile.${id}

 

mpirun  -r ssh -f $PBS_NODEFILE -configfile rankfile.$id  2>&1 | tee -a intelmpi.log

 

echo end time is `date` | tee -a  intelmpi.log

1.2 web版使用作业调度

详见Gridview3.0用户手册