使用Environment Modules管理软件包

本文介绍如何使用Environment Modules编译成软件中模块对应的环境配置,使其可以在E-HPC环境中直接加载使用。

背景信息

在使用E-HPC集群过程中,经常要安装不同的编译器和库文件,如常用的编译器有GCC和ifort,常用的 MPI并行库有OpenMPI、MPICH2等。在使用某个软件时,通常采用不同的编译设置得到不同版本的可执行程序和链接库,或者需要修改、切换不同版本的环境变量。由于程序在编译时会调用不同类型编译器或第三方库,程序之间还存在着依赖关系。导致当执行某个特定版本的程序时,修改环境变量变得十分复杂。

Environment Modules是一个简化Shell初始化的软件包,您可以在使用modulefiles模块与E-HPC进行会话期间修改模块对应的运行环境。每个模块文件都包含应用程序配置所需的信息。集群用户可共享系统上的模块文件,并且用户可以拥有自己的集合来补充或替换共享模块文件。

Environment Modules相关命令

E-HPC集群中已默认安装Environment Modules软件来管理不同运行环境。

当使用module命令时,可用的模块在modulepath=/opt/ehpcmodulefiles目录下,modulefile文件通常被命名为某个软件版本号,如openmpi/3.0.0。

常用的module命令如下:

  • module avail:显示可以使用的模块

  • module load:加载模块

  • module unload:卸载模块

  • module list:显示已经加载的模块

操作步骤

以下通过Environment Modules软件卸载openmpi/3.0.0,然后加载openmpi/3.0.1版本示例来介绍如何设置modulefile:

  1. 登录弹性高性能计算控制台

  2. 在顶部菜单栏左上角处,选择地域。

  3. 在左侧导航栏,单击集群

  4. 集群页面,找到要登录的集群,单击远程连接

  5. 远程连接页面,输入root用户、登录密码和端口,单击ssh连接

  6. 执行cd /opt/ehpcmodulefiles命令,切换到ehpcmodulefiles目录下。

  7. 执行module list命令,显示已经加载的模块。

    如图所示,表示已加载openmpi/3.0.0模块。module list

  8. 执行module unload openmpi/3.0.0命令,卸载openmpi/3.0.0模块。

  9. 执行module load openmpi/3.0.1命令,加载openmpi/3.0.1模块。

    您可以根据业务需求修改openmpi/3.0.1中的配置信息。具体配置项说明如下:

    • PATH:可执行文件路径。

    • LIBRARY_PATH:程序编译期间,查找动态链接库时指定查找共享库的路径。

    • LD_LIBRARY_PATH:程序加载运行期间,查找动态链接库时指定除了系统默认路径之外的其他路径。

    • installpath:软件安装目录。

      #%Module1.0#####################################################################
      ##
      ## modulefiles/openmpi-3.0.1  Generated by EHS 1.0.0
      ##
      proc ModulesHelp { } {
        puts stderr "\tmodules - loads the modules software & application environment"
        puts stderr "\n\tThis loads environment of openmpi-3.0.1"
      }
      
      module-whatis   "loads the openmpi-3.0.1 environment"
      prepend-path PATH  ${installpath}/bin  
      prepend-path LD_LIBRARY_PATH  ${installpath}/lib
      prepend-path LIBRARY_PATH  ${installpath}/lib