NWPC高性能计算机环境介绍:应用软件

目录

本文是《NWPC高性能计算机环境介绍》系列文章的一部分。

CMA PI-HPC的软件资源如下所示。最底层是redhat操作系统,上一层是分布式文件管理系统和作业调度系统,再上一层是编译器和调试器,最顶层是应用软件和函数库。

PI软件资源分层图

软件使用

使用软件需要进行设置,下面首先展示如何手动设置软件环境。

如何才能运行Python程序

要使用用户编译的python 3.7环境运行python程序,需要配置一系列的环境变量:

定位可执行程序python:设置环境变量PATH

export PATH=${PATH}:/g3/wangdp/lang/python/python3/bin

定位动态链接库:设置环境变量LD_LIBRARY_PATH

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/g3/wangdp/lang/python/python3/lib

定位Python包:设置环境变量PYTHONPATH

export PYTHONPATH=${LD_LIBRARY_PATH}:/g3/wangdp/lang/python/python3/lib/python3.7

软件管理方式

在上一代高性能计算机IBM AIX上,我们手动执行上面一节列出的代码设置环境变量。 为了方便使用,会将环境配置代码写入~/.bashrc~/.profile中,在系统登录时自动执行。

以使用GrADS 2.0.2软件包为例,IBM AIX上需要在配置文件中加入下面的代码:

export GRADS20=/cma/u/app/grads-2.0.2
export GADDIR=${GRADS20}/data
export GASCRP=${GRADS20}/lib

export PATH=${PATH}:${GRAPES20}/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GASCRP}

在HPC PI上,我们使用module命令管理软件环境。 登录后,使用module动态加载,软件包由管理员配置。

上述的代码可以简化为一条命令:

module load mathlib/grads/2.0.2/gnu

虽然PI上依然可以手动设置环境变量(有些时候必须手动设置),但推荐使用module方式管理软件。

下面介绍module工具。

Environment Modules

Environment Modules通过modelfile动态修改用户的环境变量。 可以通过modelfile配置不同版本的软件,和不同编译器编译的软件。

module可以动态加载(load)或卸载(unload),用户不需要手动修改环境变量。

官方文档:http://modules.sourceforge.net/

ECMWF文档:https://confluence.ecmwf.int/display/UDOC/Modules

基本用法

列出已加载的模块

module list

运行结果如下图所示:

module list 运行结果

列出可用的模块

module available

module available 运行结果

上图可以看到管理员已经配置了不同的版本和不同编译器的netcdf库。

加载模块

module load

使用如下的命令加载python 3.6.3版本

module load apps/python/3.6.3/intel

该命令相当于对环境变量做如下修改:

MANPATH=/g1/app/apps/python/3.6.3/gnu/share/man:...
PATH=/g1/app/apps/python/3.6.3/gnu/bin:...
PYTHON3=/g1/app/apps/python/3.6.3/gnu
PYTHONPATH=/g1/app/apps/python/3.6.3/gnu/lib/python3.6:...

卸载模块

module unload

使用如下的命令卸载上一步加载的python 3.6.3

module unload apps/python/3.6.3/intel

该命令会恢复修改的环境变量。

MANPATH=...
PATH=...
PYTHONPATH=...

modulefile

下面是apps/python/3.6.3/gnu的modulefile。

#%Module1.0
# 上面一行是注释

# 说明
module-whatis   "Python Development Toolkit.."

# 与其它modulefile冲突,无法同时加载
conflict apps/python
conflict apps/anaconda2
conflict apps/anaconda3

# 加载其他module
module load mathlib/proj/4.9.3/gnu
module load mathlib/geos/3.6.2/gnu

# 变量赋值
set             PYTHON3                 /g1/app/apps/python/3.6.3/gnu

# 创建环境变量
setenv          PYTHON3                 /g1/app/apps/python/3.6.3/gnu

# 修改环境变量:在路径列表最前面增加路径
prepend-path    PATH                    ${PYTHON3}/bin
prepend-path    PYTHONPATH              ${PYTHON3}/lib/python3.6
prepend-path    MANPATH                 ${PYTHON3}/share/man

自定义module

除了管理员配置的modulefile外,用户也可以使用modules管理自己的软件环境。

编写modulefile

参考管理员配置的modulefile,编写自己的modulefile。 下面是用户编译的Golang:/g3/wangdp/modules/wangdp/lang/go/1.12

#%Module1.0
module-whatis   "Go Development Toolkit.."

set             GOROOT                  /g3/wangdp/lang/go/go
set             GOPATH                  /g3/wangdp/lang/go/gopath

setenv          GOROOT                  ${GOROOT}
setenv          GOPATH                  ${GOPATH}
setenv          GOPROXY                 https://goproxy.io/
prepend-path    PATH                    ${GOROOT}/bin:${GOPATH}/bin
prepend-path    LD_LIBRARY_PATH         ${GOROOT}/lib

使用自定义的modulefile

module命令根据环境变量MODULEPATH查找modulefile。 使用自定义的modulefile需要设置自己的MODULEPATH

export MODULEPATH=/g3/wangdp/modules:$MODULEPATH

设置之后,module命令可以识别自定义的modulefile。

设置MODULEPATH后,module命令可以识别用户自定义的modulefile