工作站(集群)使用说明及相关工具

快速入门

登陆方式

工作站只允许已经授权用户进行登录。在从管理员处获得你的账号名和初始密码后, Linux 或 Mac 用户可直接从命令行登录我们的工作站,使用 ssh 命令即可

ssh username@ip_address

username为管理员给你的账号,ip_address为远程主机的地址
比如:ssh zhangsan@172.18.121.14

对于windows用户,可以使用PuTTY,secureCRT,mobaterm等SSH客户端工具。就个人而言,mobaterm官网地址使用最顺手。

mobaterm使用示例

                          工作站(集群)使用说明及相关工具

                             工作站(集群)使用说明及相关工具

 更多使用可以参考mobaterm使用

SLURM脚本—作业调度

SLURM 资源管理系统的管理对象包括:节点,分区,作业和作业步。

  • 节点:Node

    • 即指计算节点
    • 包含处理器、内存、磁盘空间等资源
    • 具有空闲、分配、故障等状态
    • 使用节点名字标识
  • 分区:Partition

    • 节点的逻辑分组
    • 提供一种管理机制,可设置资源限制、访问权限、优先级等
    • 分区可重叠,提供类似于队列的功能
    • 使用分区名字标识
  • 作业:Job

    • 一次资源分配
    • 位于一个分区中,作业不能跨分区
    • 排队调度后分配资源运行
    • 通过作业 ID 标识
  • 作业步:Jobstep

    • 通过 srun 进行的任务加载
    • 作业步可只使用作业中的部分节点
    • 一个作业可包含多个作业步,可并发运行
    • 在作业内通过作业步 ID 标识

三种模式:srun(交互模式)sbatch(批处理模式) salloc(分配模式)

名为 bcm的主机仅仅为用户提供了登录操作的 平台,但程序的运行需要交给它背后的计算节点们完成。那么如何告诉工作站来运行我们的程序? 我们需要使用作业调度系统 SLURM,它给我们提供了若干运行程序的方式,在本章节 里我们简要介绍最常用的方式:提交 SLURM 作业脚本的批处理方式

man slurm

sacct(1), sacctmgr(1), salloc(1)分配模式,  sattach(1),  sbatch(1)批处理模式运行,  sbcast(1),  scan‐
       cel(1),  scontrol(1),  sinfo(1),  smap(1),  squeue(1),  sreport(1),  srun(1)交互模式,
       sshare(1), sstat(1), strigger(1), sview(1), slurm.conf(5),  slurmdbd.conf(5),
       slurmctld(8), slurmd(8), slurmdbd(8), slurmstepd(8), spank(8)

上面命令举例说明:

srun将任务分配到运行节点中

srun -n 8 -c 1 --gres=gpu:2 --pty bash
参数说明,-n 任务个数
“ --gres = gpu:2,mic:1”,“-gres = gpu:kepler:2”和“ --gres = help”。 注意:

通用资源,显式设置--gres的值以指定零

每个通用资源的计数或设置为“ --gres = none”或设置为对应数量
-c num 使用cpu数量
--pty bash 进入该节点的终端
-w node02 进入指定节点

squeue查看全部用户任务情况

sacct -S MMDD则会输出从 MM 月 DD 日起的所有历史作业

sacct -S 0916
       JobID    JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
2635               bash       defq      users          8     FAILED      6:0
2636               bash       defq      users          8  COMPLETED      0:0

sinfo查看节点情况

defq*        up   infinite      1   drng node05
defq*        up   infinite      3    mix node[01,06-07]
defq*        up   infinite      2   idle node[02-03]

idle表示空闲,mix表示有任务在跑,但有空闲智源,drng表示无

scontrol show jobs 显示作业具体信息

JobId=962 JobName=bash
   UserId=zhangtao(1010) GroupId=zhangtao(1010) MCS_label=N/A
   Priority=4294901079 Nice=0 Account=users QOS=normal
   JobState=RUNNING Reason=None Dependency=(null)
   Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0
   RunTime=96-11:29:28 TimeLimit=UNLIMITED TimeMin=N/A
   SubmitTime=2020-05-14T09:07:43 EligibleTime=2020-05-14T09:07:43
   AccrueTime=Unknown
   StartTime=2020-05-14T09:07:43 EndTime=Unknown Deadline=N/A
   PreemptTime=None SuspendTime=None SecsPreSuspend=0
   LastSchedEval=2020-05-14T09:07:43
   Partition=defq AllocNode:Sid=bcm:10241
   ReqNodeList=(null) ExcNodeList=(null)
   NodeList=node05
   BatchHost=node05
   NumNodes=1 NumCPUs=8 NumTasks=8 CPUs/Task=1 ReqB:S:C:T=0:0:*:*
   TRES=cpu=8,node=1,billing=8,gres/gpu=2
   Socks/Node=* NtasksPerN:B:S:C=0:0:*:* CoreSpec=*
   MinCPUsNode=1 MinMemoryNode=0 MinTmpDiskNode=0
   Features=(null) DelayBoot=00:00:00
   OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null)
   Command=bash
   WorkDir=/home/zhangtao/zy/CFF
   Power=
   TresPerNode=gpu:2

