计算化学公社

 找回密码 Forget password
 注册 Register
Views: 9687|回复 Reply: 3
打印 Print 上一主题 Last thread 下一主题 Next thread

[集群维护] 分享一下超算的一些小技巧

[复制链接 Copy URL]

17

帖子

0

威望

68

eV
积分
85

Level 2 能力者

本帖最后由 chengdi123000 于 2015-3-6 23:02 编辑

新人第一帖,希望大大多多交流

不知道大家超算用得多不多,现在所里用nscc-tj的th-1a系统比较多,用了几周攒了一些脚本,分享一下

th-1a的结构和一般超算都差不多,用户登录vpn,用ssh访问到LN,再在LN中可以访问到CN,用yhi,yhq,yhrun,yhcontrol等命令提交任务。网上资料有很多,比如:

不再详述。

本人是做一点cfd的,所以和量化关系不大,不过超算有几点让人很不爽的地方,可能大家都深有体会,一是vpn太慢,上传下载超级麻烦;二是LN不能连接外网,网上直接down代码来编译也很麻烦。这里分享两个小技巧,可以做得方便一点儿。

nscc-tj的系统得用vpn登录,但是坑爹的这个vpn必须占用系统的22端口,所以通常客户端用windows比较多。

  • vpn传递大量数据的问题:rsync

超算的数据量都特别巨大,上传下载数据耗时超长,所以传文件很多人是用快递硬盘的方式,最近一个算例有560G,50k+个文件,vpn平均速度0.3-1.0 MB/s,而且实验室网络总带宽有限,下载和上传都很费劲,个人摸索了一下,发现一个比较好的方式,那就是可以用rsync来同步

rsync本来是linux下的一个同步工具,在windows下的移植是cwrsync,下载地址是:https://www.itefix.net/dl/cwRsync_5.4.1_x86_Free.zip,绿色软件,解压之后把里面的cwrsync.cmd用notepad打开改成cwrsync.bat,内容如下,并根据需要自己需要修改一下相关变量运行就好了,可以在客户端设置计划任务,夜间运行,在计算的同时就开始同步,这样计算生成的文件就源源不断地下载到本地。同样交换一下位置可以进行上传。

特别是计算结果文件通常都是文本文件,特别是结果文件,都是0123456789,这11个字符,采用压缩后,可以加速达10x左右,效果特别明显。

