教程:用云服务器和笔记本挂Gaussian任务

前言

在知乎上看到一篇文章:利用微软Azure搭建进行轻量级Gaussian计算的服务器

正好最近老师建议能丢自己服务器的(其实是老师买的服务器)就丢自己服务器。那我为什么不试着白嫖一下网上有的配置比较好的服务器跑一下Gaussian试试呢?反正老师服务器上的任务都要排队三天才能轮到……三天垃圾服务器也能算完了吧。当然这里也选的还是Azure,其他谷歌云、甲骨文也有,可自选。

另外,值得注意的是虽然第一个月可以靠200刀额度白嫖比较好的4核(实质2核)16G服务器,但是后面开始的12个月免费里面能使用的服务器只有标准 B1s (1 vcpu、1GiB 内存)+2*64GB SSD P6磁盘的配置,那样要算的话效率只会更低……(算不了了)

官方描述是【750 小时的灵活服务器 — 突发 B1MS 实例、32 GB 存储和 32 GB 备份存储】。

另外比较歪楼的介绍了当下所有Azure白嫖的思路和学生邮箱白嫖的内容。

注册帐号与创建虚拟机

这一步主要是把所有基础环境解决。本文以微软Azure的虚拟机为对象进行说明。

环境配置

首先既然要用虚拟机,那跑不掉的需要:

  • SSH软件
  • FTP软件

相关内容之前也在有机化学计算工具箱里面讲过了,就不重复了。

注册帐号

https://azure.microsoft.com/zh-cn/

登录以上地址,点击免费试用Azure即可:

记得注册信用卡并验证手机号。

创建虚拟机

因为第一个月使用的是200美元额度,所以放心大胆的建额度内的服务器就好:

其中最接近额度的是D4s类型的服务器,4vcpu+16G内存(此外后面还有版本号差异,不做讨论)。
注意:此处标记的vcpu是逻辑核心数而非物理核心数,物理核心为2。后面高斯配置需要用上。
安全设置部分建议用密码方式,后面SSH连接方便一点。

虚拟机建立后,请在虚拟机-网络部分点击添加入站端口规则:

服务选择FTP,其他默认即可:

SFTP、SSH连接虚拟机

SSH连接和确认Gaussian安装版本

新建一个配置然后去连就行:

另外连上去以后,先用grep cpu.cores /proc/cpuinfo | sort -u指令确定一下物理cpu的数量;

比如显示cpu cores : 2则为2个

再用grep -o -e sse4_2 -e avx -e sse4a -e avx2 /proc/cpuinfo指令确定一下Gaussian适用的版本。

如果什么都不出现或仅有空白行,则您的机器不能支持SSE4.2或AVX指令集,需要使用Legacy版本进行安装;
如果包含有sse4_2或sse4a字眼而没有avx字眼,建议您使用SSE4.2指令集的Gaussian版本;
如果包含有avx字眼(无论有无sse4_2或sse4a字眼),建议您使用AVX指令集的Gaussian版本;
如果包含有avx2字眼,建议您使用支持AVX2指令集的Gaussian版本;
如果您的集群既有Legacy又有AVX等机器,为了避免出错,建议您用Legacy版本。
参考自:http://www.molcalx.com.cn/gaussian-16-installation/

理论上会显示(一个逻辑内核下的内容有多少vcpu就有多少这个):

有avx2,也就是说可以直接安装网上比较流行的Gaussian版本。

SFTP连接和安装包上传

新建一个配置然后去连就行:

连接以后,用ftp软件上传gaussian安装包(一般直接拖就行),上传时间不定,反正东南亚区的花了大概半个小时。

安装包下载地址见工具箱。记得下Linux下的对应版本。

我觉得先传到免费机型上,再用sftp指令进行下载/上传会比传两次快一些。

相关指令:

在A端使用:sftp [user]@[ip] 登陆B端

使用put /home/usera/g16.tbz /home/userb/将压缩包传到B(反之用get指令)

Gaussian 16 安装

此节参考自:http://sobereva.com/439

假设当前用户名是a,要把Gaussian安装到自己的主目录下,且用的是bash,且使用的是流传较广的tbz格式压缩包版本,那么安装过程为:

  1. 把Gaussian压缩包解压到/home/a/g16文件夹下:tar -jvxf g16sample.tbz
  2. 本地新建Default.Route文件,输入以下内容并用SFTP软件上传到g16文件夹内
1
2
-M- 16GB
-P- 2

注意:M代表占用最大内存量,P代表使用的最大物理核心数。另外,此文件中的设置优先级低于输入文件里的%mem和%nproc设置。

  1. g16文件夹赋权:
1
2
cd g16/
chmod 750 -R *
  1. 建立一个文件夹用于储存Gaussian运行过程中产生的临时文件,位置随意。如:/home/a/g16/scratch。
  2. (可选)建立一个文件夹用于储存你的项目,如:/home/a/project。
  3. 用VScode等文本编辑器打开/home/a/.bashrc,在里面加入以下语句然后保存文件。
1
2
3
export g16root=/home/a
export GAUSS_SCRDIR=/home/a/g16/scratch
source /home/a/g16/bsd/g16.profile

注:

  • g16root:环境变量(说明Gaussian目录位置);
  • GAUSS_SCRDIR:环境变量(说明哪个文件夹作为临时文件夹);
  • source命令:用来执行Gaussian自带的脚本文件,其中包含了各种配置Gaussian运行环境的命令。
  1. 重新进入终端使以上内容生效(如果你是用Linux图形环境,就关闭终端窗口,然后重新打开。如果你是通过ssh方式登录服务器,就断开连接,然后重新连接服务器,当然也可以用exit)
  2. 测试一下,在shell主界面输入g16

如果显示:

1
2
admin@AZURE:~$ g16
Entering Gaussian System, Link 0=g16

则安装成功,按Ctrl+C放弃计算(Aborted)并回到shell主界面。

任务的投放

这一节主要讲任务投放相关内容和问题

参考:Linux中screen指令的用法

投递任务

  1. 把需要计算的任务的sample.gjk文件上传到指定目录,如:/home/a/project;
  2. 运行screen -S sample (后面的名字可随意更改),新建窗口;
  3. 新窗口中运行以下内容:
1
2
cd project/
g16 <test.gjf> test.out
  1. 系统自动回车,无需理会,按Ctrl+A后按D退出当前窗口,回到主界面;
  2. 按exit退出当前连接。(尽量不要直接关闭窗口)

投递任务方式

http://sobereva.com/439

Gaussian在Linux下投递任务的常见方法有以下几种:

  1. g16 < test.gjf > test.out

信息都输出到test.out里。末尾可以再加上&令任务在后台运行;

  1. g16 < test.gjf |tee test.out

信息输出到test.out的同时也同时输出到屏幕上;

  1. g16 test.gjf

输出文件将默认为当前目录下的test.log。

以上面第1种或第3种方式运行时,如果你又想把输出信息在屏幕上不断同步显示了,那么可以运行tail -f test.out。

因为任务提取很简单,就不说了。

查看任务状态

  • screen -ls指令:查看运行窗口的运行情况;
  • screen -r指令:恢复离线的screen作业;
  • screen -r [name]指令:连接对应窗口;
  • 主界面 jobs指令:查看正在运行的后台任务(screen内的无效);
  • 主界面ps指令:查看正在运行的后台教程(screen内的无效)。
  • 窗口内 ctrl+D:终止当前窗口的运行;
  • 主界面终止特定窗口运行:screen -S [name] -X quit
  • df -m指令:查看磁盘使用情况;
  • top指令:服务器运行情况(会显示窗口正在运行哪个link,按Q退出)。

问题(服务器)

主要是服务器上任务投放相关的问题,笔记本运行也会补充说明一下。

Q:为什么不使用nohup 指令使其运行?

A:确实尝试过,但是Azure会杀进程,所以只能换成screen用窗口来跑。当然,如果不用这个而用你自己搭的服务器,应该是没问题的。

另外nohup指令是:nohup g16 <test.gjf> test.out &

显示nohup: redirecting stderr to stdout也没啥问题,会正常出out文件。

笔记本Linux子系统nohup跑应该也没什么问题,所以打括号。

Q:如何确定跑完?

A:其实超算也没办法完全确定计算时间,只能根据计算经验瞎猜。当然,azure的话登上去以后看文件修改时间和现在的间隔就知道到底跑完没有,另外可以通过大小稍微判断一下。笔记本运行完就运行完了会自动结束,不像服务器的screen内会一直在跑。

Q:能丢队列任务或者平行任务吗?

A:理论上可以但是这么慢……算了我抽时间研究一下队列任务;平行任务就算了,已经很卡了。

笔记本理论上可以丢平行任务。

Q:怎么任务又跑了一次?

A:不清楚什么问题,但是只看窗口运行和cpu占用好像没法判断算完没有,只能从文件大小,文件修改时间,以及out文件末尾是不是出现:

Normal termination of Gaussian 16 at [time].

这个就是算完的意思,一般打开就没问题,窗口可以直接kill了。

利用Linux子系统(WSL2)进行Gaussian计算

本节参考:

系统配置和安装

既然服务器可以跑,那么理论上自己手上的笔记本也能跑。

我使用的是Windows 11 的Ubuntu 20.0 WSL2 Linux子系统(G16W经过若干次尝试都不成功),并按以下步骤安装子系统:

  1. 通过BIOS启动虚拟化(可以通过任务管理器查看是否启动)
  2. 在设置-应用-可选功能-更多Windows功能 中,选择启用适用于Linux的Windows子系统和虚拟机平台(Win10还多一项Hyper-V)
  3. 重启后,打开Microsoft Store,搜索Ubuntu 然后直接安装(没有登陆需要登陆)
  4. 升级内核(下载 Linux 内核更新包):https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
  5. 打开并配置root用户的用户名、密码后,按照上面服务器部分的设置直接照抄即可
  6. 注意根据系统配置调整输入文件的写法。
  7. 在子系统执行计算(我用的投递任务方式中第二种方法)。

问题解决

明明打开了虚拟化,但是系统一直提示没有打开虚拟化

A:之前如果安装过安卓模拟器,需要在PowerShell(管理员)中执行以下内容:

bcdedit /set hypervisorlaunchtype auto

这个跟功能里面是否启用Hyper-V没有关系。

如果后续需要恢复安卓模拟器使用,则需要在PowerShell(管理员)中执行:

  • wsl --shutdown关闭wsl主机;
  • bcdedit /set hypervisorlaunchtype off关掉wsl需要的hyper-v设定;
  • 重启电脑即可

Microsoft Store无法正常打开

A:查到的方法有好多,可以都试一下,我其实第一种就搞定了。

方法1:修改DNS为4.2.2.14.2.2.2,再重进;

方法2:设置-应用-应用和功能中找到Microsoft Store,打开其高级选项以后选择重置;

方法3:Powershell(管理员)中执行:netsh winsock reset

方法4:设置-网络和Internet-代理,将“使用代理服务器关闭”(若本来就是关闭的,则先打开再关闭)。上面的关于代理服务器的也关掉;

方法5:IE 浏览器-设置- Internet 选项-高级,勾选 “使用SSL 3.0”、”使用 TLS 1.0“、”使用 TLS 1.1“、”使用 TLS 1.2“,应用后重启电脑;

方法6:Windows键+R–输入“WSReset.exe”并点击 “运行”;

方法7:换网。

【有个重构应用的方法看起来风险比较大就不贴了。】

迁移Linux子系统位置的方法

因为不是刚性需求,就直接贴方法吧。

方法1:将WSL 2移动到其他磁盘的方法

适用于已经启动了Linux子系统过的用户;

方法2:Win10自定义路径位置安装WSL2 (Ubuntu 20.04)

适用于还未启动Linux子系统的用户。

适合使用GPU计算的情况

根据官网说法:http://gaussian.com/running/?tabid=5

GPU 在处理 DFT 能量、梯度和频率(基态和激发态)时对较大的分子有效,但对小体系分子无效。

调用系统GPU的方法

(参考其他文章)

WSL2中安装Gaussian16可以直接识别并调用GPU。

  • 先在Linux命令行输入top后再按1,可以看到Cpu0-Cpu15(示例见下图),共8个线程。这里的0-15是CPU编号;

  • 执行命令行nvidia-smi,可以显示出有几块显卡,这里的0是接下来将会用到的GPU编号:

  • gjf文件注意事项(示例非本机):
1
2
3
4
%mem=12GB
%cpu=0-7
%gpucpu=0,1=0,4
......

原来的%nprocshared拆分为2行,其中第一行为CPU编号,如%cpu=0-7。

第二行%gpucpu=0,1=0,4,顾名思义,第一个等号后写要用的GPU编号,第二个等号后写control cpu的编号,表示让Cpu0控制GPU0,Cpu4控制GPU1,高斯要求每个GPU必须分配其一个control cpu。但是,control cpu只用于控制,不用于做计算,也就是说0-7之中只有6个线程在做计算。

另外,需要大内存时,换算规则是这样的:一块12GB显存的GPU,CPU内存需要约8 GB,如果用6个线程跑,需要指定%mem=48GB。

但是我的笔记本只有一块显卡,所以就%cpu=0-7``%gpucpu=0=0咯。另外目前计算的体系太小,也不适合跑gpu工作啦。

CPU和内存的分配原则

参考科音讲义摘抄:

内存分配量≤物理内存闲余量,否则系统可能调用虚拟内存严重拖慢计算,或者中途报错。
单任务时:内存≤32GB:预留2GB系统内存;内存>32GB:5%给系统内存。
CPU分配核心数通常建议等于物理核心数,除非核数很多而内存很小,或有其它任务。

什么时候用Windows版,什么时候用WSL2的Linux版

Gaussian 16在虚拟机和WSL中的相对效率

对于小体量任务,Windows版与Linux差异不大;对于大型计算任务,则都应用Linux 64bit版跑,Windows 64bit版速度非常慢。
根据测试,WSL环境下运行Linux 64bit版,相对于实体Linux性能损失10%左右;
如果核数不超过16,也可以在VMware虚拟的Linux环境下运行Linux 64 bit版,性能损失比WSL稍多一点。

WSL2/Linux版无法投入计算