总结起来,在工作站上进行运算的步骤如下:

  • 登录主节点,准备程序和数据

  • 编写 SLURM 脚本/进入交互模式,设置作业属性(例如占用的资源,最长运行时间)。

  • 检查可用资源,提交作业脚本,检查任务状态(使用 squeue 和 sinfo)。

  • 等待运行结束,验收结果。

配置服务器个人运行环境

为了满足同学们计算任务的需求,服务器中安装了各种版本的软件。大家可在同一软件的不同版本之间切换,也可以在同一功能的不同软件之间切换,以此来选择最合适的编程环境和运行环境。使用系统命令 module 可以快速地达到这一效果。

module(可使用module就可弹出来)

Loading / Unloading commands:
  add | load      modulefile [...]  Load modulefile(s)
  rm | unload     modulefile [...]  Remove modulefile(s)
  purge                             Unload all loaded modulefiles
  reload | refresh                  Unload then load all loaded modulefiles
  switch | swap   [mod1] mod2       Unload mod1 and load mod2

Listing / Searching commands:
  list            [-t|-l]           List loaded modules
  avail   [-d|-L] [-t|-l] [mod ...] List all or matching available modules
  aliases                           List all module aliases
  whatis          [modulefile ...]  Print whatis information of modulefile(s)
  apropos | keyword | search  str   Search all name and whatis containing str
  is-loaded       [modulefile ...]  Test if any of the modulefile(s) are loaded
  is-avail        modulefile [...]  Is any of the modulefile(s) available
  info-loaded     modulefile        Get full name of matching loaded module(s)

Collection of modules handling commands:
  save            [collection|file] Save current module list to collection
  restore         [collection|file] Restore module list from collection or file
  saverm          [collection]      Remove saved collection
  saveshow        [collection|file] Display information about collection
savelist        [-t|-l]           List all saved collections
  is-saved        [collection ...]  Test if any of the collection(s) exists

Shell's initialization files handling commands:
  initlist                          List all modules loaded from init file
  initadd         modulefile [...]  Add modulefile to shell init file
  initrm          modulefile [...]  Remove modulefile from shell init file
  initprepend     modulefile [...]  Add to beginning of list in init file
  initswitch      mod1 mod2         Switch mod1 with mod2 from init file
  initclear                         Clear all modulefiles from init file

Environment direct handling commands:
  prepend-path [-d c] var val [...] Prepend value to environment variable
  append-path [-d c] var val [...]  Append value to environment variable

module avail

blacs/openmpi/gcc/64/1.1patch03    intel-tbb-oss/ia32/2019_20191006oss
blas/gcc/64/3.8.0                  intel-tbb-oss/intel64/2019_20191006oss
bonnie++/1.97.3                    iozone/3_482
cm-pmix3/3.1.4                     keras-py36-cuda10.1-gcc/2.3.1
cuda10.1/blas/10.1.243             lapack/gcc/64/3.8.0
cuda10.1/fft/10.1.243              ml-pythondeps-py36-cuda10.1-gcc/3.0.0
cuda10.1/nsight/10.1.243           mpich/ge/gcc/64/3.3
cuda10.1/profiler/10.1.243         mvapich2/gcc/64/2.3
cuda10.1/toolkit/10.1.243          nccl2-cuda10.1-gcc/2.4.8
cudnn/7.5.0                        netcdf/gcc/64/4.6.1
default-environment                netperf/2.7.0
fftw2/openmpi/gcc/64/double/2.1.5  openblas/dynamic(default)
fftw2/openmpi/gcc/64/float/2.1.5   openblas/dynamic/0.2.20
fftw3/openmpi/gcc/64/3.3.8         opencv3-py36-cuda10.1-gcc/3.4.7
gcc5/5.5.0                         openmpi/cuda/64/3.1.4
gdb/8.2                            openmpi/gcc/64/1.10.7
globalarrays/openmpi/gcc/64/5.7    protobuf3-gcc/3.7.1
hdf5/1.10.1                        pytorch-py36-cuda10.1-gcc/1.3.0
hdf5_18/1.8.20                     scalapack/openmpi/gcc/64/2.0.2
hpcx/2.4.0                         sge/2011.11p1
hpl/2.2                            slurm/18.08.8
hwloc/1.11.11                      tensorflow-py36-cuda10.1-gcc/1.14.0

可以看出集群自带的核心模块数量,可以使用module add+模块名加载或者module initadd+模块名加载(初始化加载)

