Skip to content

How to act on the $MODULEPATH when the checkloader runs #3557

@MarcoMagl

Description

@MarcoMagl

Hello,

In our center we are using ReFrame for multiple purposes. One of them is to ensure that the different modules we have from different software stacks we deployed year after year deliver consistent performance.

In order to make our ReFrame setup more consistent, we want to use a specific version of ReFrame (this is important for what I am trying to achieve) to test the different software stacks we have. Put differently, whatever the stack I want to test is, I want to use the same ReFrame executable. On top of this, I want to be able to test the different versions of the modules that we have deployed.

With a conceptual example:

Suppose I am launching ReFrame in an environement where $MODULEPATH is release/releaseA in which no PyTorch is available.
Imagine I have another software stack that I can access by setting $MODULEPATH tp release/releaseB where we have deployed three different versions of PyTorch: PyTorchB1, PyTorchB2, PyTorchB3

To test these 3 versions, we launch a test (located with $RFM_CHECK_SEARCHPATH) like this:

reframe --module-path=release/releaseB --run 

to test the different version of PyTorch, we use something like this in the test definition:

@rfm.simple_test
class Subscheduling(rfm.RunOnlyRegressionTest):
    module_info = parameter( lxp_find_modules("PyTorch/"))

what lxp_find_modules does is something like this:

def lxp_find_modules(sustr_in_module_name):
    import reframe.core.runtime as rt
    ms = rt.runtime().modules_system
    return ms.available_modules(substr_in_module_name)

it will perform (in our case) some module avail commands and we expect it to return ["PyTorchB1", "PyTorchB2", "PyTorchB3"].

In the present case however, lxp_find_modules("PyTorch/") will return nothing. This is, I think, because the list of test is constructed in cli.py in line 1213 for ReFrame 4.8.2:

    loader = RegressionCheckLoader(check_search_path,
                                   check_search_recursive,
                                   external_vars,
                                   options.skip_system_check,
                                   options.skip_prgenv_check)

which occurs before the different module options are taken into account which start in line 1511 still in cli.py. So the function ms.available_modules is not aware of the --module-path argument that we provided.

Is there a way to access the options.module_paths (cli.py, line 1546) from rt.runtime() or anything else?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions