工作站使用方法
登录到工作站
你需要一个账号才能登录到工作站。如何登录
提交前准备
在你准备提交任务之前,你需要额外进行如下的工作。
将本地文件上传至服务器
你需要将任务的源码以及所需的输入文件上传至服务器,通常情况下,由于系统环境不同,服务器不能直接运行从本地上传的可执行文件,因此编译的工作必须在服务器上重新执行一次。
Linux
启动一个新的终端,在新终端下使用scp命令来远程复制文件或文件夹。代码中‘$’是Shell提示符,使用时无需输入,此后不再说明。
复制文件(将本地文件复制到你的Home文件夹下,需要输入你的登录密码,username为用户名。)
$ scp 本地文件 username@ip_address:/public/home/username
复制文件(将服务器文件复制到你当前计算机的当前目录下,需要输入你的登录密码,username为用户名。)
$ scp username@ip_address:/public/home/username/远程文件 .
复制文件夹(将本地文件夹复制到你的Home文件夹下,需要输入你的登录密码,username为用户名。)
$ scp -r 本地文件夹 username@ip_address:/public/home/username/
复制文件夹(将服务器文件夹复制到你当前计算机的当前目录下,需要输入你的登录密码,username为用户名。)
$ scp -r username@ip_address:/public/home/username/远程文件夹 .
如果不想使用 scp 命令,可以利用 sshfs 将服务器的 home 目录挂载到本地。这并不会消耗你本地的存储空间。
首先,使用如下命令安装 sshfs 应用
$ sudo apt-get install sshfs
其中 apt-get 是 ubuntu/debian 的安装包管理器,如果你在使用其它 linux 发行版,请使用相应的安装包管理器进行安装。
安装完毕后,在你喜欢的本地目录下建立挂载点,为了方便,可以选择个人的本地 home 文件夹。
$ mkdir workstation
其中workstation为挂载点的名称,可以随意填写。
最后,将服务器端的 home 文件夹挂载到本地
$ sshfs username@ip_address:/public/home/username/ workstation
其中username为你用户名,ip_address为服务器的地址。上面命令的最后一个 workstation 表示将服务器文件夹挂载到刚创建的挂载点 workstation 上。使用时请将其替换成你实际创建挂载点的路径。
挂载成功后,你可以从挂载点处(在本说明中为个人 home 文件夹下的 workstation 目录)直接访问你的服务器远端的目录,非常方便。
当你不需要使用服务器文件时,需要将服务器挂载目录卸载。命令为
$ fusermount -u workstation
其中 workstation 为你事先创建好的挂载点。
Mac OS
在 Mac OS 中,同样可以使用 scp 命令进行本地和服务器之间的文件传输,使用方法同 Linux 下的 scp。
Windows
使用 WinSCP 图形客户端。下载地址
在下图中分别输入服务器IP,用户名,密码。
在 WinSCP 中同样可以配置 SSH 无密码登录,点击“高级”即可进行类似设置(需要 ppk 文件:生成方法)。
进入传输面板进行操作即可。
配置运行环境
将源码编译成可执行文件
使用C/C++等语言编写的程序时,需要在服务器上对源码进行编译,尽量不要在本地编译,否则你的程序可能因为库版本不一致而导致无法运行。目前管理员正在编写可简单编译 C 程序的脚本。
指定 gcc 编译环境
服务器安装了多个 gcc 编译工具的版本,在使用 gcc 编译工具时需要配置 gcc 的编译环境。
使用
$ module avail
可以列出所有可用的运行环境模块。执行此语句之后可以看到服务器中的所有 gcc 版本。
从服务器中已有的 gcc 版本中,选择你需要的版本作为你的编译器。例如,更改当前 gcc 版本为 4.8.5
$ module add gcc/4.8.5
有关配置服务器运行环境的详细说明,请参考这里。
使用Intel MKL
使用Intel MKL进行计算时,需要使用gcc/g++编译工具,并将MKL链接到你的目标文件上。
MKL Link Line Advisor 工具需要用户指定选项才可正确完成链接命令的生成。各个选项的含义如下:
Select Intel product: Intel MKL 2017,选择这个选项即可。MKL 链接的命令在各个版本中的区别不大。
Select OS: 一定要选择 Linux,这是服务器的操作系统。
Select usage model of Intel Xeon Phi Coprocessor: 选择 None 即可,我们暂时用不到这个特殊的设定。
Select compiler: 根据个人使用的编译器自行选择。例如程序使用 gcc 编译,则此项需要选择 GNU C/C++。
Select architecture: 选择 Intel 64,我们的系统是 64 位系统。
Select dynamic or static linking: 选择库类型,是静态库还是动态库。一般情况下建议选择动态库 dynamic,极少数情况(例如编译 MATLAB 的 MEX 文件)可能需要静态库 static。
Select interface layer: 选择整数类型。在这里我们选 32-bit integer,即 32 位整数。
Select threading layer: 选择多线程类型。这里需要注意自己程序的用途,如果希望 MKL 仅仅占用 1 个 CPU 核心进行运算,那么需要选择 Sequential。如果希望 MKL 自动利用线程进行并行运算,那么需要选择 OpenMP threading。
Select OpenMP library: 在上一个选项选择 OpenMP threading 之后出现,选择 OpenMP 所使用的库。在这里需要选择编译器对应版本的 OpenMP 库。例如使用 gcc 编译器进行编译,则需要选择 GNU(libgomp)。
Select cluster library: 如果没有使用分布式并行计算的库,无需勾选任何选项。
Select MPI library: 无需设置。
Select the Fortran 95 interfaces: 无需设置。
Link with Intel MKL libraries explicity: 建议勾选以查看详细的链接命令。
按照如上设置完毕后,即可在下方的输出中看到链接选项和编译选项。直接复制到 Makefile 中即可。
注意:使用matlab,python则只需要上传脚本,并指定运行环境即可,不需要编译。
查看可用资源与计算节点状态
在提交任务之前,务必检查一下各个节点的状态,例如资源是否充足,当前有多少正在执行的任务等。
使用
$ pbsnodes -a
命令可以显示所有计算节点的状态,如下图。状态为free时计算机空闲。
提交任务
你需要编写一个PBS脚本来完成任务提交的设置。PBS脚本可以在本地编写后上传,也可以直接在工作站服务器上编辑。如何编辑
编写PBS脚本
一个PBS脚本的模板如下
#!/bin/sh
#PBS -N
#PBS -a
#PBS -l walltime=hh:mm:ss 作业最长运行时间
#PBS -l nodes=X:ppn=Y 在 X 个节点上申请 Y 个 CPU 核心
#PBS -l mem=XXmb 申请最大内存为 XX MB
#PBS -q
#PBS -o
#PBS -e
# 在输入表示计算任务的命令之前,需要强制设置当前的工作路径
cd $PBS_O_WORKDIR
# 设置运行环境
# 输入要执行的Shell脚本
其中,第一行是固定的,表示使用/bin/sh来执行脚本。其余的说明如下
申请资源(例如节点,运行时间等)的选项名为小写的字母‘L’,不是大写字母‘I’。
作业开始运行时间的格式为CCYYMMDDHHMM.SS,为了方便,可以直接写HHMM的部分,这样默认的日期就是当前日期。
总共的节点数为 4,每个节点的最大 CPU 核心数量为 48 个,申请时请不要超过最大值。建议使用pestat命令查看剩余资源数量,在确定申请 CPU 核心数量之前,请确认你的程序是否真的需要这些计算资源。如果程序的并行程度不高,申请过多的 CPU 核心数会造成资源的浪费(多数 CPU 占用率会较低),并且会影响他人使用。在这里我们建议申请的节点数为 1(目前的 MATLAB 不支持跨节点运行),CPU 核心数不超过 24。
当前有两个队列,debug,batch,默认提交到 debug 队列中。
以上的所有#PBS属性均可以不设置,当缺少某属性时,系统将使用默认值。
请在使用时估计自己任务的开销,适量申请计算资源,避免造成资源的浪费。
队列的限制(以下限制均为对每个用户的限制)
队列
优先度
任务最大数
默认运行时间
最长运行时间
备注
debug
高
2
00:30:00
03:00:00
用于提交短期调试任务或者交互式任务
batch
低
20
00:30:00
---
用于提交批处理任务
此外,由于我们的计算资源较少,因此我们对每个用户使用的总计算资源也有限制。
CPU核心数:同一时间内,单个用户正在运行的任务占用的总核心数限制为 144 。
一个PBS脚本的例子
#!/bin/sh
#PBS -N test
#PBS -q debug
#PBS -l nodes=1:ppn=1
cd $PBS_O_WORKDIR
module add gcc/4.8.5
./hello
该脚本任务名为 test,加入到 debug 队列中,申请 1 个节点上的一个 CPU 核心,任务内容为运行指定目录下的 hello 程序。此程序的运行环境为 gcc/4.8.5。
使用 MEX 文件
Linux用户可直接将生成的 mexa64 文件上传至服务器,Windows/Mac用户则需要在服务器上编译 mex 文件。在Windows/Mac系统下生成的 mex 文件无法在 Linux 系统下使用。不过,仍然推荐 Linux 用户在服务器上重新编译 mex 文件。
注:以下操作实例仅适用于 MATLAB R2015b 或更低的版本
首先,需要将/public/examples/MATLAB文件夹下的 mexopts.sh 文件复制到个人的工作目录下。
$ cp /public/examples/MATLAB/mexopts.sh workdir
执行命令matn,进入matlab命令行模式。在matlab命令行下,输入
>> mex src.cpp
常见的计算软件/软件库的启动命令
以下列出服务器中常见的软件启动命令,可以作为手动编写 PBS 脚本的参考,也可以作为交互式计算的使用参考。
以命令行模式运行 MATLAB
$ matn
使用 MATLAB 运行 m 脚本
$ matbg
在以上命令中将‘matbg’替换为‘matbg-jvm’可以开启 MATLAB 的 jvm,此功能用于作图。
使用 R 运行 R 脚本
Rscript
使用 python 并载入 tensorflow 库
$ module add gcc/4.8.5
$ LD_PRELOAD=/lib64/librt-2.12.so python
第一行的目的是载入 gcc-4.8.5 环境,因为 tensorflow 必须在 C++11 环境下运行,实际使用时也可以替换成更高版本的 gcc。第二行是指定 python 运行的预先载入库,这个库同样也是 tensorflow 需要的。
提交任务
将PBS脚本编写完毕并上传工作站后(或直接在工作站编辑),进入PBS脚本的目录,使用
$ qsub
即可提交任务。
提交 MATLAB 任务
注:此命令近期的用法会有调整
你可以手动编写PBS脚本,然后使用qsub命令手动提交 matlab 任务,但是我们推荐使用如下的脚本命令直接提交 matlab 任务。无需编写PBS脚本和手动调用qsub,此脚本会自动帮你完成,为此,你只需要准备你的 matlab 脚本(M文件)。
$ matpbs.py [-j][-c ][-t ][-o ] -f
此命令的详细用法如下:
-j, --jvm: 启用 jvm,此选项用于输出 matlab 的图形
-h, --help: 显示本命令的帮助
-c, --cpus: 指定使用 CPU 核心数量,默认为 1,允许设置为 1 到 48(具体情况视计算资源而定)
-t, --walltime: 指定作业运行的时间,格式为HH:MM:SS,脚本会根据运行时间来选择合适的队列
-o: 重定向输出文件到某个文件中,此文件中包含输出在 MATLAB 控制台中的所有内容
-f: 指定运行的 m 脚本文件,此参数必须进行设置
一个例子(使用 jvm 功能,申请 12 个 CPU 核心和 2 小时的运行时间,脚本名为 test.m):
$ matpbs.py -j -c 12 -t 2:00:00 -f test
程序执行完毕后,产生的标准输出在名为PBS_MATLAB__的文件夹中。
注意:m 脚本文件必须在当前目录中。
提交 R 任务
注:此命令近期的用法会有调整
你可以手动编写PBS脚本,然后使用qsub命令手动提交 R 任务,但是我们推荐使用如下的脚本命令直接提交 R 任务。无需编写PBS脚本和手动调用qsub,此脚本会自动帮你完成,为此,你只需要准备你的 R 脚本(R文件)。
$ Rpbs.py [-c ][-t ][-o ] -f
此命令的详细用法如下:
-h, --help: 显示本命令的帮助
-c, --cpus: 指定使用 CPU 核心数量,默认为 1,允许设置为 1 到 48(具体情况视计算资源而定)
-t, --walltime: 指定作业运行的时间,格式为HH:MM:SS,脚本会根据运行时间来选择合适的队列
-o: 重定向输出文件到某个文件中,此文件中包含输出在 R 控制台中的所有内容
-f: 指定运行的 R 脚本文件,此参数必须进行设置
一个例子(申请 12 个 CPU 核心和 2 小时的运行时间,脚本名为 test.R):
$ Rpbs.py -c 12 -t 2:00:00 -f test.R
程序执行完毕后,产生的标准输出在名为PBS_R__的文件夹中。
注意:R 脚本文件必须在当前目录中。
查看任务状态
使用qsub命令之后,如果出现如下图的提示
则说明提交成功,左边的数字表示任务的ID,右边表示提交的节点,目前所有用户都只能在admin节点上提交任务。
使用
$ qstat
可以查看当前所有任务的运行状态。
其中,第五列(指标为S)表示运行的状态。R:运行中;C:已完成;H:被挂起;Q:排队中
使用
$ pestat
可以查看当前所有节点的占用状态。
删除任务
$ qdel
注意:用户只能删除自己的作业,不能删除别人的作业。
挂起任务
$ qhold
取消任务挂起
$ qrls
如果忘记作业ID可以使用qstat命令查看。
输出文件
计算时,标准输出流和标准错误流被重定向到文件,因此控制台中不再显示这些输出。当程序结束时,系统默认会将标准输出文件和标准错误文件复制到调用qsub的目录下。如果在PBS脚本中使用了 -o /-e 选项,则这些文件会被复制到用户所指定的目录下。
文件命名规则:
标准输出文件:.o
标准错误文件:.e
如果使用matlab脚本,则标准输出流和标准错误流也会被定向到matbg命令所指定的文件中。
其它功能
用户可以使用工作站的一些其它功能。
交互式计算
使用命令(代码中申请资源数前面的选项为小写的‘L’)
$ qsub -I -l
即可进入交互式计算模式。该模式下,用户将会被自动切换到一个计算节点,此后所有的计算都在这个节点上进行。使用时需要指定申请的资源数,格式为nodes=X:ppn=Y,资源数不能超过剩余资源的最大值。在此节点上计算无需编写PBS脚本,直接执行Shell命令即可。此模式大多用于计算任务需要计时或者实时调试的情况。如果你熟悉UNIX系统,那么这个模式的使用方法和你单独在PC上计算几乎没有区别。在此模式下,不要使用qsub命令提交任务,因此在登出之前,确保你的任务都已经执行完毕。
使用完毕后,请执行
$ exit
命令可以结束该次交互式任务,此命令也用于登出工作站。
注1:交互式模式只能提交到 debug 队列中,因此最大单次占用时间为 3 小时。
注2:严禁在非交互式模式下直接运行计算量大的任务。
VIM 编辑器
为了编写脚本方便,可以直接使用服务器系统的 VIM 编辑器进行对脚本的编辑。
使用
$ vim
可以新建或者打开已有的文本文件。
VIM 编辑器一共有两个主要的编辑模式:普通模式和插入模式。进入 VIM 编辑器后,编辑器处于普通模式。
在普通模式下,VIM编辑器会将按键解释成命令。
:q 如果未修改数据,退出
:q! 取消所有修改,退出
:wq 保存并退出
x 删除当前位置字符
dd 删除当前行
dw 删除当前光标所在单词
d$ 删除当前光标所在位置至行尾的内容
yy 复制当前行
yw 复制当前光标所在单词
y$ 复制当前光标所在位置至行尾的内容
p 粘贴文本至当前位置
i 进入插入模式
在插入模式下,即可插入文本到光标的位置。按下Esc键即可返回普通模式。
常见问题
Q:登录服务器时,输入密码时终端无反应。
A:这是正常现象,请正常输入你的密码然后按下[Enter]登录即可。
Q:在服务器运行编译好的 C 程序或者 MEX 文件时,会报告‘GLIBC version 2.14 not found’的错误。
A:请将源码在服务器上重新编译一遍,因为不同环境下编译出来的二进制可执行文件的运行条件是不同的。
Q:提交任务时,任务显示在‘Q’(排队)状态,但是有空闲的计算资源存在。
A:每个用户提交的任务的数量和占用的核数有一定限制,请查看工作站用户使用限制。
Q:我如何才能保存计算过程中控制台中输出的结果?
A:请使用输出重定向符号‘>’。例如将程序 text 的控制台输出重定向到文件 ‘out.txt’ 中
./test > out.txt
如果使用 matpbs.py 提交任务,则只需要指定 -o 选项即可。
附录
工作站总资源数
以下参数未加说明均表示每台节点的资源。
节点角色
节点数量
CPU 主频
CPU 总核数
内存
管理节点
1
2.60 GHz
32
64 GB
计算节点
4
2.50 GHz
48
128 GB
除此之外,所有节点共享 30 TB 的存储空间。
已经安装的软件/运行环境
软件名称
版本
默认载入
备注
gcc
6.1.0
Yes
不含 gfortran
4.7.4
No
---
4.8.5
No
支持C11
5.3.0
No
支持C11
6.2.0
No
支持C11
gdb
7.12
Yes
C 程序的默认调试工具
Valgrind
3.12.0
Yes
---
MATLAB
R2015b
Yes
---
R2016b
No
北京大学正版软件平台提供,需要联网使用
R
3.2.5
No
---
3.3.2
No
---
Anaconda
2
Yes
内嵌 python 2.7,支持 ipython
3
No
内嵌 python 3.5,支持 ipython
python
2.6
No
官方已经停止维护
3.5
No
与 Anaconda 冲突
JAVA/JDK
1.8.0_91
Yes
---
Intel Composer
15.0.2
Yes
包含 icc/MKL 等工具
OpenMPI
1.8.5
No
提供 mpicc/mpiexec,与其它 MPI 冲突。
mpich
3.2
No
提供 mpicc/mpiexec,与其它 MPI 冲突。
PETSc
3.5.4
No
依赖 mpich/3.2
SLEPc
3.5.4
No
使用时必须和 PETSc 版本一致
fftw
3.3.5
No
支持单精度和双精度版本,并支持 MPI 并行。若使用 MPI 功能时,请载入 mpich/3.2
Eigen
3.3.1
No
使用其 MKL 接口时需要在编译指定 MKL 头文件和库文件的位置
联系管理员
如果有疑问,请联系工作站管理员。
刘浩洋 liuhaoyang@pku.edu.cn