加载的模块都在~/.bashrc中可以看到

 

module list查看当前加载的模块

Currently Loaded Modulefiles:
 1) slurm/18.08.8   2) cuda10.1/toolkit/10.1.243

 

删除与替换 module

如果要把某个模块从系统环境中删掉,需要使用

$ module remove 
如果要删除全部的模块,可以直接使用$ module purge
一个模块删除之后,你将无法直接使用与之相关的命令。对应软件的执行目录无法被直接访问,或者是还原成系统默认的版本。有的时候,模块之间会有所冲突,你无法在同一时间同时加载两个模块。例如同一软件的不同版本,或者是接口相同的不同软件。当你载入其中一个后,再载入另一个就会出错

使用conda创建属于你自己的虚拟环境

conda info -e查看有哪些虚拟环境

conda activate +虚拟环境名称激活虚拟环境

创建虚拟环境并制定python版本
conda create -n your_env_name python=X.X

conda删除虚拟环境
conda remove -n tf2 –all

 

使用图形化界面

通常情况下,在集群中我们都在命令行中操作。但是有时我们需要打开某些软件的图形 界面,此时我们需要借助 X11 转发

注意:在网络不好的时候请谨慎使用此功能,此时经过 X11 转发的界面操作起来有 明显卡顿。尽量在校内有线网或信号较好的无线网的环境下使用

Linux

在 Linux 环境中启用 X11 转发非常简单,只需要在登录时加入 -X 参数。

xxk@laptop: $ ssh -X user@server_ip

此后登录集群可以直接输入命令开启图形界面的程序。例如

matlab
MATLAB is selecting SOFTWARE OPENGL rendering.



firefox
Failed to open connection to "session" message bus: Using X11 for dbus-daemon autolaunch was disabled at compile time, set your DBUS_SESSION_BUS_ADDRESS instead
Running without a11y support!

工作站(集群)使用说明及相关工具

 

 

Windows

使用 MobaXterm

推荐使用 MobaXterm 客户端进行连接。官网地址>>

在默认情况下 MobaXterm 会自动打开 X11 的转发,因此只需正常登录然后直接输入 打开软件的命令即可

 

传输文件

我们经常会将我们本地的一些文件上传到工作站上,或是从工作站下载文件。这些工作用命令行可以轻松完成。

建议在传输文件之前对要传输的文件进行打包,以便有更高的传输效率。在 Linux 下可以使用 tar 工具进行打包。

$ tar -cjf archive.tar.bz2 folder1/ folder2/

上面的命令是将两个文件夹下的所有文件打包到 archive.tar.bz2 文件中,并进行一定压缩。在工作站打包数据建议使用这个命令。

Windows 用户可以使用 WinRAR 或者 Zip 进行打包。

在服务器中,相应的解包命令为

$ tar -xjf archive.tar.bz2
$ unzip archive.zip
$ unrar e archive.rar

Linux 或 Mac

使用 scp

在命令行中可以使用 scp 命令进行传输文件。这是依赖于 SSH 的一个命令,如果已经配置了 SSH 无密码 登录那么每次复制将不必输入密码。否则,每次传输文件都需要输入密码。

以下命令均在本地计算机中执行。

$ scp file username@ip_address:
$ scp file username@ip_address:Documents/

上面的第一条命令即可将 file 传输到工作站相应账号的 HOME 文件夹下,如果想要指定目录,可以直接写 相对于 HOME 文件夹的路径,例如第二条命令。

如果要使用 scp 命令复制文件夹,需要加上 -r 参数。

$ scp -r folder username@ip_address:

从服务器传输文件到本地只需将两个参数的位置调换。

$ scp username@ip_address:file .

在这里我们使用 . 来表示本地的当前路径。

使用 rsync

rsync 是强大的同步文件的命令行工具,它比 scp 更加智能。rsync 支持从本地到本地, 从本地到服务器,从服务器到本地的文件传输。使用 rsync 访问服务器依赖于 SSH 的 配置。下面的例子假定用户已经配置了 SSH 无密码登录。

传输文件

rsync 基本的传输文件命令为

# 下载文件
rsync [OPTION...] [USER@]HOST:SRC... [DEST]

# 上传文件
rsync [OPTION...] SRC... [USER@]HOST:DEST

其中 SRC 表示来源的路径,DEST 表示目标路径。由于要访问服务器,因此当来源或 目标不是本地时,需要指定服务器的用户和主机名。用户和主机名的指定可以直接使用 SSH 的 .ssh/config 表示的格式。

因此上传可用

# 假设已经配好了 SSH config,server 表示的主机有意义
rsync -avz folder server:

# 如果没有配置 SSH config
rsync -avz folder user@server_ip:

