Skip to content

Parsl Configuration

TaPS provides (as of writing) two different executor configuration types for using Parsl: parsl-local and parsl-htex.

parsl-local Config

The parsl-local executor is the easiest way to run a benchmark using Parsl as the executor. The parsl-local executor corresponds to the ParslLocalConfig which creates a HighThroughputExecutor configured on the local node.

For example, configuring Parsl on the local node with eight workers is easy.

python -m taps.run \
    --app cholesky --app.matrix_size 100 --app.block_size 25 \
    --engine.executor parsl-local --engine.executor.workers 8

parsl-htex Config

More advanced Parsl configurations will need to use the parsl-htex executor which corresponds to the ParslHTExConfig. The parsl-htex executor still creates a HighThroughputExecutor, but the full configuration options are exposed (e.g., addresses, providers, launchers, etc.).

Tip

Due to the complexity of configuring the parsl-htex, a TOML configuration file should be used. Not all Parsl configuration options will be available in the CLI parser arguments.

The following is a simple configuration that mostly defaults to the defaults set in Parsl's HighThroughputExecutor, except for max_workers_per_node and address which are specified.

parsl-config.toml
1
2
3
4
5
6
7
8
[engine.executor]
name = "parsl-htex"

[engine.executor.htex]
max_workers_per_node = 8

[engine.executor.htex.address]
kind = "address_by_hostname"
python -m taps.run \
    --app cholesky --app.matrix_size 100 --app.block_size 25 \
    --config parsl-config.toml

Extra options not explicitly defined in the various sub-configs of ParslHTExConfig can still be provided and will be passed as keyword arguments to the corresponding Parsl classes.

These configuration semantics are similar to the GlobusComputeEngine which wraps Parl's HighThroughputExecutor.

Examples

Polaris at ALCF

The following configuration is an example for the Polaris GPU cluster at ALCF. The configuration is based on the Globus Compute endpoint example.

parsl-config.toml
[engine.executor]
name = "parsl-htex"

[engine.executor.htex]
max_workers_per_node = 4

[engine.executor.htex.address]
kind = "address_by_interface"
ifname = "bond0"

[engine.executor.htex.provider]
kind = "PBSProProvider"
account = {{ ALCF_ALLOCATION }}
cpus_per_node = 32
init_blocks = 0
max_blocks = 2
min_blocks = 0
nodes_per_block = 1
queue = "debug-scaling"
scheduler_options = "#PBS -l filesystems=home:grand:eagle"
select_options = "ngpus=4"
walltime = "01:00:00"
worker_init = {{ COMMAND_STRING }}

[engine.executor.htex.provider.launcher]
kind = "MpiExecLauncher"
bind_cmd = "--cpu-bind"
overrides = "--depth=64 --ppn=1"