Skip to main content
Have a request for an upcoming news/science story? Submit a Request

Transition to hierarchical modules on Halstead

  • Announcements
  • Halstead

Halstead's module stack is configured in a hierarchical fashion, a change from the "flat" module configuration on previous clusters. This change may require some minimal changes to your job scripts. This change will help prevent errors and configuration problems due to version mismatches or conflicting software.

WHAT ARE HIERARCHICAL MODULES?

Many modules have dependencies on other modules. For example, a particular openmpi module requires a specific version of the Intel compiler to be loaded. Often, these dependencies are not clear for users of the module, and there are many modules which may conflict. Arranging modules in an hierarchical fashion makes this dependency clear. This arrangement also helps make the software stack easy to understand - your view of the modules will not be cluttered with a bunch of conflicting packages.

Your default module view on Halstead will include a set of compilers and the software that has no dependencies (such as Matlab and Fluent). To make software available that depends on a compiler, you must first load the compiler, and then software which depends on it becomes available to you. In this way, all software you see when doing "module avail" is completely compatible which each other.

HOW DO I LOAD AN HIERARCHICAL MODULE?

If you previously loaded the "openmpi/1.8.1_intel-16.0.1.150" you will need to separate this into two modules.

$ module load intel/16.0.1.150 openmpi/1.8.1

If you decide you actually want the intel/13.1.1.163 module instead, all you need to do is:

$ module load intel/13.1.1.163 

Due to MODULEPATH changes the following have been reloaded:
  1) openmpi/1.8.1

The following have been reloaded with a version change:
  1) intel/16.0.1.150 = intel/13.1.1.163

And the module system will swap out the openmpi module with the intel/13.1.1.163 version for you. You don't need to go find the long "flat" name.

HOW DO I FIND SOFTWARE IN THE HIERARCHY?

You can issue a "spider" command to find information about software that is not immediately available:

$ module spider openmpi

----------------------------------------------------------------------------
  openmpi:
----------------------------------------------------------------------------
     Versions:
        openmpi/1.8.1
        openmpi/1.10.1

This tells you there are two versions of openmpi available. You can issue an additional spider command to find out how to load one of these versions:

$ module spider openmpi/1.8.1

----------------------------------------------------------------------------
  openmpi: openmpi/1.8.1
----------------------------------------------------------------------------

     Other possible modules matches:
        OpenMPI

    You will need to load one of the set of module(s) below before the "openmpi/1.8.1" module is available to load.

      gcc/4.7.2
      gcc/5.2.0
      intel/13.1.1.163
      intel/14.0.2.144
      intel/15.0.3.187
      intel/16.0.1.150

Here you can see there are multiple versions of openmpi/1.8.1 available for several compilers. This tells you must load one of these compilers first, then you can load openmpi/1.8.1. With this information, you may decide that you want openmpi/1.8.1 with the gcc/5.2.0 compiler. Issue a load command:

module load gcc/5.2.0 openmpi/1.8.1

or

module load gcc/5.2.0
module load openmpi/1.8.1

WHAT DO I NEED TO DO TO MY JOB SCRIPTS?

You will want to review your jobs scripts and make adjustments as necessary. Most translations to hierarchy are straightforward. In fact, the module system will attempt to make the translation for you. An automatic translation may not always be possible and may require some human input to be done. This functionality is a custom modification to our module software and may be removed in the future, so it is recommended to update your scripts as necessary.

Some sample translations are below:

module load openmpi/1.8.1_intel-16.0.1.150 == module load intel/16.0.1.150 openmpi/1.8.1
module load impi == module load intel impi
module load fftw/3.3.4_intel-13.1.1.163_openmpi-1.8. == module load intel/13.1.1.163  openmpi/1.8.1 fftw/3.3.4

If you have any questions or would like assistance in making this translation, please do not hesitate to contact rcac-help@purdue.edu and we'll be happy to assist.

Originally posted: