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

目录

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

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

PI 软件资源分层图,图片来自 PI-曙光培训 PPT

软件使用

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

如何才能运行Python程序

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

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

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

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

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

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

export PYTHONPATH=${LD_LIBRARY_PATH}:/g11/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:/g11/wangdp/modules/wangdp/lang/go/1.12

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

set             GOROOT                  /g11/wangdp/lang/go/go
set             GOPATH                  /g11/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

参考

NWPC高性能计算机环境介绍 系列文章

汇总

高性能计算机概况

系统登录

文件系统

应用软件

作业管理

数据管理