HPC/Module naming scheme 2016: Difference between revisions

From CNM Wiki
< HPC
Jump to navigation Jump to search
mNo edit summary
Line 1: Line 1:
== Configuration files used ==
{| class="wikitable" style="text-align:center;  margin: 1em auto 1em auto;"
{| class="wikitable" style="text-align:center;  margin: 1em auto 1em auto;"
|- style="background:#eee;"
|- style="background:#eee;"
Line 31: Line 33:
# Place all your module selections for CentOS-6 in <code>~/.modules-carbon-2</code>. Copy and edit from the .*-1 file.
# Place all your module selections for CentOS-6 in <code>~/.modules-carbon-2</code>. Copy and edit from the .*-1 file.


== Hints ==
== New and changed features ==
=== Module Dependencies ===
=== Module dependencies ===
New-style modules are less implicit (less automatic) in loading modules that they depend on. This means prior to loading a more advanced module you must load all its prerequisites, chosen from the same MPI and (usually) compiler flavor as the advanced module. A missing prerequisite will give errors of the form
New-style modules are less implicit (less automatic) in loading modules that they depend on. This means prior to loading a more advanced module you must load all its prerequisites, chosen from the same MPI and (usually) compiler flavor as the advanced module. A missing prerequisite will give errors of the form
  … ERROR:151: '''Module''' 'troubled_name' '''depends on one of the module(s)''' 'other_name1 other_name2' …
  … ERROR:151: '''Module''' 'troubled_name' '''depends on one of the module(s)''' 'other_name1 other_name2' …
To resolve this error, edit your <code>~/.bashrc</code> or <code>.modules-carbon-2</code> file and add <code>module load …</code> commands for the needed module(s) ''other_names'' before loading "troubled_name".
To resolve this error, edit your <code>~/.bashrc</code> or <code>.modules-carbon-2</code> file and add <code>module load …</code> commands for the needed module(s) ''other_names'' before loading "troubled_name".


=== System defaults ===
=== Name completion ===
When working interactively in a terminal, you can use a "completion" feature of the Bash shell to complete a partially typed module name and show all names available for the name typed so far. For example:
 
At a shell prompt (shown as "$"), type:
$ '''module load fft'''
Press the <code><TAB></code> key and the name will be expanded to <code>fftw3/</code> and you'll see two possible completing names, with the cursor waiting at the end of the longest common substring:
$ '''module load fftw3/'''_
fftw3/INTEL/3.3.2-1              fftw3/OPENMPI-1.4/INTEL/3.3.2-4 
Type the letter <code>O</code>, hit  the <code><TAB></code> key again, and the now single complete name will be completed, with the cursor waiting after an additional space character:
$ '''module load fftw3/O'''<TAB>
$ '''module module load fftw3/OPENMPI-1.4/INTEL/3.3.2-4''' _
 
=== Ignoring system defaults ===
By default, on Carbon the Intel compilers and the OpenMPI flavor of MPI continue to be pre-loaded for you. In other words, without any module customization, you'd see from the <code>module list</code> command:
By default, on Carbon the Intel compilers and the OpenMPI flavor of MPI continue to be pre-loaded for you. In other words, without any module customization, you'd see from the <code>module list</code> command:
<source lang="bash">
<source lang="bash">
Line 49: Line 63:
</source>
</source>
and afterwards use <code>module load …</code> to only load your preferred compiler and MPI flavors, and applications depending on them.
and afterwards use <code>module load …</code> to only load your preferred compiler and MPI flavors, and applications depending on them.
=== Name Completion ===
When working interactively in a terminal, you can use a "completion" feature of the Bash shell to complete a partially typed module name and show all names available for the name typed so far. For example:
At a shell prompt (shown as "$"), type:
$ '''module load fft'''
Press the <code><TAB></code> key and the name will be expanded to <code>fftw3/</code> and you'll see two possible completing names, with the cursor waiting at the end of the longest common substring:
$ '''module load fftw3/'''_
fftw3/INTEL/3.3.2-1              fftw3/OPENMPI-1.4/INTEL/3.3.2-4 
Type the letter <code>O</code>, hit  the <code><TAB></code> key again, and the now single complete name will be completed, with the cursor waiting after an additional space character:
$ '''module load fftw3/O'''<TAB>
$ '''module module load fftw3/OPENMPI-1.4/INTEL/3.3.2-4''' _

Revision as of 20:12, August 10, 2015

Configuration files used

You have files Remark CentOS-5 uses CentOS-6 uses
names files names files
current situation old .bashrc only new .bashrc only
.modules-carbon-1 avoid old .modules-carbon-1 and .bashrc .bashrc only (.*-1 file is ignored)
.modules-carbon-2 switch over, recommended new .modules-carbon-2 and .bashrc .modules-carbon-2 and .bashrc
.modules-carbon-1 .modules-carbon-2 for advanced cases old .modules-carbon-1 and .bashrc .modules-carbon-2 and .bashrc

Configuration steps

CentOS-independent module selection (recommended)

To switch over to new hierarchical module names on both CentOS releases it's easiest to continue making all your module choices in ~/.bashrc, but you have to signal on the older platform to use the new module style:

  1. Create a customization file for new names, but leave it empty (you'll configure your choices in the next step). Use the command:
    touch ~/.modules-carbon-2
    
  2. Edit your .bashrc file and update your module selections as follows:
    • Remove version numbers from module names of the old-style name/version, leaving only name. This is the recommended approach, as you will automatically benefit from future upgrades.
    • To insist on a specific version using new-style names, append /mpiname/compilername/version as needed. To see available flavors and versions, separately run the command module avail name.

CentOS-dependent module selection

If you encounter difficulties with making your module selection work in both CentOS-5 and CentOS-6, use separate configurations:

  1. Move all your previous module commands from .bashrc to ~/.modules-carbon-1, where they will apply only on CentOS-5.
  2. Place all your module selections for CentOS-6 in ~/.modules-carbon-2. Copy and edit from the .*-1 file.

New and changed features

Module dependencies

New-style modules are less implicit (less automatic) in loading modules that they depend on. This means prior to loading a more advanced module you must load all its prerequisites, chosen from the same MPI and (usually) compiler flavor as the advanced module. A missing prerequisite will give errors of the form

… ERROR:151: Module 'troubled_name' depends on one of the module(s) 'other_name1 other_name2' …

To resolve this error, edit your ~/.bashrc or .modules-carbon-2 file and add module load … commands for the needed module(s) other_names before loading "troubled_name".

Name completion

When working interactively in a terminal, you can use a "completion" feature of the Bash shell to complete a partially typed module name and show all names available for the name typed so far. For example:

At a shell prompt (shown as "$"), type:

$ module load fft

Press the <TAB> key and the name will be expanded to fftw3/ and you'll see two possible completing names, with the cursor waiting at the end of the longest common substring:

$ module load fftw3/_
fftw3/INTEL/3.3.2-1              fftw3/OPENMPI-1.4/INTEL/3.3.2-4  

Type the letter O, hit the <TAB> key again, and the now single complete name will be completed, with the cursor waiting after an additional space character:

$ module load fftw3/O<TAB>
$ module module load fftw3/OPENMPI-1.4/INTEL/3.3.2-4 _

Ignoring system defaults

By default, on Carbon the Intel compilers and the OpenMPI flavor of MPI continue to be pre-loaded for you. In other words, without any module customization, you'd see from the module list command:

module list
Currently Loaded Modulefiles:
  1) intel/15/15.0.2                     2) openmpi/1.4/INTEL/1.4.5-intel12-2

You can now safely use the command

module purge

and afterwards use module load … to only load your preferred compiler and MPI flavors, and applications depending on them.