工作站使用方法

登录到工作站

你需要一个账号才能登录到工作站。如何登录

提交前准备

在你准备提交任务之前,你需要额外进行如下的工作。

将本地文件上传至服务器

你需要将任务的源码以及所需的输入文件上传至服务器,通常情况下,由于系统环境不同,服务器不能直接运行从本地上传的可执行文件,因此编译的工作必须在服务器上重新执行一次。

  • 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,用户名,密码。
      client1
      在 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链接到你的目标文件上。

编译所需的命令行较为复杂,推荐使用Intel® Math Kernel Library Link Line Advisor来指导编译和链接。

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时计算机空闲。

pbsnodes

提交任务

你需要编写一个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 <脚本名(不带.m后缀)> <输出文件名>

在以上命令中将‘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 <PBS脚本文件名>

即可提交任务。

提交 MATLAB 任务

注:此命令近期的用法会有调整

你可以手动编写PBS脚本,然后使用qsub命令手动提交 matlab 任务,但是我们推荐使用如下的脚本命令直接提交 matlab 任务。无需编写PBS脚本和手动调用qsub,此脚本会自动帮你完成,为此,你只需要准备你的 matlab 脚本(M文件)。

$ matpbs.py [-j][-c <使用 CPU 数>][-t <脚本运行时间>][-o <输出文件名>] -f <脚本名称(不带.m后缀)>

此命令的详细用法如下:

  • -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后缀)>的文件夹中。

注意:m 脚本文件必须在当前目录中。

提交 R 任务

注:此命令近期的用法会有调整

你可以手动编写PBS脚本,然后使用qsub命令手动提交 R 任务,但是我们推荐使用如下的脚本命令直接提交 R 任务。无需编写PBS脚本和手动调用qsub,此脚本会自动帮你完成,为此,你只需要准备你的 R 脚本(R文件)。

$ Rpbs.py [-c <使用 CPU 数>][-t <脚本运行时间>][-o <输出文件名>] -f <脚本名称(带.R后缀)>

此命令的详细用法如下:

  • -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后缀)>的文件夹中。

注意:R 脚本文件必须在当前目录中。

查看任务状态

使用qsub命令之后,如果出现如下图的提示

submit success

则说明提交成功,左边的数字表示任务的ID,右边表示提交的节点,目前所有用户都只能在admin节点上提交任务。

使用

$ qstat

可以查看当前所有任务的运行状态。

qstat

其中,第五列(指标为S)表示运行的状态。R:运行中;C:已完成;H:被挂起;Q:排队中

使用

$ pestat

可以查看当前所有节点的占用状态。

pestat

删除任务

$ qdel <任务ID>

注意:用户只能删除自己的作业,不能删除别人的作业。

挂起任务

$ qhold <任务ID.节点>

取消任务挂起

$ qrls <任务ID.节点>

如果忘记作业ID可以使用qstat命令查看。

输出文件

计算时,标准输出流和标准错误流被重定向到文件,因此控制台中不再显示这些输出。当程序结束时,系统默认会将标准输出文件和标准错误文件复制到调用qsub的目录下。如果在PBS脚本中使用了 -o /-e 选项,则这些文件会被复制到用户所指定的目录下。

文件命名规则:

  • 标准输出文件:<作业名>.o<作业ID>

  • 标准错误文件:<作业名>.e<作业ID>

如果使用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