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高性能计算机环境介绍 系列文章