本帖最后由 丁越 于 2022-5-1 13:16 编辑
8375c装机记录
最近按照sob老师的《计算化学购机配置推荐》博文(http://sobereva.com/444)的推荐购置了一台8375c,现在我把我装机过程中的经验与大家分享一下。由于我并非专业的计算化学出身,可能有些地方免不了由于经验不足而产生错误的判断甚至误区,希望坛子的各位老师多多批评指正  。
一、硬盘以及备份策略
本机配置了三块硬盘,分别是一块256 GB 三星固态硬盘和两块4 TB 希捷机械,这么做考虑的原因是将256GB的三星固态作为系统盘,挂载在"/" 目录下,并且将各种软件安装在"/opt"下;一块4T机械挂载在"/home"目录下;剩下的一块4T机械作为备份盘。系统的分区如下所示:
挂载点 | 容量 | swap | 4GB,在256GB硬盘中 | boot/efi | 200M,在256GB硬盘中 | boot | 2GB,在256GB硬盘中 | / | 256GB硬盘剩下的所有容量 | /home | 其中一块4T硬盘 | /backup | 剩下的一块4T硬盘 |
系统安装的是最新的CentOS 9 stream,由于其已经内置了rsync备份软件,所以无需再去安装。另外,我们用rsync的增量备份方式去备份/home的内容,备份脚本如下所示:
- #!/bin/bash
- # A script to perform incremental backups using rsync
- set -o errexit
- set -o nounset
- set -o pipefail
- readonly SOURCE_DIR="/home"
- readonly BACKUP_DIR="/backup/my_backup"
- readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')"
- readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"
- readonly LATEST_LINK="${BACKUP_DIR}/latest"
- mkdir -p "${BACKUP_DIR}"
- rsync -av --delete \
- "${SOURCE_DIR}/" \
- --link-dest "${LATEST_LINK}" \
- --exclude=".cache" \
- "${BACKUP_PATH}"
- rm -rf "${LATEST_LINK}"
- ln -s "${BACKUP_PATH}" "${LATEST_LINK}"
复制代码 备份脚本使用很简单,以root账号登陆服务器,将该备份脚本命名为backup.sh并放在在其家目录下,chmod +x backup.sh 赋予其可执行权限。然后在/backup下建立一个my_backup的目录(这么做主要是我还想在这个backup盘里放点其他的东西,所以给备份文件另外建了my_backup目录)。最后输入crontab -e 设定定时任务让其每个月一号的凌晨三点执行该备份脚本一次,crontab任务设置为如下所示,如果不会设置的话自行看看这个文档( https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/):
- 0 3 1 * * /root/backup.sh
复制代码
二、Lmod模块化管理软件
2.1 Lmod安装 lmod是基于lua的module化管理软件的应用,所以要想安装lmod必须先安装好lua。由于CentOS 9 stream 已经内置了lua,但是在安装lmod过程中会遇到lua包不全的问题,这个很简单,按照报错提示dnf install 安装相应缺少的包就行。首先去( https://sourceforge.net/projects/lmod/files/)下载lmod-8.6.tar.bz2,放到/opt下,tar -xjf lmod-8.6.tar.bz2解压之。接下来,检查下面这些包在你的机子上是否安装了,没有则dnf装之:
- $ rpm -qa | grep lua
- lua-posix-5.1.7-1.el6.x86_64
- lua-5.1.4-4.1.el6.x86_64
- lua-filesystem-1.4.2-1.el6.x86_64
- lua-devel-5.1.4-4.1.el6.x86_64
复制代码然后cd 进入解压目录,以最简单的方式编译:
- ./configure --prefix=/opt/lmod
- 没有configure 成功按照上面提示安装缺少包
- make install
复制代码下面将lmod的初始化脚本软连接到/etc/profile.d和/etc/fonts/conf.d中:
- ln -s /opt/lmod/lmod/lmod/init/profile /etc/profile.d/z00_lmod.sh
- ln -s /opt/lmod/lmod/lmod/init/cshrc /etc/profile.d/z00_lmod.csh
- ln -s /opt/lmod/lmod/lmod/init/profile.fish /etc/fonts/conf.d/z00_lmod.fish
复制代码
下面就要去/opt/lmod/lmod/lmod/modulefiles/Core/下去设置modulefile了。我们由简单到复杂一点,分别给出几个案例供大家参考:
2.2 lmod module管理vmd-1.9.3
vmd执行我们仅需要定义其PATH即可,不需要其他函数库路径,因此在/opt/lmod/lmod/lmod/modulefiles/Core/下首先mkdir vmd 建立vmd的目录,然后进入该目录并且建立一个名为1.9.3.lua的文件:- -- -*- lua -*-
- whatis("Version=1.9.3")
- prepend_path("PATH","/opt/vmd/bin")
复制代码 这里面第一行是必须要有的,声明了该modulefile所用的为lua语言,whatis中指定了vmd的版本,这个还可以有多行whatis,自己想写什么就加进去。之所以这么设置modulefile是因为假如我们有多个版本的vmd要使用,所以可以将多个版本vmd以其版本号为modulefile名一起放到vmd目录下方便module管理。PS:当然vmd咋们不需要多个版本的,这里只是举个例子而已,真正能用到多个版本的可能有如:g09、g16、不同版本的编译器等等。
2.3 lmod module管理oneAPI
怎么安装oneAPI可以参考(http://bbs.keinsci.com/thread-25162-1-1.html),我们以root身份将oneAPI安装在/opt/oneapi中,有两种方式来产生modulefile,一种是利用oneapi目录下的modulefiles-setup.sh来产生oneAPI中所有工具包的modulefile,用法如下面所示,但是存在的问题是我们用不到这么多包,module avail 查看可以module的程序你就会发现密密麻麻的一堆跟openapi有关的,所以很不方便。- ./modulefiles-setup.sh --output-dir=/opt/lmod/lmod/lmod/modulefiles/Core/oneAPI/ --ignore-latest
复制代码 第二种方式是通过env2产生modulefile (虽然lmod安装目录也有与这个类似的工具,libexec/sh_to_modulefile,但是产生的CP2K的modulefile文件时有问题,就再没用)。一般oneAPI中,我们最频繁使用的就是其ifort、icc、mkl、mpi了,所示我们仅需要在/opt/lmod/lmod/lmod/modulefiles/Core/oneAPI下分别建立这几个工具的modulefile就可以了。
下面就以mkl为例说一下用法:
将env2脚本放到/root下,然后赋予其可执行权限。假设mkl的var.sh在oneapi的/opt/oneapi/mkl/2022.0.2/env下,执行:
- ./env2 -from sh -to modulecmd "/opt/oneapi/mkl/2022.0.2/env/var.sh" > 2022
复制代码 接着我们将2022移动到/opt/lmod/lmod/lmod/modulefiles/Core/oneAPI/mkl下,并且修改为如下的行首样式:
- #%Module1.0###################################################################
- prepend-path CPATH {/opt/oneapi/mkl/2022.0.2/include};
- setenv NLSPATH {/opt/oneapi/mkl/2022.0.2/lib/intel64/locale/%l_%t/%N};
- prepend-path PATH {/opt/oneapi/mkl/2022.0.2/bin/intel64};
- prepend-path LD_LIBRARY_PATH {/opt/oneapi/mkl/2022.0.2/lib/intel64};
- setenv MKLROOT {/opt/oneapi/mkl/2022.0.2};
- prepend-path PKG_CONFIG_PATH {/opt/oneapi/mkl/2022.0.2/lib/pkgconfig};
- prepend-path LIBRARY_PATH {/opt/oneapi/mkl/2022.0.2/lib/intel64};
复制代码
2.4 lmod module管理QE
不要嫌我啰嗦,我再赘述一边流程 。在/opt/lmod/lmod/lmod/modulefiles/Core/下建立QE目录,然后在QE目录下建立名为7.0的文件(我用intel编译器编译的QE-7.0),文件内容如下所示:- -- -*- lua -*-
- whatis("Version=7.0 with intelmpi parallel")
- conflict("openMPI/4.1.1")
- load("oneAPI/mkl/2022","oneAPI/mpi/2022")
- prepend_path("PATH", "/opt/qe7.0/bin")
- prepend_path( "LD_LIBRARY_PATH", "/opt/oneapi/compiler/2022.0.2/linux/compiler/lib/intel64_lin")
复制代码
conflict中内容说的就是当我们module load QE 时已经module的模块中不能有openmpi存在,否则就不能正常load QE。因为刚才说了我是用intel编译器编译的QE,所以不能和openmpi同时存在。使用QE前需要提前load mkl和intelmpi,就是load("oneAPI/mkl/2022"," oneAPI/mpi/2022")这一行的作用,并且当我们module unload QE时mkl和mpi也会被同时unload。
2.5 lmod module管理Gaussian
再次强调一下本文中我们一直是以root身份登录账号并进行各种文件的配置。首先将g09.tar.gz包放到/opt中,解压之。更改所属者和组以及权限,chown -R root:gauss g09 ; chmod 750 -R g09/*。接着我们在/home目录下建立scratch目录,更改所属组和权限chown -R root:gauss scratch ; chmod 770 scratch(公用gaussian我是只能想到这个办法搞了,建立高斯的公用组gauss,然后将用户添加进这个组,不知道大家都是怎么弄的,欢迎交流呀!)。然后copy一份g09/bsd/g09.profile的文件到root的家目录下,将该文件的gr=$HOME修改为gr=/opt,然后通过env2产生g09的modulefile:- ./env2 -from sh -to modulecmd "./g09.profile" > g09
复制代码 将这个文件移动到/opt/lmod/lmod/lmod/modulefiles/Core/下的Gaussian目录中,然后修改g09前三行为如下所示:
- #%Module1.0###################################################################
- setenv g09root /opt
- setenv GAUSS_SCRDIR /home/scratch
- setenv PGI_TERM {trace,abort};
- setenv GAUSS_EXEDIR {/opt/g09/bsd:/opt/g09/local:/opt/g09/extras:/opt/g09};
- setenv G09BASIS {/opt/g09/basis};
- setenv GAUSS_BSDDIR {/opt/g09/bsd};
- setenv GV_DIR {/opt/gv};
- setenv GAUSS_ARCHDIR {/opt/g09/arch};
- append-path PATH {/opt/g09/bsd};
- append-path PATH {/opt/g09/local};
- append-path PATH {/opt/g09/extras};
- append-path PATH {/opt/g09};
- setenv _DSM_BARRIER {SHM};
- prepend-path LD_LIBRARY_PATH {/opt/g09};
- prepend-path LD_LIBRARY_PATH {/opt/g09/extras};
- prepend-path LD_LIBRARY_PATH {/opt/g09/local};
- prepend-path LD_LIBRARY_PATH {/opt/g09/bsd};
- append-path LD_LIBRARY_PATH {/opt/gv/lib};
- setenv GAUSS_LEXEDIR {/opt/g09/linda-exe};
复制代码 如有什么问题欢迎大家一起交流
|