其中的三个选项,a 表示归档模式,在这个模式下传输将递归地进行,并保留文件的 权限信息;v 表示将中间信息输出;z 表示在传输过程中进行压缩来减少传输量。 下载只需要将 SRC 和 DEST 的地位对换。

rsync 的优势在于,每次在传输之前会对文件进行比较,只会传输那些真正改变的文件, 在多数情况下会极大减小传输量。下面是一个例子。

[liuhy@laptop ~]$ ls test/
total 0                        # test 文件夹只有三个文件
-rw-rw-r--. 1 liuhy liuhy 0 Jul  1 15:25 1.txt
-rw-rw-r--. 1 liuhy liuhy 0 Jul  1 15:25 2.txt
-rw-rw-r--. 1 liuhy liuhy 0 Jul  1 15:25 3.txt

# 使用 rsync 上传
[liuhy@laptop ~]$ rsync -avz test server:
sending incremental file list
test/
test/1.txt
test/2.txt
test/3.txt

sent 213 bytes  received 80 bytes  195.33 bytes/sec
total size is 0  speedup is 0.00

# 创建新文件 4.txt
[liuhy@laptop ~]$ echo "hello world" >> test/4.txt
[liuhy@laptop ~]$ rsync -avz test server:
sending incremental file list
test/
test/4.txt                    # 

同步时删除

使用 rsync 上传文件时,如果 SRC 的文件比 DEST 的文件要少时,rsync 默认不会去 处理 DEST 多出来的文件。如果要实现真的的完全同步,即删除 DEST 多出来的文件,需要 给 rsync 加上 –delete 选项。

接着上面的例子,在本地删除 1.txt,并告诉服务器也要删除这个文件

[liuhy@laptop ~]$ rm test/1.txt       # 删除 1.txt
[liuhy@laptop ~]$ rsync -avz --delete test server:
sending incremental file list
test/
deleting test/1.txt                   # 

断点续传

rsync 的同步算法只能针对整个的文件。默认情况下,如果文件传输不完整,rsync 会 扔掉这些文件,在下次传输的时候重新处理。当要传输单个大文件时,由于网络等多方面 原因,传输很难一次完成,这时候就需要断点续传功能。

# 使用 rsync 指定 --partial 选项来保留传输未完成的文件
[liuhy@laptop Downloads]$ rsync -avz --partial --progress gcc-7.3.0.tar.xz server:
sending incremental file list
gcc-7.3.0.tar.xz
     36,208,640  57%   11.43MB/s    0:00:02  ^CKilled by signal 2.
                                           # ^ 使用 Ctrl+C 强制终止
rsync error: unexplained error (code 255) at rsync.c(638) [sender=3.1.2]
# 指定 --append 选项来传输未完成的文件
[liuhy@laptop Downloads]$ rsync -avz --append --progress gcc-7.3.0.tar.xz server:
sending incremental file list
gcc-7.3.0.tar.xz
     62,462,388 100%   11.71MB/s    0:00:02 (xfr#1, to-chk=0/1)

sent 26,481,503 bytes  received 34 bytes  7,566,153.43 bytes/sec
total size is 62,462,388  speedup is 2.36
  # ^ 注意这是从 57% 开始传的,sent 和 total size 不一样。

将工作站目录挂载到本地

如果不想使用 scp 命令,可以利用 sshfs 将服务器的 HOME 目录挂载到本地。这并不会消耗你本地的存储空间。

首先,使用如下命令安装 sshfs 应用

$ sudo apt install sshfs

其中 apt 是 ubuntu/debian 的安装包管理器,如果你在使用其它 Linux 发行版,请使用相应的安装包管理器进行安装。

安装完毕后,在你喜欢的本地目录下建立挂载点,为了方便,可以选择个人的本地 HOME 文件夹。

$ mkdir workstation

其中 workstation 为挂载点的名称,可以随意填写。

最后,将服务器端的 HOME 文件夹挂载到本地

$ sshfs username@ip_address: workstation

其中 username 为你用户名,ip_address为服务器的地址。上面命令的最后一个 workstation 表示将服务器文件夹挂载到刚创建的挂载点 workstation 上。使用时请将其替换成你实际创建挂载点的路径。

挂载成功后,你可以从挂载点处(在本说明中为本地 HOME 文件夹下的 workstation 目录)直接访问你的服务器远端的目录,非常方便。

当你不需要使用服务器文件时,需要将服务器挂载目录卸载。命令为

$ fusermount -u workstation

其中 workstation 为你事先创建好的挂载点。卸载前请确保本地没有程序在使用远程目录下的文件。

 

本文由 @崔任远[Vip] 发布于 职涯宝 ,未经作者许可,禁止转载,欢迎您分享文章

发表评论

登录后才能评论
小程序
小程序
微信客服
微信客服
QQ客服 建站服务
分享本页
返回顶部