Repository navigation
docs: add user guide with a job-configuration reference #1026
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
matclim
wants to merge
3
commits into
Framework-R-D:main
Choose a base branch
from
matclim:docs/user-guide-configuration
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,219 @@ | ||
| Job configuration | ||
| ================= | ||
|
|
||
| A Phlex job is described by a single configuration document, which is | ||
| passed to the ``phlex`` executable: | ||
|
|
||
| .. code-block:: console | ||
|
|
||
| phlex -c workflow.jsonnet | ||
|
|
||
| The document is evaluated with Jsonnet, so plain JSON is also accepted. | ||
| This page describes the configuration keys that the framework itself | ||
| reads. | ||
| Each plugin defines its own additional parameters. | ||
|
|
||
| Command-line options | ||
| -------------------- | ||
|
|
||
| ``-c``, ``--config <file>`` | ||
| The configuration document (required). | ||
|
|
||
| ``-j``, ``--parallel <n>`` | ||
| Maximum number of threads Phlex may use. | ||
| Defaults to oneTBB's default concurrency, normally every hardware thread | ||
| the process may run on. | ||
| On a batch node that does not restrict the job's CPU affinity this is | ||
| the whole machine, so pass ``-j`` matching the cores the job was given. | ||
|
|
||
| ``--stage <name>`` | ||
| Name of the processing stage. | ||
|
|
||
| ``--version``, ``-h``/``--help`` | ||
| Print the version or the option summary. | ||
|
|
||
| Long options must be spelled out in full: ``--par`` is not accepted for | ||
| ``--parallel``. | ||
| The short forms ``-c``, ``-j`` and ``-h`` listed above can be used. | ||
| When both are given, ``-j`` overrides the ``max_concurrency`` key and | ||
| ``--stage`` overrides the ``stage`` key. | ||
|
|
||
| Phlex has no options for passing Jsonnet top-level arguments or external | ||
| variables. | ||
| To parameterize a workflow, evaluate it with the ``jsonnet`` tool first and | ||
| hand the result to Phlex. | ||
|
|
||
| Library search paths (``jsonnet -J`` or ``JSONNET_PATH``) cannot be set | ||
| either, so a configuration passed directly to Phlex must give ``import`` | ||
| paths relative to the importing file, or as absolute paths. | ||
|
|
||
| Top-level keys | ||
| -------------- | ||
|
|
||
| ``stage`` (string) | ||
| Name of the processing stage. | ||
| Required unless ``--stage`` is given. | ||
| It may not be empty or ``"CURRENT"``. | ||
|
|
||
| ``max_concurrency`` (integer) | ||
| Same as ``-j``. | ||
|
|
||
| ``driver`` (object, required) | ||
| The driver plugin that creates the data cells to process (see | ||
| `Drivers`_ below). | ||
|
|
||
| ``sources`` (object) | ||
| Plugins registered with ``PHLEX_REGISTER_PROVIDERS`` or | ||
| ``PHLEX_REGISTER_SOURCE``. | ||
|
|
||
| ``modules`` (object) | ||
| Plugins registered with ``PHLEX_REGISTER_ALGORITHMS``, including output | ||
| modules. | ||
|
|
||
| ``resources`` (object) | ||
| Plugins registered with ``PHLEX_REGISTER_RESOURCES``. | ||
|
|
||
| Only these keys are read. | ||
| Any other top-level key is silently ignored, so a misspelled key such as | ||
| ``module`` has no effect rather than causing an error. | ||
|
|
||
| Plugin entries | ||
| -------------- | ||
|
|
||
| ``sources``, ``modules`` and ``resources`` are tables whose keys are | ||
| *labels* chosen by the user and whose values configure one plugin | ||
| instance: | ||
|
|
||
| .. code-block:: jsonnet | ||
|
|
||
| { | ||
| stage: 'reconstruction', | ||
| driver: { | ||
| cpp: 'generate_layers', | ||
| layers: { event: { total: 100 } }, | ||
| }, | ||
| sources: { | ||
| hits: { cpp: 'read_hits', file: 'hits.root' }, | ||
| }, | ||
| modules: { | ||
| tracking: { cpp: 'track_finder', layer: 'event' }, | ||
| py_check: { py: 'checks' }, | ||
| }, | ||
| } | ||
|
|
||
| ``cpp: '<name>'`` | ||
| Load the C++ plugin library ``lib<name>.so``. | ||
|
|
||
| ``py: '<module>'`` | ||
| Load the Python module ``<module>`` (without the ``.py`` extension) | ||
| through the ``pymodule`` plugin, which must itself be on | ||
| ``PHLEX_PLUGIN_PATH``. | ||
| The module must be importable, for example through ``PYTHONPATH``. | ||
| Supported for ``modules`` and ``sources``, not for ``resources`` or the | ||
| ``driver``. | ||
| Specifying both ``cpp`` and ``py`` is an error. | ||
|
|
||
| The whole entry, including ``cpp`` or ``py`` and the plugin's own keys, is | ||
| passed to the plugin's registration function as its | ||
| ``phlex::configuration`` argument. | ||
| The framework also adds a ``module_label`` key holding the entry's label. | ||
| The label becomes the plugin part of every algorithm name the plugin | ||
| registers, so ``product_selector{.creator = "tracking"}`` selects products | ||
| created by any algorithm of the ``tracking`` entry above. | ||
|
|
||
| Finding plugin libraries | ||
| ~~~~~~~~~~~~~~~~~~~~~~~~ | ||
|
|
||
| ``PHLEX_PLUGIN_PATH`` must be set to a colon-separated list of directories. | ||
| For ``cpp: 'name'``, Phlex loads the first ``libname.so`` it finds on that | ||
| path. | ||
| If the variable is unset, or no directory contains the library, the job | ||
| fails before processing starts. | ||
| An empty element in the list (a leading, trailing or doubled colon) makes | ||
| Phlex also look in the current directory. | ||
|
|
||
| Plugins other than ``pymodule`` are loaded with ``RTLD_LOCAL``, so their | ||
| symbols are not available to resolve symbols of libraries loaded later. | ||
| A library that a plugin needs only for its side effects (for example a ROOT | ||
| dictionary library) should be a direct dependency of that plugin, rather | ||
| than relying on another plugin having loaded it first. | ||
| Linking with ``--as-needed`` drops such libraries from the plugin's | ||
| dependencies because none of their symbols are referenced; linking the | ||
| plugin with ``-Wl,--no-as-needed`` keeps them. | ||
|
|
||
| Plugins are loaded and registered in this order: all ``resources``, then | ||
| all ``modules``, then all ``sources``, then the ``driver``. | ||
| Do not rely on the order of plugins within a table. | ||
|
|
||
| Drivers | ||
| ------- | ||
|
|
||
| The ``driver`` entry takes a ``cpp`` key, an optional ``uses_sources`` key, | ||
| and the driver's own parameters. | ||
| Only C++ drivers are supported, and the driver's configuration does not get a | ||
| ``module_label`` key. | ||
|
|
||
| ``uses_sources`` (list of names) | ||
| Names of sources whose objects are passed to the driver function, in the | ||
| order listed. | ||
| These are the names given to ``add_source<T>(name, ...)`` in a | ||
| ``PHLEX_REGISTER_SOURCE`` plugin, not the labels of ``sources`` entries; | ||
| a source plugin that registers its source under | ||
| ``config.get<std::string>("module_label")`` makes the two the same. | ||
| Entries that use ``PHLEX_REGISTER_PROVIDERS`` register no source object | ||
| and cannot be listed. | ||
| The driver function's parameters after the cursor (or yielder) must | ||
| match those source types, in the same order. | ||
|
|
||
| ``generate_layers`` | ||
| ~~~~~~~~~~~~~~~~~~~ | ||
|
|
||
| Phlex ships one driver, ``generate_layers``, which creates a fixed number of | ||
| data cells per layer. | ||
| Each key of its ``layers`` table names a layer: | ||
|
|
||
| .. code-block:: jsonnet | ||
|
|
||
| { | ||
| driver: { | ||
| cpp: 'generate_layers', | ||
| layers: { | ||
| run: { parent: 'job', total: 2 }, | ||
| event: { parent: 'run', total: 100, starting_number: 1 }, | ||
| }, | ||
| }, | ||
| } | ||
|
|
||
| ``parent`` (default ``'job'``) | ||
| The parent layer. | ||
| The ``job`` layer always exists and is not listed. | ||
|
|
||
| ``total`` (required) | ||
| Number of data cells created *for each* parent data cell. | ||
| The example above creates 2 runs and 200 events. | ||
|
|
||
| ``starting_number`` (default ``0``) | ||
| Number of the first data cell under each parent. | ||
|
|
||
| Data cells are created in increasing number, but algorithms are not | ||
| guaranteed to see them in that order. | ||
|
|
||
| Logging | ||
| ------- | ||
|
|
||
| Phlex logs through spdlog. | ||
| The ``SPDLOG_LEVEL`` environment variable sets the log level, for example | ||
| ``SPDLOG_LEVEL=debug``. | ||
| At ``debug`` level, Phlex reports how it connected each algorithm's inputs, | ||
| which helps when a product selector does not match what you expect. | ||
|
|
||
| A plugin may install its own default spdlog logger during registration. | ||
| Phlex restores its own default logger once all plugins are loaded, so a | ||
| logger installed that way does not stay the default. | ||
|
|
||
| Large integers | ||
| -------------- | ||
|
|
||
| Integers above about 2\ :sup:`53` may not survive Jsonnet evaluation | ||
| exactly (`issue #243 <https://github.com/Framework-R-D/phlex/issues/243>`_). | ||
| Pass large seeds and identifiers as strings. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.