@echo off
rem author: catdog
rem modification: 2015-03-05
set RSYNC_OPT=-n -a -z -h -v -P
rem -n 测试,不输出
rem -a archive模式,保持文件结构、创建时间等
rem -z 启用压缩,对文本文件非常有效!
rem -h 人类可读数字,也就是加上K,G等字头
rem -v 输出详细信息
rem -P 可以断点续传
rem 更多选项可以输入以下命令
rem >rsync --help
rem 设置路径
rem 例如: 完整路径: /vol6/xxx/OpenFOAM
rem        相对($HOME)的路径: ~/OpenFOAM
set SOURCE_PATH=~/OpenFOAM
rem 目标文件夹使用cygwin形式的路径,也就是windows路径的'\'改成'/',把盘符X:改成/cygdrive/x/
rem 例如: C:\WORK\*--> /cygdrive/c/work/*
setDESTINATION_PATH_IN_CYGDRIVE_FORM=/cygdrive/d/
rem 用户名
set USER=xxx
rem 数据节点
set DATA_NODE=TH-1A-LN9
rem 设置环境变量HOME为当前目录,方便ssh使用,因为cwrsync后端采用的cygwin的库,
rem 所以需要一个home文件夹,指定为当地文件夹比较方便,不然会有权限问题
set HOME=%cd%
rem 设置log文件
set RSYNC_LOG=rsync.log
rem 重启的label
:restart
rem '^' 代表续行
rem id_rsa是该用户的私钥文件,可以用ssh-keygen生成,并将id_rsa.pub中的内容加入服务器的~/.ssh/authorized_keys中
rsync %RSYNC_OPT% -e './ssh -i ./id_rsa'--log-file=./%RSYNC_LOG% ^
%USER%@%DATA_NODE%:%SOURCE_PATH%%DESTINATION_PATH_IN_CYGDRIVE_FORM%
rem 利用rsync程序的返回值%ERRORLEVEL%选择下一步操作
if %ERRORLEVEL% GEQ 1 (
       echo'----------ERRORLEVEL =  %ERRORLEVEL%---------------'
       if%ERRORLEVEL% EQU 12 (
              remVPN断开会出现,直接退出
              echo'----------Error in rsync protocol data stream------'
              gotoend
       )else if %ERRORLEVEL% EQU 23 (
              rem可能是文件路径问题,直接退出
              echo'----------Partial transfer due to error------------'
              gotoend
       )else (
              rem不明原因错误,继续
              echo'----------Some  unclear error, try to restart------'
              gotorestart
       )
) else (
       rem圆满完成,结束
       echo'----complete without error!------------------------'
       gotoend
)

:end


2. LN节点直接访问网络问题

总所周知,ssh是可以利用-D 选项建立socks proxy接口的,可惜的是,最方便的wget不支持socks proxy,而超算用户权限很低,不能自己安装软件,不过linux下另一个神器curl,正好可以下载文件。这样就可以利用一些技巧,建立反向socks代理

这个过程分两步,第一步,建立本地socks代理,可以采用ssh localhost的方式,也可以使用其他的代理服务器,下面演示的是采用ssh localhost的方式

>>>step 1
首先需要在本地建立ssh服务器,网上很多相关教程,不详述,比如我用的bitvise ssh server,仍旧使用上述cwrsync中的ssh-keygen生成的私钥id_rsa和公钥id_rsa.pub吧,按照下图设置好公钥

(参考链接: http://www.bitvise.com/ssh-server-usage-faq#public-key

然后在本地用cmd进入cwsync所在路径,输入

set HOME=%cd%
ssh  -i ./id_rsa catdog@localhost -p2222 -f -N -D 1081


其中,
set HOME=%cd%               设置环境变量,因为cwrsync后端采用的cygwin的库,所以需要一个home文件夹,指定为当地文件夹比较方便,不然会有权限问题
./id_rsa                               私钥,用于免密码登录,便于实现自动化,这里也有个权限问题,如果是在cmd中用cwrsync自带的ssh-keygen生成的id_rsa,需要在属性中去掉Everyone的权限
catdog                                登录用户名;
-p2222                               表示采用的2222端口号,因为nscc-tj的vpn会占用掉22端口;
-f -N                                    表示ssh将在后台运行;
-D 1081                              在本地建立一个socks 代理,端口1081;

第一步就完成了,现在需要记住,localhost:1081就是我们要的socks 代理,如果你有办法弄到别的代理,比如192.168.1.123:1080,这一步可以省略。

>>> step 2
下面同样地,用ssh,建立反向链接,把服务器的55555端口映射到客户端的1081端口,命令如下

set HOME=%cd%
ssh xxx@th-1a-ln9 -R55555:localhost:1081-i ./id_rsa


其中,
set HOME=%cd%               设置环境变量,因为cwrsync后端采用的cygwin的库,所以需要一个home文件夹,指定为当地文件夹比较方便,不然会有权限问题
./id_rsa                               私钥,用于免密码登录,便于实现自动化,这里也有个权限问题,如果是在cmd中用cwrsync自带的ssh-keygen生成的id_rsa,需要在属性中去掉Everyone的权限
xxx                                     登录用户名;
th-1a-ln9                            数据节点;
-R55555:localhost:1081     把服务器的55555端口映射到socks代理端口,在这里是localhost:1081,如果有其他可用socks代理,比如192.168.1.123:1080,可直接使用;


同时请查看登录信息前的信息,如果显示

Warning: remote port forwarding failed for listen port 55555


表示该端口已经被占用,可以用exit退出,换一个端口重试
这样,第二部就完成了,数据节点就建立了一个socks代理:localhost:55555,因为通过-R反向建立了一条通道,此时在服务器中访问localhost:55555,就和在客户端中直接访问localhost:1081是一样的!而根据第一步,客户端的localhost:1081已经被我们变成了一个socks代理。


p.s. windows 的cmd窗口似乎有兼容性问题,最好是将输入法调整为英文EN,不然偶尔有奇怪的事情发生~~

>>>step 3,利用curl直接下载数据
在刚才打开的ssh terminal中输入

alias curlget="curl -O--socks5-hostname localhost:55555" #使用别名curlget来代替后面一长串
curlget whatever_you_want


其中,使用了两个curl的选项:
-O                                                                      代表输出成文件
--socks5-hostname localhost:55555                   设置socks代理地址,同时用这个代理来解析DNS地址,因为数据节点本身是在内网是无法解析域名的。

curl也可以开启压缩,只不过通常网上下载的都是.zip, .gz这样的压缩包,在下载很大的文件包的时候,就不用倒腾两次了。

3. 总结

1. ssh是很强大的工具,特别是它的端口映射,-L,-R,-D三个选项。可以很方便地来回打洞
2. ssh配合公钥私钥可以比较方便地实现自动化

全文完



评分 Rate

参与人数
Participants 5
eV +19 收起 理由
Reason
qhlucky + 4 好物!
元江1994 + 5 谢谢
sobereva + 5
ZHANGZY + 1 赞!
smutao + 4 好物!

查看全部评分 View all ratings

293

帖子

8

威望

1694

eV
积分
2147

Level 5 (御坂)

2#
发表于 Post on 2015-3-7 03:34:16 | 只看该作者 Only view this author
很赞! 用过天河的表示赞同。

17

帖子

0

威望

68

eV
积分
85

Level 2 能力者

3#
 楼主 Author| 发表于 Post on 2015-3-7 13:13:55 | 只看该作者 Only view this author
smutao 发表于 2015-3-7 03:34
很赞! 用过天河的表示赞同。

请问有知道有什么超算上可用的大型并行后处理程序么?paraview需要先打开x-window,nscc的th-1a用不了。后端用vtk的可能都不行,比如VisIt

17

帖子

0

威望

188

eV
积分
205

Level 3 能力者

4#
发表于 Post on 2017-5-19 10:55:16 | 只看该作者 Only view this author
谢谢分享~!

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 12:32 , Processed in 0.217906 second(s), 22 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list