在集群上运行Matlab 代码和Python代码的前提:在集群上配置好Matlab和Python
了解自己所用的集群的的登录节点和调试节点:
普通用户通过校园网进入到登陆节点提交作业,可在程序调试节点上调试、编译、测试CPU 、GPU 和MIC 程序。
登录
- Xshell
双击Xshell 图标,进入Xshell 的界面并点击新建
- 在新建会话中填写会话名称
- 主机(H)内填写:10.171.1.3 (视自己情况而定)
- 端口号Port 内填写12306 (视自己情况而定)
- 选择Connect ,填入用户名及密码
- Xftp
- 打开Xftp 工具,点击file ,选择new
- 在Host 中输入:10.171.1.3
- 在Protocol 中选择: SFTP
- 在Port Number 中输入:12306
- 在User Name 输入用户名(同上)
- 在Password 输入密码(同上)
提交作业
- 在Xshell 中,使用mkdir 命令新建一个文件夹。例如:mkdir test ,其中test为文件夹名(或直接在xftp中新建文件夹)
- 利用Xftp ,将程序文件与run.pbs 脚本文件传到新建的文件夹
- 提交作业,输入命令:qsub run.pbs 系统将产生一个作业号,如1554
- 查看该目录下全部内容:ls
- 查看状态 qstat
- 查看程序运行的结果信息输入命令:cat Matrix.o1554
修改run.pbs文件
- 输入命令:
vim run.pbs
- 修改:按“
i
”键或者insert
键,进入插入模式,此时屏幕最下方出现“–INSERT --”,表示可以进行修改,此时可修改里面内容- 修改完成后,按“
ESC
”键退出插入模式,输入“:wq
”命令,保存并退出。
pbs (Protable Batch System)是一个任务管理系统,当多个用户使用 同一个计算资源时,每个用户用PBS 脚本提交自己的任务,由 PBS 对这些任务进 行管理和资源的分配。接下来将提供一个简单的 PBS 脚本注:(红的部分为需要修改的部分):
#PBS -N svmmm
(N:name:svmmm:脚本文件的名称)
#PBS -o /home/User Name /run_code/matlab_code/svmmm/output/ae.out(o:out)
#PBS -e /home/User Name /run_code/matlab_code/svmmm/output/ae.err(e:error)
#PBS -l nodes=1:ppn=24
(设置单结点、多结点,cpu核数)
#PBS -p 110
#PBS -l walltime=1200:00:00
#PBS -q cpu1
(设置任务递交平台,cpu/gpu/mic)
#PBS -V
#PBS -S /bin/bash cd $PBS_O_WORKDIR
NP=cat $PBS_NODEFILE | wc -l
NN=cat $PBS_NODEFILE | sort | uniq |tee /tmp/nodes.$$ | wc -l
cat$PBS_NODEFILE > /tmp/nodefile.$$$
matlab -nodesktop -nosplash -r svmmm
(matlab:表明使用matlab平台;svmmm:是.m文件,此处删除.m ,若为python文件,则格式为:python文件名.py)
rm -rf /tmp/nodefile.$$
rm -rf /tmp/nodes
首先将上述脚本保存成run.pbs,然后 qsub submit 就提交了该作页。其中:
- #PBS 为脚本选项,用于设置一些参数。
- #PBS -N 表示任务名称
- #PBS -l 表示资源列表,用于设定特定任务所需的一些参数。
nodes表示 并行环境下可以使用的节点数
walltime 表示任务最大时限
这两个参数不是 PBS 脚本参数,而是并行环境所需的参数。- #PBS -q 表示当前任务选用的队列。在并行环境下,一个系统中往往有多个队列,任务提交后,将在所选的队列中排除等候。系统中有哪些队列可以用 qstat -q 查看。
pbs系统队列划
ncpu队列,资源限制在node1-node136。
ngpu队列,资源限制在gpu01-gpu07。
nmic队列,资源限制在mic01-mic03。
关键命令
- 直接输入MATLAB,进入MATLAB编辑状态
- exit():退出MATLAB编辑状态
- mkdir 文件名 :新建一个文件夹,mkdir test ,其中test 为文件夹名或者直接在xftp中新建文件夹
- shownodes:查看目前集群资源使用情况
- cd ~:返回根目录 cd
- /home+ls:查看各用户名
- cd 文件名:进入该文件
- qsub run.pbs:提交作业
- ls :查看该目录下全部内容
- qstat:查看状态
- cat Matrix.o1554 :查看程序运行的结果信息输入命令
- vim run.pbs +“i”键或者insert 键,进入插入模式,此时屏幕最下方出现“–INSERT --”,表示可以进行修改
- “ESC ”键退出插入模式,输入“:wq ”命令,保存并退出。
- qdel 21(作业号):杀掉错误任务
- rm -rf 文件名:删除文件
- Ctrl +c :强行退出
- Tab:自动补全
此处附一个新手常使用的20条命令的链接:
https://www.oschina.net/translate/useful-linux-commands-for-newbies?lang=chs&p=1
实践
- GPU程序
- 登陆gpu01 节点:
ssh gpu01
- 进入你新建的文件夹中:
cd lule
- 配置环境:
exportLD_LIBRARY_PATH=/opt/intel/opencl-1.2-sdk-4.4.0.134/lib64:$LD_LIBRARY_PATH
- 编译:
g++ Matrix.cpp –I/opt/intel/opencl-1.2-sdk-4.4.0.134/include–L/opt/intel/opencl-1.2-sdk-4.4.0.134/lib64 –lOpenCL –lrt –o test
- 退出gpu01 节点
- 提交作业,输入命令:
qsub run.pbs
系统将产生一个作业号1554- 查看该目录下全部内容:
ls
- 查看状态
qstat
- 查看程序运行的结果信息输入命令:
cat Matrix.o1554
- MPI程序
- 将mpi 程序hello.c 拷入自己目录下
- 编译:
mpicc –o test hello.c
- 通过脚本提交:
qsub run.pbs
- 查看该目录下的全部内容:
ls
- 查看输出结果:
cat Matrix.o1575
- CUDA 程序
- 使用
ls
查看其中的源文件(“Matrix_add.cu 文件”)- 配置环境:使用命令
export PATH=/opt/cuda-6.0/bin:$PATH
使用编译命令:nvcc Matrix_add.cu -o test
进行编译Matrix_add 文件
再次使用ls
命令查看,会看到编译Matrix_add文件后输出的test1 文件- 使用脚本提交文件。使用写字板修改run.pbs 文件。
- 使用命令
qsub
提交run.pbs,提交后会出现1578.xdhpc01 的提交号。- 使用命令
ls
查看。发现out.e1578 以及out.o1578 两个新生成的文件,如此说明提交脚本已经成功。- 使用命令
cat out.o1578
查看本程序运行的结果。
使用命令cat out.e1578
查看本程序编译过程的信息。
- OpenMp 程序
- 使用
ls
命令查看目录下的OpenMp 程序(matrix_multiply.c) 。- 在当前目录下,使用
gcc -fopenmpmatrix_multiply.c -otestopenmp
编译程序。- 使用写字板打开
run.pbs
文件后,进行修改,并保存- 在登录节点上使用
qsub
提交run.pbs。提交后会出现46984.xdhpc01的提交号。- 使用命令
ls
查看。发现test.o46984以及test.e46984两个新生成的文件,如此说明提交脚本已经成功。使用命令cat test.o46984 查看OpenMp程序的运行结果。