我在尝试了好几种输入文件头后,分别出现无法分配内存,Logic error in SetGPM等查不到原因等错误,最后把内存和CPU相关设定的内容全删掉换成默认以后出现:

Error: illegal instruction, illegal opcode

这个就是可以查到的问题了。

该问题和G16版本有关(版本信息可以在输出文件看到),目前的版本G16 A03不行,需要换成G16 C01以上版本,所以网上流传的比较多的A03版就不行了,需要换成C01版

至于两个版本在计算性能上有没有差异,应该是没有的。

服务器/笔记本高斯计算效率测试

本测试不涉及各位主机站喜欢玩的服务器压力测试性能测试一类的,仅从跑高斯任务角度测试一下。建站啊整活啊的朋友不要过来找我麻烦,呜呜呜。

测试条件:服务器均使用支持AVX2指令集的Gaussian 16版本(A03)进行测试,创建地点为东南亚/东日本/澳大利亚;笔记本为支持AVX2指令集的Gaussian 16版本(C01)

测试系统:Ubuntu Server 20.04 LTS-Gen2

测试内容:柔性扫描/scan【test-scan】示例和OPT【test-opt】示例

测试对象和结果:

文档版:

【腾讯文档】Gaussian 16 跑任务执行情况

图片版:(MD格式的表格排序会有点怪)

结论:B1s没法白嫖,计算优化服务器确实比较好用,最后,还是自己电脑算比较方便

其他继续白嫖思路(服务器)

Azure第一个月是200美金的白嫖额度,这个期间可以使用可控范围内最高水平的服务器。而第一个月结束以后,后续如何继续白嫖,则有两个思路,下面分别介绍一下。

升级为“即付即用方案”

优势:此方案无需更换帐号且可以通过微软的转移工具将数据直接转移到新的虚拟机中。

问题:服务器配置明显下滑;使用时间为12个月,且需要1年后主动注销。

判断即付即用状态

其实只需要看下面这个位置是不是有“升级到即付即用订阅”就可以粗浅的判断是否激活。

如何升级即付即用

点击此处的“升级到即付即用订阅”后:

建议先不要点,等第一个月的额度白嫖结束以后再升级。

即付即用/学生无额度下可以免费享受的内容

标准 B1s (1 vcpu、1GiB 内存)虚拟机等。

不升级方案,换号

这一方案挺多乱七八糟的风险:

  • 有可能被微软风控导致后续无法正常白嫖。
  • 有可能有数据丢失风险(数据来不及备份就被风控无法开机)。

所以可以参考:https://www.bilibili.com/read/cv6838105/ 中的介绍:

IP 推荐 Proxy SwitchyOmega 进行多代理切换,尽量使用干净的 IP,如有能力最好为家宽 IP,广播 IP 最好不要使用(IP 库位置与服务器位置不符)
Cookie 多清理一下相关服务使用的cookie
UA 我曾经在 1IP 一号且清理干净小饼干后,遭遇连环登录杀,所以暂时将 UA 列入风控可能因素里,同时建议每号均切换一次 UA,可使用来自谷歌的 Chrome 插件 User-Agent Switcher for Chrome
地理位置 若设备开启了 GPS,WiFi,蓝牙等定位功能,请拒绝浏览器的位置请求,若不拒绝,尽量保证 IP 与定位信息符合。
玄学
开户时间 通常情况下建议100刀教育账号将账号放置两天不开虚拟机再使用,稳 3 天左右风险将大大降低;而即付、200 刀账号,建议开一个 B1s 等小套餐稳一段时间,占着坑不拉屎也可能导致订阅封禁。
操作习惯 很多时候异常的操作习惯也会为自己的账号带来麻烦,比如频繁重建 VM。

建议两类账号白嫖时都采用以上策略进行注册。暂时不清楚解绑信用卡和手机号的azure账号能不能换绑后不被风控。

学生账户订阅、其他野路子

在折腾的时候发现国内教育邮箱可以使用无需信用卡的Azure for sutdent。

https://azure.microsoft.com/zh-cn/free/students/

这个版本的额度是100美元(有效期为12个月),但可以续期(好像最长4年):

另外对于教育邮箱且有信用卡的情况,两种订阅都是可以同时注册的,只不过注册地址略有区别。注意在订阅部分切换订阅内容创建对应的服务器。

学生账户的额度使用完后,和前面的即付即用情况基本一样,也需要考虑就这么丢了还是换号的问题,这里不再赘述。

当然,如果有数个教育邮箱,那么通过数据迁移和备份,理论上就可以长期享受配置一般的服务器来进行计算了。

其他还有些乱七八糟的订阅形式,以及诸如谷歌云、甲骨文云等类型我就不说了,要不然要花钱要不然要特殊资格,不折腾了。

以后可能会补充G16W,以及测试300元左右的国内轻量应用服务器。