Skip to content

Introduce runners to generalize setup of software for tasks

Karol Krizka requested to merge kk_runners into master

Runners

Runners generalize the execution of a task. They can perform general setup procedures for tasks that are not necessarily the same between different environments. An example is running each task in a shifter environment.

A runner inherits from the Runner class. It implements two functions: run and terminate. The run function executes the task (passed as an argument). The terminate function stops the currently running task.

The chosen runner can be specified at command line using the -r option. The default is default, which corresponds to a BasicRunner.

Available Runners

BasicRunner

The BasicRunner is the same as the current behaviour. It uses subprocess.Popen to execute the task as a process in the same environment as PyTaskFarmer.

ShifterRunner

The ShifterRunner executes each task inside shifter. This can be preferable over starting PyTaskFarmer inside shifter as it does not require a recent version of Python in the image.

The shifter itself is started using subprocess module with the following command.

shifter --image image -- /bin/bash -c "setup_code && task"

The setup_code is user-configurable set of commands to setup the environment (ie: source ALRB) in shifter.

Defining Runners

The BasicRunner is always available under the name default. Other runners, that require user-specific configuration, should be defined inside the ~/.pytaskfarmer/runners.d directory. All files ending in .ini are loaded and expected to be in the INI format with the following scheme.

[runnername]
Runner = runner.python.class
Arg0 = value0
Arg1 = value1

The runnername is the name of the runner and the Runner value is the name of the python class (along with package and module) containing the implementation. The remaining key:value pairs are passed to the runner.python.class constructor.

There can be multiple runners per file.

Examples

ShifterRunner for Muon Collider Framework

Runner definition:

[mcc]
Runner: taskfarmer.runners.ShifterRunner
image: docker:gitlab-registry.cern.ch/berkeleylab/muoncollider/muoncollider-docker/mucoll-ilc-framework:1.5.1-centos8
setup: source ${HOME}/.bashrc.muc && source ${HOME}/MuonCollider/LBLMuCWorkspace/setup.sh ${CFS}/atlas/kkrizka/MCC/build/

Tasklist contents:

Marlin /global/cfs/cdirs/atlas/kkrizka/MCC/build/packages/ACTSTracking/example/actsseed_steer.xml --global.LCIOInputFiles=muonGun_sim_MuColl_v1_slice0.000.slcio --MyLCParquet.OutputDir=file:///global/cfs/cdirs/atlas/kkrizka/MCC/tracking/muonGun_sim_MuColl_v1_BIB/data_actsseed_bib --MyLCParquet.SampleName=muonGun_sim_MuColl_v1_slice0.000
Marlin /global/cfs/cdirs/atlas/kkrizka/MCC/build/packages/ACTSTracking/example/actsseed_steer.xml --global.LCIOInputFiles=muonGun_sim_MuColl_v1_slice0.001.slcio --MyLCParquet.OutputDir=file:///global/cfs/cdirs/atlas/kkrizka/MCC/tracking/muonGun_sim_MuColl_v1_BIB/data_actsseed_bib --MyLCParquet.SampleName=muonGun_sim_MuColl_v1_slice0.001

Execution:

pytaskfarmer.py tasklist -r mcc

MuonColliderRunner

This runner does not exist (yet), but it demonstrates the flexibility of the runner abstraction.

[mysteeringfile]
Runner: mcc.MuonColliderRunner
steering: /global/cfs/cdirs/atlas/kkrizka/MCC/build/packages/ACTSTracking/example/actsseed_steer.xml

Tasklist (aka filelist) contents:

muonGun_sim_MuColl_v1_slice0.000.slcio
muonGun_sim_MuColl_v1_slice0.001.slcio

Execution:

pytaskfarmer.py filelist -r mysteeringfile

Repository Organization

Added a taskfarmer package that contains all the reusable modules. Currently there is tasks containing the Tasklist class and runners with all modules. This is to help with code organization.

The downside is that now the package has to be installed into PYTHONPATH (ie: using pip install --user) before using.

Edited by Karol Krizka

Merge request reports