From ed5040499e41b872776f2f209ef0e96bd1370dc9 Mon Sep 17 00:00:00 2001 From: Nicolas Poffley Date: Wed, 25 Mar 2026 15:19:27 +0100 Subject: [PATCH 1/2] Train slots per week documentation - include also an explanation of per-user slots following changes. --- docs/hyperloop/userdocumentation.md | 10 ++++++---- docs/images/trainSlots.png | Bin 82765 -> 0 bytes docs/images/trainSlotsPerUserPerAnalysis.png | Bin 0 -> 107195 bytes 3 files changed, 6 insertions(+), 4 deletions(-) delete mode 100644 docs/images/trainSlots.png create mode 100644 docs/images/trainSlotsPerUserPerAnalysis.png diff --git a/docs/hyperloop/userdocumentation.md b/docs/hyperloop/userdocumentation.md index be2d15ab..c7cf47d5 100644 --- a/docs/hyperloop/userdocumentation.md +++ b/docs/hyperloop/userdocumentation.md @@ -601,17 +601,19 @@ It is possible that a wagon test or train test will produce multiple warnings. I ## Train slots per week -For a given analysis, every dataset has a train slots per week limit. This limit is shown in the dataset under 'Maximal train slots per analysis per week'. This limit is to ensure fair usage of resources, and is calculated on a rolling basis. You may view how many slots have been used here: +For a given analysis, every dataset has a train slots per week limit. This limit is shown in the dataset under 'Maximal train slots per analysis per week'. If an analyzer uses the same dataset across multiple analyses, the calculation (for the analyzer only) is the summed slots across analyses. + +These limits ensure fair usage of resources, and are calculated on a rolling basis. You may view how many slots have been used for a dataset from the wagon table in My Analyses:
- +
-Trains may use more than one slot. The number of slots is calculated as the number of wagons from the analysis in the train, capped by the number of cores that the train runs with. The slots used per analysis may be viewed in the train 'Test - Full Test' tab: +Trains may use more than one slot. The number of slots is calculated as the number of wagons from the analysis in the train, capped by the number of cores that the train runs with. The slots used per analysis may be viewed in the train 'Test - Full Test' tab, where also the time when the train will stop counting towards the quota is shown:
- +
If a single user wagon needs more memory than available in a single core queue, it can still be composed by hyperloop to the two core queue but it will count as a **heavy wagon**. Heavy wagons count as two slots. These wagons are listed in red in the train 'Test - Per Wagon' tab: diff --git a/docs/images/trainSlots.png b/docs/images/trainSlots.png deleted file mode 100644 index 710cfcd7ece83ef03a3b5ae89336e4e978f87391..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82765 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

6qwj`QeK{sWL4;PhJuD&PVCJEYx+^0n@ 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 literal 0 HcmV?d00001 From f2f691892d9d2fa4b496430b13a37934c7b1e4e4 Mon Sep 17 00:00:00 2001 From: Nicolas Poffley Date: Thu, 26 Mar 2026 15:29:16 +0100 Subject: [PATCH 2/2] Automatic Linting from pre-commit and add alt text to img tags. --- docs/hyperloop/co2eestimates.md | 16 +- docs/hyperloop/hyperlooppolicy.md | 28 +-- docs/hyperloop/legoexpert.md | 4 +- docs/hyperloop/notifications.md | 36 ++-- docs/hyperloop/operatordocumentation.md | 124 +++++------ docs/hyperloop/userdocumentation.md | 267 ++++++++++++------------ 6 files changed, 238 insertions(+), 237 deletions(-) diff --git a/docs/hyperloop/co2eestimates.md b/docs/hyperloop/co2eestimates.md index 47ddd9ea..cc6a0e36 100644 --- a/docs/hyperloop/co2eestimates.md +++ b/docs/hyperloop/co2eestimates.md @@ -6,28 +6,30 @@ title: CO2 equivalent estimates ## CO2 equivalent estimates

- + Co2eq tooltip

* In Hyperloop, an estimate of the CO2eq produced by your trains is shown in order to give an idea of the environmental impact. We need to run analysis to achieve our scientific goals but we can optimize the code and sometimes work efficiently even with less trains. The displayed value should help educate the decision if a train is needed. -The value is shown before trains have been run (an estimate based using the wagon test) and then when a train run has finished. +The value is shown before trains have been run (an estimate based using the wagon test) and then when a train run has finished. * The estimate is visible in: * Wagon test view and train submission view (an estimate based on the wagon test) * Train test view (an estimate based on the train test. So, this estimate accounts for all wagons in the train) - * In the 'General' tab of the train view, when a train is in the state 'Done'. This estimate directly uses the CPU usage of the train run. + * In the 'General' tab of the train view, when a train is in the state 'Done'. This estimate directly uses the CPU usage of the train run. ## How is it calculated? Principle: + * There are a few studies for estimating CO2eq of computing, and there are many factors to consider such as the efficiency of the machines used and the power grid which the machines are on. * Furthermore, grey energy (the energy to produce the machines) and the transfers of the data could be considered. * It would be difficult to give justice to all these details and check for each train where exactly the jobs were running. * Therefore, in Hyperloop, estimates of CO2eq are directly derived from CPU usage using an average conversion factor. Calculation input: -* Power per computing core: We use an optimistic value of 10 W/core for pure power consumption and assume a 50/50 split between the carbon from power and carbon from embodied / embedded emissions, therefore working effectively with 20 W/core. Some literature estimates up to 53 W/core for power alone in high-performance computing (see https://www.nature.com/articles/s41550-020-1169-1). -* Electricity emission factors (kgCO2eq per kWh) vary depending how electricity is produced. However, carbon is not everything and we do not want to enter a debate on how energy should be produced here. Therefore we use an average value from https://arxiv.org/pdf/2011.02839.pdf of 0.301 kgCO2eq / kWh, noting that even for the same country the estimates vary significantly depending on the source (e.g. comparing to https://arxiv.org/pdf/2101.02049). -* Hyperloop estimations do not account for the power consumption of data transfer, central infrastructure, or power for storage. The paper 'electricity intensity of internet data transmission', https://onlinelibrary.wiley.com/doi/pdf/10.1111/jiec.12630, estimates 0.06kWh/GB in data transfer. This would mean that a petabyte of data transfer needs 18 tCO2eq. Additionally, the carbon produced by storing the data would not be negligible. For simplicity, we do not account for these aspects, so that our estimates are more directly linked to individual train runs, and not the wider Grid infrastructure. + +* Power per computing core: We use an optimistic value of 10 W/core for pure power consumption and assume a 50/50 split between the carbon from power and carbon from embodied / embedded emissions, therefore working effectively with 20 W/core. Some literature estimates up to 53 W/core for power alone in high-performance computing (see ). +* Electricity emission factors (kgCO2eq per kWh) vary depending how electricity is produced. However, carbon is not everything and we do not want to enter a debate on how energy should be produced here. Therefore we use an average value from of 0.301 kgCO2eq / kWh, noting that even for the same country the estimates vary significantly depending on the source (e.g. comparing to ). +* Hyperloop estimations do not account for the power consumption of data transfer, central infrastructure, or power for storage. The paper 'electricity intensity of internet data transmission', , estimates 0.06kWh/GB in data transfer. This would mean that a petabyte of data transfer needs 18 tCO2eq. Additionally, the carbon produced by storing the data would not be negligible. For simplicity, we do not account for these aspects, so that our estimates are more directly linked to individual train runs, and not the wider Grid infrastructure. * At 20W per core, and 0.301 kgCO2eq / kWh, this gives us: **6t CO2eq per 1MCPUh** or **1 CPU year = 53.3 kgCO2eq** -* In order to compare these emissions to something we know, we use CO2eq produced by flights based on curb6.com \ No newline at end of file +* In order to compare these emissions to something we know, we use CO2eq produced by flights based on curb6.com diff --git a/docs/hyperloop/hyperlooppolicy.md b/docs/hyperloop/hyperlooppolicy.md index c863af4e..9b9b3b6b 100644 --- a/docs/hyperloop/hyperlooppolicy.md +++ b/docs/hyperloop/hyperlooppolicy.md @@ -7,38 +7,38 @@ title: Fair usage policy The very large amount of data that will be collected in Run 3 represents a challenge for analysis, for both the CPU needs and the read data from storage, and therefore a resource usage policy has been put in place to ensure proper use of computing resources. The policy has been openly discussed in multiple meetings, including ALICE weeks, and is subject to adjustments as necessary and as the collaboration gains experience with the Run 3 analysis. If you have questions or doubts, please first refer to your PWG convener who will then bring up the case with the analysis coordinator. -The image below summarizes the policy: +The image below summarizes the policy:
- +Screenshot of hyperlooppolicy
-In general, four categories of trains exist: +In general, four categories of trains exist: -* Trains below 30 TB and taking more than 2.0y of CPU time (red shaded area) are very strongly discouraged. In those cases, please resort to very small trains (where throughputs of even 100 KB/s are allowed with autosubmission) to run. +* Trains below 30 TB and taking more than 2.0y of CPU time (red shaded area) are very strongly discouraged. In those cases, please resort to very small trains (where throughputs of even 100 KB/s are allowed with autosubmission) to run. * Trains that are lower than 2y in CPU usage and loop over less than 200 TB are free to execute and can be executed on Hyperloop via autosubmission. In a certain region between 30-200 TB, slightly more than 2y in CPU time is allowed (see sketch). -* Trains that loop over more than 200 TB and less than 800 TB are dealt with as follows: - * if they require less than 10 years of CPU time, they need only PWG convener approval. - * if they require more than 10 years of CPU time but less than 200 years, they need Analysis and Physics Coordinator approval to run. - * if they require over 200 years of CPU, they need excplicit PB approval. -* Heavy trains looping over datasets bigger than 800 TB are dealt with as follows: - * if they require less than 20 years of CPU time, they need only PWG approval. - * if they require between 20 to 200y of CPU, they can be approved offline by Analysis and Physics Coordination. - * if they require over 200 years of CPU, they need explicit PB approval. +* Trains that loop over more than 200 TB and less than 800 TB are dealt with as follows: + * if they require less than 10 years of CPU time, they need only PWG convener approval. + * if they require more than 10 years of CPU time but less than 200 years, they need Analysis and Physics Coordinator approval to run. + * if they require over 200 years of CPU, they need excplicit PB approval. +* Heavy trains looping over datasets bigger than 800 TB are dealt with as follows: + * if they require less than 20 years of CPU time, they need only PWG approval. + * if they require between 20 to 200y of CPU, they can be approved offline by Analysis and Physics Coordination. + * if they require over 200 years of CPU, they need explicit PB approval. ## Implementation in Hyperloop datasets In practice the chart above is mapped on a number of distinct resource groups which determine the limits assigned to each dataset:
- +Screenshot of resourcetable
The smaller the dataset size, the more often it is automatically submitted per week and the more often you are allowed to run on it per week. Manual requests to datasets above 50 TB are only fulfilled at the automatical submission times defined. This is in order to allow grouping of wagons to large trains. ## Derived data -Derived datasets can be created on Hyperloop which are by construction much smaller than the original datasets. Those are advantagous because steps which are identical in each analysis train run (e.g. event selection and centrality calculation, secondary-vertex finding) are only executed once which saves CPU. Furthermore, as the size is smaller such trains cause less load on the storages. +Derived datasets can be created on Hyperloop which are by construction much smaller than the original datasets. Those are advantagous because steps which are identical in each analysis train run (e.g. event selection and centrality calculation, secondary-vertex finding) are only executed once which saves CPU. Furthermore, as the size is smaller such trains cause less load on the storages. As an example, you can imagine that you run a derived data train on a dataset of 500 TB where you need explicit approval. Say you have a reduction factor of 100, then your output derived data is about 5 TB. You will be allowed to run on that dataset much more frequent, see the table above. diff --git a/docs/hyperloop/legoexpert.md b/docs/hyperloop/legoexpert.md index 8e7ded5b..28c1c02b 100644 --- a/docs/hyperloop/legoexpert.md +++ b/docs/hyperloop/legoexpert.md @@ -17,7 +17,7 @@ title: For the Run 2 LEGO train expert. What has changed? * There is a history feature for wagons and datasets. You can access it by clicking on the button `πŸ“œ` available inside of a wagon/dataset view. A detailed view of what has been created/updated/removed from the wagon/dataset is shown, as well as the username and the time when the change was made.
- +Screenshot of dataset history
* There are automated notifications. These notifications are created per user, and display changes made to tools, like _Datasets_, that are being used by the user. They are displayed per _Analysis_ in the _My Analyses_ page, or globally in the button `πŸ””` which can be found on the top menu. @@ -31,5 +31,5 @@ title: For the Run 2 LEGO train expert. What has changed? * **Performance Graphs** page allows the user to upload his own local metrics file, and then generate the test graphs specific to that file. You produce a local _performanceMetrics.json_ by running the o2 workflow with the argument _--resources-monitoring 2_ which, in this example, produces monitoring information every 2 seconds. These are the same type of graphs produced in the _Test Graphs_ tab of the train run. This page can be accessed at: .
- +Screenshot of performance graphs
diff --git a/docs/hyperloop/notifications.md b/docs/hyperloop/notifications.md index 39315bc4..9b667695 100644 --- a/docs/hyperloop/notifications.md +++ b/docs/hyperloop/notifications.md @@ -9,13 +9,13 @@ title: Notifications * The notifications can be seen in the _My Analyses_ page and in the _Notifications_ page, by clicking `πŸ””` in the menu bar.
- + Screenshot of notifications in my analyses
* The user can click the `βœ–οΈ` button to remove a notification. In order to remove all the notifications, go to the Notifications page, and click the `❌`_Dismiss all_ button.
- + Screenshot of all notifications
## Dataset changed @@ -27,7 +27,7 @@ title: Notifications * The automatic composition settings have changed, e.g. the schedule
- + Screenshot of dataset changed
## Dataset activated / deactivated @@ -35,7 +35,7 @@ title: Notifications * Notifies the user when a dataset included in his or her analyses has been successfully activated or deactivated.
- + Screenshot of dataset activation
## Dataset production added or removed @@ -43,17 +43,17 @@ title: Notifications * For RUN 3 data and MC, the user is informed if the production has been successfully added to or removed from the dataset.
- + Screenshot of production added
* For RUN 2 data, the user is notified when a conversion train run has been added to or removed from the dataset.
- + Screenshot of trainrun added
- + Screenshot of trainrun removed
* For derived data, a notification is sent when a Hyperloop train that produced derived data has been added or removed. @@ -63,7 +63,7 @@ title: Notifications * The user is informed when a run has been added to or removed from the DPG runlist. This change is usually done by the DPG experts.
- + Screenshot of runlist updated
## Mergelist updated @@ -71,7 +71,7 @@ title: Notifications * The mergelist defines which runs are merged into one file at the end of the train running. The user is informed when a mergelist has been modified, added to or removed from the dataset production.
- + Screenshot of mergelist update
## Short datasets @@ -89,7 +89,7 @@ Informs the user when a wagon has been disabled in different circumstances: * Local tests are cleaned if the wagons are not submitted in a period of 4 weeks. The user is notified that the respective wagons are automatically disabled.
- + Screenshot of test cleaned
* When a wagon with derived data output is enabled, the test cannot start if the wagon and its dependencies share the same workflow. As a result, the wagon is disabled and the user is notified about the wagons which share the same task. @@ -97,7 +97,7 @@ Informs the user when a wagon has been disabled in different circumstances: * The notification format is: The wagon _"wagon_name"_ was disabled in _"dataset_name"_. There is derived data. The following wagons have the same workflows {_wagon1_, _wagon2_: _common_workflow_},...,{_wagonX_, _wagonY_: _common_workflow_}
- + Screenshot of wagon disabled 1
* If among the wagon and its dependencies there are identical derived data outputs, the test cannot start, and the wagon is disabled. @@ -105,25 +105,23 @@ Informs the user when a wagon has been disabled in different circumstances: * The notification format is: The wagon _"wagon_name"_ was disabled in _"dataset_name"_. The following wagons have the same derived data outputs {_wagon1_, _wagon2_: _common_derived_data_},...,{_wagonX_, _wagonY_: _common_derived_data_}
- + Screenshot of wagon disabled
- + * The wagon is disabled if the workflow name has been changed in the meantime. This is fixed by updating the workflow name in the wagon configuration.
- + Screenshot of notification workflow
* The wagon is disabled if one of the user defined dependencies of the wagon is considered identical to a service wagon. In order to most efficiently make use of the Grid and the analysis factilities, copies of core services are not permitted as it prevents combining several users into one train.
- + Screenshot of notification of identical wagon
A service wagon is considered identical to a user wagon if it shares the same activated output tables, the same workflow, and it has matching configurables. To fix this error, please use the listed service wagon as a dependency instead of the copy. - - ## Inconsistent parameters * Hyperloop makes a comparison between the wagon configuration and the configuration defined in O2 for the package tag selected for the wagon. If they do not coincide, the user will be informed about the mismatch. The comparison is case sensitive, therefore a Configurable will not match if its name does not contain the identical lowercase / uppercase combination. @@ -131,13 +129,13 @@ Informs the user when a wagon has been disabled in different circumstances: * The user is notified if there is a configurable present in the wagon configuration that is not defined in O2 for the selected package tag tag. Likewise, it informs the user when the wagon configuration misses one or more of the Configurables defined in O2 for the specific tag.
- + Screenshot of inconsistent parameters 2
* If the **wagon configuration is old**, and the wagon is enabled with the latest package tag, the user is advised to sync the wagon in order to get the present configuration. Following this, the test will start automatically. Likewise, the test is reset whenever there is a change in the database, such as updating or syncing the wagon configuration or its dependencies.
- + Screenshot of inconsistent parameters
* If the **wagon is enabled with an older tag**, the configuration might not match (hence the notification). If the old tag is needed, then syncing is not an option because this will set the package to the latest one. Therefore, the wagon configuration has to be modified as needed. The user can take as a reference _full_config.json_ in the test output, which shows the configuration the test is being run with, and compare it to the wagon configuration. diff --git a/docs/hyperloop/operatordocumentation.md b/docs/hyperloop/operatordocumentation.md index f1342620..badc8ddc 100644 --- a/docs/hyperloop/operatordocumentation.md +++ b/docs/hyperloop/operatordocumentation.md @@ -9,13 +9,13 @@ title: Operator Documentation * Below, a display of the grid jobs state during the previous week is displayed, for every site.
- +Screenshot of dashboard
* By default, the dashboard displays the last week summary on the lower section of the page. Use the interval selection tool to select the period of time that you are interested in: either select one from the left menu (e.g. last 3 months, last year), or choose the start and end date of the interval. Click **Save** to update the dashboard.
- +Screenshot of dashboard selection
* By clicking the number of wagons waiting to be included in a train, the user can directly open the [_Train Submission_](#trainsubmission). Similarly, a link to the [_Train Runs_](#train-runs) is available by clicking the number of trains to be submitted to the grid, the number of running tests, or the number of finished trains. @@ -24,32 +24,35 @@ title: Operator Documentation * For a user, the **Train Submission** page displays a read view only of datasets which have enabled wagons. * For a train operator, the _Train Submission_ page displays only datasets which have enabled wagons, and allows train composition, as well as submitting, modifying and killing a train. + ### Train Composition + * Trains are composed per dataset. Only wagons which have a test status of success `🌟` or warning `❗️` can be composed in a train. If a wagon has _Derived data_ tables activated, it will be signalized in the _Test status_ column with the icon πŸ—‚οΈ (standard derived data) or with green bordered πŸ—‚οΈ (slim derived data). The difference between standard and slim derived data will be explained [below](#deriveddatatypes). * By default, wagons that were enabled at most one week ago are shown. In order to display all enabled wagons, click on `off` in the _Enabled_ column. * In order to compose a train, select wagons by checking `β˜‘οΈ` in the _Compose_ column. The Package `Tag` will be automatically chosen, and other wagons that can be included in the train run are signalized with 🟒, and the ones which are not compatible with πŸ”΄. All wagons that are compatible can be automatically chosen by clicking on `βœ… Select all compatible wagons`, or by selecting them one by one.
- +Screenshot of train composition settings
  There are a number of settings that you can decide on when composing a train: - * `Target`: Sets the facility/cores where the train will be run. - * `Type`: This setting defines the type of train to be composed, and decides if derived data will be stored. The dropdown offers 4 possible options: - * **Analysis train** - this will be a standard analysis train and no derived data will be produced. - * **Standard derived data** - this train will produce derived data to be used for further analysis. The results will not be merged across runs and can be used as input for future train runs. - * **Linked derived data** - this option is for derived data which needs to access its parent file when it is processed. The derived data file produced will remember its parent files, inheriting also their storage location. The results will not be merged across runs and can be used as input for future train runs. Datasets composed from this train need to have parent access level activated. - * **Slim derived data** - similarly to the standard derived data case, this train will produce derived data to be used for further analysis. This is reserved for derived data of small output size. The results will be merged across runs and are not available to use in future train runs. The data will be automatically deleted after a preset period of time. - * `β˜‘οΈ slow train`: If enabled, the express train features are disabled. This means that you may have up to 2% more jobs which finish but the train run may take several days more. - * `β˜‘οΈ automatic submission`: If enabled, the train will be automatically submitted after the test is done and succeeds `🌟`. - * Finally, after defining the configuration, click `Compose πŸš‚`. After composing a train run, the wagons that are part of it cannot be selected for a different train run unless the current one is [decomposed](#decompose). After the train run is [submitted](#submit), the wagons will be disabled. +* `Target`: Sets the facility/cores where the train will be run. +* `Type`: This setting defines the type of train to be composed, and decides if derived data will be stored. The dropdown offers 4 possible options: + * **Analysis train** - this will be a standard analysis train and no derived data will be produced. + * **Standard derived data** - this train will produce derived data to be used for further analysis. The results will not be merged across runs and can be used as input for future train runs. + * **Linked derived data** - this option is for derived data which needs to access its parent file when it is processed. The derived data file produced will remember its parent files, inheriting also their storage location. The results will not be merged across runs and can be used as input for future train runs. Datasets composed from this train need to have parent access level activated. + * **Slim derived data** - similarly to the standard derived data case, this train will produce derived data to be used for further analysis. This is reserved for derived data of small output size. The results will be merged across runs and are not available to use in future train runs. The data will be automatically deleted after a preset period of time. +* `β˜‘οΈ slow train`: If enabled, the express train features are disabled. This means that you may have up to 2% more jobs which finish but the train run may take several days more. - * `β˜‘οΈ automatic composition`: The train composition schedule is defined in the dataset settings. If the dataset has a defined schedule, the trains will be automatically composed at the specified times if the tests have finished without a warning and there is no derived data activated. +* `β˜‘οΈ automatic submission`: If enabled, the train will be automatically submitted after the test is done and succeeds `🌟`. +* Finally, after defining the configuration, click `Compose πŸš‚`. After composing a train run, the wagons that are part of it cannot be selected for a different train run unless the current one is [decomposed](#decompose). After the train run is [submitted](#submit), the wagons will be disabled. + +* `β˜‘οΈ automatic composition`: The train composition schedule is defined in the dataset settings. If the dataset has a defined schedule, the trains will be automatically composed at the specified times if the tests have finished without a warning and there is no derived data activated.
- +Screenshot of automatic composition
  @@ -57,16 +60,15 @@ There are a number of settings that you can decide on when composing a train: * The train will be automatically tested, and its progress can be followed in the _Train Runs_ table, or in the [**Train Runs**](#train-runs) page by clicking on the TRAIN_ID link. - ### Scheduling of derived data wagons * Wagons with derived data can be scheduled by operators to be automatically composed at the next composition schedule. * This is supported for standard and linked derived data wagons on any dataset with a composition schedule. * Multiple standard derived data wagons can be combined into one train automatically by Hyperloop, but linked derived data wagons are run separately. -* Operators can simply choose to enable or disable the automatic *submission* and *slow train* options. The schedule is automatically determined by Hyperloop (the next scheduled slot in the dataset is used). +* Operators can simply choose to enable or disable the _automatic submission_ and _slow train_ options. The schedule is automatically determined by Hyperloop (the next scheduled slot in the dataset is used).
- +Screenshot of scheduled wagon
### Staged Submission @@ -78,7 +80,7 @@ There are a number of settings that you can decide on when composing a train: * Approval from the participating analyses PWGs conveners is required in order to submit a long train
- +Screenshot of request long train
## Train Runs @@ -88,13 +90,13 @@ There are a number of settings that you can decide on when composing a train: * To compare two trains, select them in the Compare column and click Compare. This will open a new tab displaying the differences between the two trains.
- + Screenshot of compare trains
* The train run detail can be accessed by clicking on the TRAIN_ID, or with the url .
- + Screenshot of train runs page
* The actions allowed in a train run: @@ -111,60 +113,60 @@ There are a number of settings that you can decide on when composing a train: * The _General_ tab displays the summary of the train's progress, direct links to dataset and participating wagon configuration, as well as direct links to the test output and the speedscope profiling of the task.
- + Screenshot of train result
* The _Test results_ tab shows the performance metrics per device (reader, workflows, writer), along with the expected resources. You can use the interactive graphs (per device) to zoom into the area of interest (click and drag) or zoom out (double-click).
- + Screenshot of test results
* In the _Test Graphs_ tab, you can plot the available metrics for the specific _Train run_. By hovering over the graph, the corresponding values are displayed in a dynamic window, stating the value for each participating wagon.
- + Screenshot of test graphs
* The metric can be selected from the upper-left dropdown, and the graph will change accordingly. * To plot the metric data per device, select the _Per Device_ checkbox near the dropdown.
- + Screenshot of test graphs per device
* In order to plot the highest ten graphs, that means the graphs with the highest average, click the **Show top 10 largest** checkbox.
- + Screenshot of graph largest
* You can zoom into the graph by clicking and dragging the mouse along the area of interest. For zooming out, double-click on the graph.
- + Screenshot of graph zoom
- + Screenshot of graph zoom 2
* In _Submitted jobs_, you can see the summary of the master jobs, along with links to the **IO Statistics** and **Stack trace**.
- + Screenshot of submitted jobs 1
* Click the **IO Statistics** button to be redirected to the site activity information.
- + Screenshot of submitted jobs 2
* Click the **Stack trace** button to be redirected to the stack trace information in MonALISA. Here you can see a summary of failures of your jobs.
- + Screenshot of submitted jobs 3
* This information is collected when the masterjobs have finished from all ERROR_V jobs. Some information is already available while the train is running but make sure to check again when the train is in a final state. Common errors are grouped and counted. This allows you to investigate failures and debug them using the provided stack trace. @@ -172,33 +174,33 @@ There are a number of settings that you can decide on when composing a train: * The _Grid statistics_ tab presents a summary of the jobs performance and plots the Files/Job, CPU time/Job and Wall time/Job statitics.
- + Screenshot of grid stats
* If the train is run as a derived data production and there are activated tables, the Derived data tab will be showed. This displays the tables which are produced by the task and saved to the output.
- + Screenshot of train modal derived
* _Merged output_ displays the jobs status after submitting the train. The mergelists are defined in the dataset settings.
- + Screenshot of merged output
* When the final merge is started manually by the operator, some of the runs may not be merged. You can copy the list of merged runs or the total list of runs by clicking on the (red) number. * Here you can also track the submission process, and debug issues that may have taken place.
- + Screenshot of merged output 1
* You can use the _Clone train_ tab to clone the train. The cloned train will have **the same wagon timestamp** of the original train, with the **current dataset configuration**. This means that if the users have changed the wagon configuration in the meanwhile, this is not taken into account (this is different from the LEGO trains). * Other settings can be modified: package tag, target facility, slow train option, derived data, automatic submission.
- + Screenshot of clone train
### Request Long Train @@ -207,13 +209,13 @@ There are a number of settings that you can decide on when composing a train: * When requesting a long train, it is possible to request standard derived data from a short train with slim derived data.
- + Screenshot of long train derived type
* Any user who is part of the analysis can request a long train. Approval from the participating analyses PWGs conveners is required in order to submit a long train. Train operators or admins can also approve a long train, but it is usually done by the PWG.
- + Screenshot of request long train
* Once the long train is approved: @@ -221,7 +223,7 @@ There are a number of settings that you can decide on when composing a train: * Otherwise the Submit button is enabled and the operator can submit the train
- + Screenshot of long train approved
## Trains with issues @@ -233,7 +235,7 @@ There are a number of settings that you can decide on when composing a train: * There is a final merge job in final state, but the merging is not declared as _done_ in the database
- + Screenshot of trains with issues
* The operator must analyse this cases and decide upon resubmitting some of the jobs, launching the final merging submission where the errors are not significant, or killing the train when there are too many errors. @@ -245,7 +247,7 @@ There are a number of settings that you can decide on when composing a train: * The user can browse and click on the _Dataset_ they want to add to their analysis.
- +Screenshot of enable dataset datasets page
* Inside of the _Dataset_ view page, click on the button `✚ Add dataset to analysis`. It will display a list of all the analyses you belong to. Select the _Analysis_ you want to add the dataset to, and click on `πŸ’Ύ Save`. @@ -253,7 +255,7 @@ There are a number of settings that you can decide on when composing a train: * By clicking the `πŸ“` button, the operator is able to modify the dataset in the [**Edit Dataset**](#edit-dataset) page.
- + Screenshot of datasets page
* The runlists will be received programmatically from the DPG. @@ -263,7 +265,7 @@ There are a number of settings that you can decide on when composing a train: * Allows the operator to update the dataset properties. Firstly, the operator can update the name and description of the dataset, and activate or deactivate it by clicking the `❌` / `βœ…` button. In order to save the changes you made, click the _Save all changes_ button.
- + Screenshot of edit dataset options
* In the **Options** box, you can add short datasets to the current dataset, which will be used for the [**staged submission**](#stagedsubmission). Enabling _Run final merging over all runs in this dataset_ will merge all the runs of all the productions during the final merging. @@ -273,7 +275,7 @@ There are a number of settings that you can decide on when composing a train: * To unstage the data to a specific target, click the _Unstage_ button. The unstaging process will start once clicking _Save all changes_.
- + Screenshot of edit dataset staging
* In the **Automatic Composition** box, the operator is able to enable the automatic train composition. Choose the composition type, the maximum CPU time that can be consumed and the maximum number of trains that can be composed per week for an analysis. @@ -283,13 +285,13 @@ There are a number of settings that you can decide on when composing a train: * For all these cases, the trains will only be composed if the tests finished without a warning and if they do not store derived data.
- + Screenshot of automatic composition 3
* Choose the days and times at which the trains should be composed.
- + Screenshot of automatic composition 2
### Deciding on data to be processed depends on the dataset type @@ -297,25 +299,25 @@ There are a number of settings that you can decide on when composing a train: * For RUN 2 data, the operator can add or remove a [**RUN 2 conversion train run**](https://alimonitor.cern.ch/trains/train.jsp?train_id=132#runs).
- + Screenshot of add train run
* For RUN 3 data and MC, the operator can add or remove a production. In order to create a new production, click on the _+Production_ button. After choosing the collision type, anchor and MC Tag, select the runlist defined by the DPG and click _+Add_. If no runlist is available, contact the DPG specialists for creating one.
- + Screenshot of add dataset production
* For derived data, you can add or remove a production. Create a production by selecting _Data_, choose the desired _Period_ and select the required _Derived train_ from the dropdown list.
- + Screenshot of dataset derived data
* Within the dataset production you can update the list of runs to be excluded.
- + Screenshot of change dataset production
* The mergelist defines which runs are merged into one file at the end of the train running. The operator can add, update, activate or deactivate a mergelist in the dataset. @@ -325,11 +327,11 @@ There are a number of settings that you can decide on when composing a train: * Accessed from the **Datasets** view, this page summarizes the derived data available in Hyperloop. The information displayed can be grouped by Dataset, Analysis or PWG (use the upper buttons to switch between the views).
- + Screenshot of derived data access
- + Screenshot of derived data grouping
* Make use of the available filters of the table to search for the derived data of interest. Expand or collapse groups to focus on a specific derived data or use the Expand all/Collapse all button to expand/collapse all groups. @@ -337,29 +339,29 @@ There are a number of settings that you can decide on when composing a train: * By clicking on the derived data train number, this will open the Train result view (the same one accessed from pages such as Train runs or Trains with issues). You can schedule derived data for deletion by clicking on the **Delete** button in the train view or in the Delete column of the table. The deletion will only be available if the derived data is not used in any datasets or if the datasets using this derived data are not activated. In case these conditions are not met, you can ask the analyzers if the derived data is still needed for the activated datasets or they can be removed.
- + Screenshot of derived data delete
- + Screenshot of derived data no delete
* To see all the datasets in which a derived data is used, click **See dependent datasets** button in the Train result view (right next to the Delete button). This will redirect you to a new tab displaying the **Datasets** page, filtered to show all the datasets (activatd or not) which are using the derived data. To see specifically only the activated or deactivated datasets dependent on this derived data, use the activated / deactivated buttons inside the In datasets column of the table. This will open the same Datasets page, but filtered depending on the datasets' activated state.
- + Screenshot of derive data dependent
* Click on the name within the Analysis column to be redirected to a new tab showing a read-only view of the analysis within which the derived data was created.
- + Screenshot of derived data analysis
* The total size of the derived data in Hyperloop is displayed below the table, on the right side. Keep in mind that this is the total size of all derived data and it is not affected by the filtering of the table.
- + Screenshot of derived data size
## Staging status @@ -367,13 +369,13 @@ There are a number of settings that you can decide on when composing a train: * Accessed from the **Datasets** view, this page displays the staging status of all the datasets in Hyperloop for which a staging process was initiated. Use it to follow up the progress and check if the staging is completed, ongoing, or if there are any issues.
- + Screenshot of staging status page
* Click on the staging percentage in the right-most column to view the detailed staging progress in a new tab: this shows the status of each transfer request.
- + Screenshot of staging process
## DPG Runlists @@ -381,17 +383,17 @@ There are a number of settings that you can decide on when composing a train: * The [**DPG Runlists**](https://alimonitor.cern.ch/hyperloop/runlists) page is dedicated to the DPG experts and displays all the DPG runlists created for the datasets. The DPG expert can add, edit or remove a runlist.
- + Screenshot of dpgrunlists
* Clicking on the the `πŸ“` button will lead to the edit view, where the DPG expert can change the list of runs.
- + Screenshot of edit runlist
* DPG experts can create a new runlist by clicking the **+Add runlist** button. In order to create the list of runs, the correct data type, anchor, tag and production must be selected.
- + Screenshot of add runlist
diff --git a/docs/hyperloop/userdocumentation.md b/docs/hyperloop/userdocumentation.md index c7cf47d5..6a9f3409 100644 --- a/docs/hyperloop/userdocumentation.md +++ b/docs/hyperloop/userdocumentation.md @@ -7,10 +7,10 @@ title: User Documentation When opening a page in Hyperloop which has not been visited before, a guided tour will explain key concepts. These tours provide an interactive learning experience for Hyperloop, easily activated with a single click. They are ideal for beginners and for refreshing knowledge. -Where appropriate, when one tour ends, the next will begin to explain the next section of Hyperloop. Tours can be exited at any time. Once closed, they will not automatically begin on future page visits. +Where appropriate, when one tour ends, the next will begin to explain the next section of Hyperloop. Tours can be exited at any time. Once closed, they will not automatically begin on future page visits.
- +Screenshot of joyride welcome
### Tour Elements @@ -18,13 +18,13 @@ Where appropriate, when one tour ends, the next will begin to explain the next s * Each element of Hyperloop with a tour includes a tour 🚌 button. Clicking this button initiates the tour.
- +Screenshot of joyride tour icon
* Each tour step includes a _Next_ button to access the next step of the tour. The page will automatically scroll to and highlight the next element to be explained. Also displayed is the current step number and total number of steps in the tour.
- +Screenshot of joyride next button
* Each tour step additionally includes an exit button. Clicking this closes the tour. After clicking this, the tour of the given section will not automatically open on future visits to the section of Hyperloop. To access the tour of the section again, the relevant tour 🚌 button must be clicked. @@ -53,7 +53,7 @@ The _Service wagons_ are wagons which are dependencies to other wagons. They are Using the _My Analyses_ page, inside of the _Analysis_ you want to add the wagon to, click on `✚ Add new wagon`.
- +Screenshot of new wagon
There are 2 parameters required to create a new wagon: @@ -68,7 +68,7 @@ By clicking on `πŸ’Ύ Save` the wagon will be added, and you will be redirected t * Using the _My Analyses_ page, click on the button `🧬` to clone a wagon.
- +Screenshot of clone wagon
A list of _Analyses_ you belong to will be displayed. You have to select the _Analysis_ where you want to clone the _Wagon_ to, and name the _NewWagon_ (the wagon name has to be unique within _Analysis_). By clicking on `🧬 Clone`, a new wagon will be added with the same configuration as the _Wagon_ including subwagons and derived data. @@ -83,24 +83,24 @@ You can get to the _All Analyses_ page by using the main menu, or by the link in * By clicking on the top-left corner, you will be redirected to a read-only view of the wagon, that can be shared with colleagues and support. The top right corner history symbol leads to the [_Wagon **History**_](#wagonhistory) page, which will display the state evolution of the wagon.
- +Screenshot of wagon shortcuts
- + ##
Wagon Settings * In _Wagon settings_ you can modify the wagon name, work flow name, and select wagon's dependencies. The dependencies offered are wagons from the same _Analysis_ or from [_Service wagons_](#servicewagons).
- +Screenshot of wagon settings
- + ## Wagon Configuration * In _Configuration_ the wagon configuration corresponding to the workflow will be available in the _Base_. The configuration is divided per _Task_, hence if you need to add a new parameter, you will need add it in the following order: task, parameter and value. * The wagon configuration supports a variety of parameter types defined in task as _Configurable_ including: primitive type parameters, fixed-length arrays, variable-length arrays, matrices, labelled matrices and histogram binning.
- +Screenshot of detailed configuration
* The _Variable-length arrays_ allow the user to add/remove elements in the _Base_ wagon, and the change will be propagated in all the subwagons. @@ -115,62 +115,60 @@ You can get to the _All Analyses_ page by using the main menu, or by the link in * The subwagons added to the wagon will be represented with an automatically assigned suffix in _AnalysisResults.root_. Here you can see an example where we have added two subwagons called _smalleta_ and _verysmalleta_.
- +Screenshot of subwagon suffix
* In order to update the base and subwagon configuration with the latest version of the workflow, click on the button `↻ sync` in _Configuration_. By synchronizing the configuration, the parameters which no longer belong to the workflow will be removed, and the values of the wagon's _Base_ will be updated as well if they have not been modified by the user. ### Upload Wagon Configuration via JSON -* The wagon configuration may be adjusted via JSON file. Any values in the wagon will be adjusted to the values in the JSON file. +* The wagon configuration may be adjusted via JSON file. Any values in the wagon will be adjusted to the values in the JSON file.
- +Screenshot of update via json button
* The required format for Hyperloop to ingest the JSON is the exact format given when downloading the configuration JSON file from Hyperloop (from the download button above). This download includes workflows from dependencies. When uploading, it is not necessary to remove dependencies - any workflows not directly from the wagon will be ignored during the upload.
- +Screenshot of update via json page one
* Only configurables and subwagons which already exist in the wagon may be edited - any new subwagons or configurables in the JSON will be ignored. To add new subwagons, first add them to the existing wagon. When a file is chosen, each changed value is shown in the 'overview'. All values in 'base' are listed first, with subwagons listed below. In the example below, there are two subwagons, 'Pos' and 'Neg'. Hovering over any value will display the change in a tooltip.
- +Screenshot of update via json overview
-* There is validation to check for invalid values. It also ensures that there are no identical subwagons. +* There is validation to check for invalid values. It also ensures that there are no identical subwagons.
- +Screenshot of update via json validation
* A full diff between the current and uploaded configuration is also available. Every difference between the current and uploaded configuration is shown.
- +Screenshot of update via json diff
* Once 'Apply Changes' is pressed, any altered values will be highlighted in yellow. No changes are saved until the 'save' button is pressed, so it is possible to apply the changes to view them without losing the current configuration.
- +Screenshot of update via json highlight
+## Derived data +* In _Derived Data_ the tables which are produced by the task are displayed. If activated, these are saved to the output if the train is run as a derived data production. The produced derived data can be made available by the operators and serve as input for subsequent trains. - -## Derived data - -* In _Derived Data_ the tables which are produced by the task are displayed. If activated, these are saved to the output if the train is run as a derived data production. The produced derived data can be made available by the operators and serve as input for subsequent trains. - ### Derived data types + * There are three types of derived data specifications: * Standard derived data (marked with πŸ—‚οΈ)- if the wagon is used in a train, this will produce derived data to be used for further analysis. The results will not be merged across runs and can be used as input for future train runs. Note that standard derived data trains do not submit automatically and may need additional approval. If in doubt, please seek advise before enabling derived data tables in your wagon configuration. * Slim derived data (marked with green bordered πŸ—‚οΈ) - similarly to the standard derived data case, if used in a train, this will produce derived data to be used for further analysis. This is reserved for derived data of small output size. The results will be merged across runs and are not available to use in future train runs. The data will be automatically deleted after a preset period of time. You can mark a wagon for running as slim derived data by checking `Ready for slim derived data`. * Linked derived data (marked with red bordered πŸ—‚οΈ) - linked derived data trains will also produce derived data to be used for further analysis. Linked derived data has access to the parent AO2D - this is not the case for other derived data types. Like standard derived data, results are not merged across runs. - + * For wagons set as ready for slim derived data, two more fields need to be correctly set: * Max DF size - This sets the maximal dataframe size in the merging step. Has to be 0 for not-self contained derived data (which need parent file access). * Max derived file size - Sets the size limit for the output file size of the derived data file. This is an expert parameter which usually does not have to be changed. Only change this value if the processing in subsequent trains takes so long that the jobs fail. If set to 0 a good value will be automatically determined. @@ -182,33 +180,33 @@ When enabling `Ready for slim derived data` the option has to be selected for th * In order to update the derived data configuration with the latest version of the workflow, click on the button `↻ sync` in _Derived data_. By synchronizing the derived data, the tables which no longer belong to the workflow will be removed, and the values of the tables will be updated.
- +Screenshot of derived data example
-## Test Statistics +## Test Statistics * _Test Statistics_ contains three graphs that display different metrics following the tests this wagon was part of. The first graph plots the _PSS Memory_ corresponding to each test run. The second one diplays the _CPU Time_, _Wall time_ and _Throughput_ along the test runs for this wagon. Finally, the third graph shows the _Output size_ at each test run.
- +Screenshot of test statistics
* Depending on the datasets this wagon is using, the user is able to choose the _Dataset_ on which the metrics mentioned above are plotted, from the upper-left dropdown. In case no tests were run on the chosen dataset, a message will appear stating this.
- +Screenshot of dataset dropdown
* By clicking on the bullets representing the metric value at any of the test runs plotted, the user will open a new tab displaying a read-only view of the wagon test output.
- +Screenshot of test stats graphs
* In order to zoom into the graph, the user needs to click and drag over the are of interest, which will automatically show the zoomed-in graph portion. By double-clicking, it will zoom out and show the entire graph.
- +Screenshot of zooming
### 4. Wagon History @@ -216,7 +214,7 @@ When enabling `Ready for slim derived data` the option has to be selected for th * In the _Wagon History_ page, there is a summary of the wagon's state from the creation until the last update. By clicking on the _+_ symbol, one can expand the information, showing the subwagons' details and the derived data at each timestamp.
- +Screenshot of wagon history
* On the right side of the page, the user can select two timestamps in order to compare the state of the wagon between the two by clicking _Compare_. This will lead to [_Compare Wagons_](#compare-wagons) page. You can cancel your current selection by clicking _Unselect all_. @@ -228,7 +226,7 @@ When enabling `Ready for slim derived data` the option has to be selected for th * The Derived data tab reflects the differences concerning the derived data at the two timestamps.
- +Screenshot of compare wagons
### 6. Compare individual wagons @@ -237,7 +235,7 @@ When enabling `Ready for slim derived data` the option has to be selected for th * Using the _My Analyses_ page, click on the button `πŸ†š` to compare the wagon. A list of all your wagons will be displayed. Once you select the desired wagon, this will open the comparison view in a new tab. This has a similar structure to the different timstamps comparison.
- +Screenshot of compare user wagons
## Creating or joining an analysis @@ -256,7 +254,7 @@ The rest of the parameters are not relevant for the Hyperloop train system. After all the parameters have been set, click on `Create` and your _Analysis_ will be available in the _My Analyses_ and _All Analyses_ page. - +Screenshot of comparison with jira The synchronization from JIRA to the Hyperloop train system can take up to 30 minutes. @@ -267,7 +265,7 @@ The synchronization from JIRA to the Hyperloop train system can take up to 30 mi * Inside of an analysis, click on the button `Datasets and Settings πŸ“`.
- +Screenshot of dataset and settings
* There is a list of _Enabled datasets in **Analysis**_. You can disable a dataset for that analysis by clicking on the button `❌`. @@ -279,7 +277,7 @@ The synchronization from JIRA to the Hyperloop train system can take up to 30 mi * You can browse and click on the _Dataset_ you want to add to your analysis.
- +Screenshot of enable dataset datasets page
* Inside of the _Dataset_ view page, click on the button `✚ Add dataset to analysis`. It will display a list of all the analyses you belong to. Select the _Analysis_ you want to add the dataset to, and click on `πŸ’Ύ Save`. @@ -293,7 +291,7 @@ You can enable a wagon in the _My Analyses_ page. Inside of the _Analysis_ there 3. Pull request: Select the option `β˜‘οΈ Future tag based on pull request`. There will be a list of the latest merged/unmerger pull requests available with their corresponding description. By choosing a pull request, your wagon will be tested as soon as the pull request is merged in a package tag. Then your wagon will be composed in a train with the latest package tag available.
- +Screenshot of enable wagon
After choosing the package tag to be used, click on the button `❌` to enable your wagon in a dataset, the icon will change from `❌` to `βœ…`. If you hover over `βœ…` you can see the information about the enabled wagon: package tag, time and username. If you need to disable a wagon in a dataset, click on the button `βœ…`. After enabled, the wagon will be automatically tested and you can follow the progress of the [test](#wagon-test) on the button next to `βœ…`: `βŒ›οΈ` queued,`⏳` ongoing,`🌟` done, `❗️` warning and `πŸ’£` failed. @@ -310,7 +308,7 @@ You can enable a wagon in the _My Analyses_ page. Inside of the _Analysis_ there * If a wagon test has failed, one can study the failure source by clicking the test output button. This will open in a new tab the list of files that can be used to track the possible issues that led to the failure.
- + Screenshot of debug failed test
* You can analyse: @@ -324,17 +322,17 @@ You can enable a wagon in the _My Analyses_ page. Inside of the _Analysis_ there * The Test results tab shows the performance metrics per device (reader, workflows, writer), along with the expected resources. You can use the interactive graphs (per device) to zoom into the area of interest (click and drag) or zoom out (double-click).
- + Screenshot of wagon test results
* The Test Graphs tab, plots the available metrics for the specific wagon test. You can choose the metric of interest from the dropdown, zoom into the graph (click and drag) and zoom out (double-click).
- //already there + Screenshot of test graphs //already there
* If you only want to see the top 10 graph with the highest average, check the Show top 10 largest box. - + * To produce this type of performance graphs for a local O2 execution, follow the instructions [here](#producing-performance-graphs-for-a-local-o2-execution). * Whenever a wagon configuration is changed, if there are enabled wagons (including wagons that depend on it), then the test is automatically reset and a new test is launched. However, if the enabled wagon was already composed in a train, the train will run with the wagons and dataset configuration of the time at which the train was created. @@ -345,101 +343,98 @@ When creating or enabling wagons, you can use a pull request instead of a packag 1. [Adding a new wagon](#addwagon): You can create a wagon with your unmerged or unreleased workflow. If the workflow is not available, add manually the configuration of the wagon, and subwagons if needed. You can synchronize the wagon's configuration once the package tag that includes your pull request has been released. 2. [Enabling a wagon in a dataset](#enabling-a-wagon): If you need to enable your wagon with workflow that is unmerged or unreleased, use a `Future tag based on pull request`. There is a list of the latest merged and unmerged pull requests available in the system, you can see the pull request number and description. Select the _pull request tag_ and enable the wagon in a dataset. By doing this, the wagon will be queued to test, and the test will begin once the _pull request_ has been merged to a package tag, and the package tag is released. And then, if the test is successful, it'll be composed in a train with the latest package tag available. - + ## Warnings - + When a wagon test finishes in warning, this means that the wagon will not be included in the automatic composition schedule. Therefore, train composition can be requested in the Operation channel, where an operator will take care of the request. Before doing so, please review if you cannot fix the cause of the warning yourself. Depending on the nature of the warning and the degree of exceeding specific constraints, the operator will either compose your train or advise you to review and improve certain parts before requesting a train again. In the latter case, the user can analyze the test and review the logs, searching for ways of improving resource usage or other elements that caused the exceptions. - + There are a number of warnings, which will require different courses of action: - + ### 1. Memory consumption too large for automatic train submission - +
- + Screenshot of warning for memory
- - * The memory consumption is larger than the limit. In wagon tests, the limit is the memory allowance of a two core target minus a small buffer, which is ~ 3.6GB. - * In the train test, the limit is the memory allowance of the train target. For Grid - Single core and 2 core, trains may be submitted even with the warning: If the average PSS memory is <= 3.2 GB, then operators will compose your train on Grid - Single core. Otherwise, if it is > 3.2 GB and <= 4 GB, the operators will compose the train on request on Grid - 2 core. If larger than 4 GB, then the train cannot be composed. The user should check for ways of improving memory consumption. - * For the other target queues, trains can only be composed if the memory consumption is within the target limits. - * For the cases when the train cannot be composed due to high memory consumption, the user can review the test. One can check the logs and look for any possible improvements that can be done for a lower memory consumption. - +* The memory consumption is larger than the limit. In wagon tests, the limit is the memory allowance of a two core target minus a small buffer, which is ~ 3.6GB. +* In the train test, the limit is the memory allowance of the train target. For Grid - Single core and 2 core, trains may be submitted even with the warning: If the average PSS memory is <= 3.2 GB, then operators will compose your train on Grid - Single core. Otherwise, if it is > 3.2 GB and <= 4 GB, the operators will compose the train on request on Grid - 2 core. If larger than 4 GB, then the train cannot be composed. The user should check for ways of improving memory consumption. + +* For the other target queues, trains can only be composed if the memory consumption is within the target limits. +* For the cases when the train cannot be composed due to high memory consumption, the user can review the test. One can check the logs and look for any possible improvements that can be done for a lower memory consumption. + ### 2. Maximal PSS more than 30% larger than average PSS - +
- + Screenshot of warning pss
- - * The maximum PSS memory consumption is more than 30% larger than the average PSS, therefore the train cannot be automatically composed. This warning means that a memory leak is possible, so it must be checked by an operator. If there is no memory leak, the train can be composed. Otherwise, the operator will advise the user to check for possible causes and improvements before requesting again. + +* The maximum PSS memory consumption is more than 30% larger than the average PSS, therefore the train cannot be automatically composed. This warning means that a memory leak is possible, so it must be checked by an operator. If there is no memory leak, the train can be composed. Otherwise, the operator will advise the user to check for possible causes and improvements before requesting again. ### 3. CPU usage too large - +
- + Screenshot of warning cpu
- - * The CPU usage limit is set per dataset and all trains running on a specific dataset must respect this constraint. If the limit is not respected, the train cannot be composed without PWG approval. Therefore, the user should discuss the details and requirements for this train with the PWG before requesting again. Depending on the amount of total resources, an approval in the Physics Board (PB) may also be needed. The CPU limit of a dataset may be viewed on the dataset page. - * It is possible for a train to have a CPU warning when composed despite the wagon test not having a CPU warning. This usually happens in a situation where the wagon test (which runs on a single core) uses so much memory that it doesn't fit a single core job on the grid and therefore needs two cores for the train (more cores means a higher memory allowance). But if the devices in the wagon cannot be parallelised well over multiple cores, this leads to more wall time and a higher CPU usage as the cores will be underutilised. In this situation, one can either reduce the wagon memory consumption to fit into a single core or reduce the CPU consumption to fit the dataset. - + +* The CPU usage limit is set per dataset and all trains running on a specific dataset must respect this constraint. If the limit is not respected, the train cannot be composed without PWG approval. Therefore, the user should discuss the details and requirements for this train with the PWG before requesting again. Depending on the amount of total resources, an approval in the Physics Board (PB) may also be needed. The CPU limit of a dataset may be viewed on the dataset page. +* It is possible for a train to have a CPU warning when composed despite the wagon test not having a CPU warning. This usually happens in a situation where the wagon test (which runs on a single core) uses so much memory that it doesn't fit a single core job on the grid and therefore needs two cores for the train (more cores means a higher memory allowance). But if the devices in the wagon cannot be parallelised well over multiple cores, this leads to more wall time and a higher CPU usage as the cores will be underutilised. In this situation, one can either reduce the wagon memory consumption to fit into a single core or reduce the CPU consumption to fit the dataset. + ### 4. Too many CCDB calls - +
- + Screenshot of warning ccdb
- - * Too many calls to the CCDB, therefore the train cannot be composed, and the cause of a high number of calls should be checked. + +* Too many calls to the CCDB, therefore the train cannot be composed, and the cause of a high number of calls should be checked. ### 5. Reduction factor too small - +
- + Screenshot of warning reduction factor
- - * This occurs when the reduction factor is lower than 50. If the expected output size is below 50 GB, the operator can compose the train on request. If larger, the train cannot be composed. - + +* This occurs when the reduction factor is lower than 50. If the expected output size is below 50 GB, the operator can compose the train on request. If larger, the train cannot be composed. + ### 6. Log output too large - +
- + Screenshot of warning log output
- - * The log file is too large, therefore the train cannot be composed, and the user should check for factors leading to this. - + +* The log file is too large, therefore the train cannot be composed, and the user should check for factors leading to this. + ### 7. Derived output too large for slim train - +
- + Screenshot of warning derived output
- - * This is specific to tests with wagons set as ready for slim derived data. As the entire output is merged into one single file, there is a limit of 4000 MB for this. If exceeded, the user is advised to switch to standard derived data by unchecking the option β€œReady for slim derived data” in the wagon edit view. Then a request for standard derived data train can be made. + +* This is specific to tests with wagons set as ready for slim derived data. As the entire output is merged into one single file, there is a limit of 4000 MB for this. If exceeded, the user is advised to switch to standard derived data by unchecking the option β€œReady for slim derived data” in the wagon edit view. Then a request for standard derived data train can be made. ### 8. Unbound indices detected in AO2D merging - +
- + Screenshot of warning unbound indices
- - * For derived data trains, it notifies the detection of unbound columns during AO2D merging. This means that one of the output tables which has been asked to be stored has index columns to tables which are not within the output. This usually points to a bad or broken data model definition and should be fixed. The only case where this is expected and not worrisome is linked derived data. For both slim derived data and standard derived data, the data model should be fixed. +* For derived data trains, it notifies the detection of unbound columns during AO2D merging. This means that one of the output tables which has been asked to be stored has index columns to tables which are not within the output. This usually points to a bad or broken data model definition and should be fixed. The only case where this is expected and not worrisome is linked derived data. For both slim derived data and standard derived data, the data model should be fixed. ### 9. Too many input files expected to go to derived output - +
- + Screenshot of linked files derived output
- - * This warning only appears for linked derived data. The maximum number of input files which can go to derived output is 25. The warning will display how many are expected. If this warning appears, the train cannot be submitted. + +* This warning only appears for linked derived data. The maximum number of input files which can go to derived output is 25. The warning will display how many are expected. If this warning appears, the train cannot be submitted. ### Multiple warnings - + It is possible that a wagon test or train test will produce multiple warnings. In that case, the checks above will be done for each warning present, and the decision making regarding train submission will be done considering all the exceptions. - - +
- + Screenshot of multiple warnings
- - + ## All Analyses * [**All Analyses**](https://alimonitor.cern.ch/hyperloop/all-analyses) is a read only view of all analyses available in the system. Click on the analysis name to be redirected to a read-only view of the analysis. @@ -452,13 +447,13 @@ It is possible that a wagon test or train test will produce multiple warnings. I * To compare two trains, select them in the Compare column and click Compare. This will open a new tab displaying the differences between the two trains.
- + Screenshot of compare trains
* The train run result can be accessed by clicking on the TRAIN_ID, or with the url .
- + Screenshot of train runs page
## Train Run Result @@ -466,62 +461,62 @@ It is possible that a wagon test or train test will produce multiple warnings. I * The _General_ tab displays the summary of the train's progress, direct links to dataset and participating wagon configuration, as well as direct links to the test output and the [speedscope](https://johnysswlab.com/speedscope-visualize-what-your-program-is-doing-and-where-it-is-spending-time/) profiling of the task.
- + Screenshot of train result
* The _Test results_ tab shows the performance metrics per device (reader, workflows, writer), along with the expected resources. You can use the interactive graphs (per device) to zoom into the area of interest (click and drag) or zoom out (double-click).
- + Screenshot of test results
* In the _Test Graphs_ tab, the user can plot the available metrics for the specific _Train run_. By hovering over the graph, the corresponding values are displayed in a dynamic window, stating the value for each participating wagon.
- + Screenshot of test graphs
* The metric can be selected from the upper-left dropdown, and the graph will change accordingly. * The user can choose to plot the metric data per device, by checking the _Per Device_ near the dropdown.
- + Screenshot of test graphs per device
* In order to plot the highest ten graphs, that means the graphs with the highest average, the user can click the **Show top 10 largest** checkbox.
- + Screenshot of graph largest
* The user can zoom into the graph by clicking and dragging the mouse along the area of interest. For zooming out, the user must double-click on the graph.
- + Screenshot of graph zoom
- + Screenshot of graph zoom 2
- + * To produce this type of performance graphs for a local O2 execution, follow the instructions [here](#producing-performance-graphs-for-a-local-o2-execution). * In _Submitted jobs_, you can see the summary of the master jobs, along with links to the **IO Statistics** and **Stack trace**.
- + Screenshot of submitted jobs 1
* Click the **IO Statistics** button to be redirected to the site activity information.
- + Screenshot of submitted jobs 2
* Click the **Stack trace** button to be redirected to the stack trace information in MonALISA. Here you can see a summary of failures of your jobs.
- + Screenshot of submitted jobs 3
* This information is collected when the masterjobs have finished from all ERROR_V jobs. Some information is already available while the train is running but make sure to check again when the train is in a final state. Common errors are grouped and counted. This allows you to investigate failures and debug them using the provided stack trace. @@ -529,41 +524,41 @@ It is possible that a wagon test or train test will produce multiple warnings. I * The _Grid statistics_ tab presents a summary of the jobs performance and plots the Files/Job, CPU time/Job and Wall time/Job statitics.
- + Screenshot of grid stats
* If the train is run as a derived data production and there are activated tables, the Derived data tab will be showed. This displays the tables which are produced by the task and saved to the output.
- + Screenshot of train modal derived
-* _Merged output_ displays the merging jobs and the output directories. A merged output is created for every mergelist and final mergelist in the dataset, along with the full train merge. The mergelists and final mergelists are defined in the dataset settings. Mergelists contain lists of runs from a single runlist, while final mergelists are used to combine mergelists across productions. +* _Merged output_ displays the merging jobs and the output directories. A merged output is created for every mergelist and final mergelist in the dataset, along with the full train merge. The mergelists and final mergelists are defined in the dataset settings. Mergelists contain lists of runs from a single runlist, while final mergelists are used to combine mergelists across productions.
- + Screenshot of merged output
* When the final merge is started manually by the operator, some of the runs may not be merged. You can copy the list of merged runs or the total list of runs by clicking on the (red) number. * Here you can also track the submission process, and debug issues that may have taken place.
- + Screenshot of merged output 1
- ### Request Long Train * The _Request long train_ tab allows users to request a long train after the train ran on a short dataset. Short datasets are subsets of a big dataset (_set up in the Dataset settings_). First, a train run needs to be **Done on a smaller short dataset** before being run on a bigger dataset. * Any user who is part of the analysis can request a long train. Approval from the participating analyses PWGs conveners is required in order to submit a long train. +
- + Screenshot of long train derived type
* When requesting a long train, it is possible to request standard derived data from a short train with slim derived data by changing the derived data setting as shown above.
- + Screenshot of request long train
* Once the long train is approved: @@ -571,57 +566,61 @@ It is possible that a wagon test or train test will produce multiple warnings. I * Otherwise the Submit button is enabled and the operator can submit the train
- + Screenshot of long train approved
- + ## Producing performance graphs for a local O2 execution - + **Performance Graphs** page allows the user to upload his own local metrics file, and then generate the test graphs specific to that file. You produce a local _performanceMetrics.json_ by running the o2 workflow with the argument _--resources-monitoring 2_ which, in this example, produces monitoring information every 2 seconds. These are the same type of graphs produced in the _Test Graphs_ tab of the train run. This page can be accessed at: .
- +Screenshot of performance graphs
## Reproducing a train run on a local machine + A train test or a Grid train run can be redone on a local machine. This is useful to understand a problem better or to just reproduce some settings of a previous train. In order to do so, you need two general prerequisites: - * Download the `run_train.sh` script from [here](https://alimonitor.cern.ch/train-workdir/run_train.sh). Say this is placed in a folder `/my/path/`. - * Make sure `jq` is installed on your system. Type `jq` on the command prompt. If you get an error that the command was not found, you have to install it. This package is a system package on most systems (it has nothing to do with ALICE). Use Google if you need instructions for your specific operation system. - * Now the following command should work and give reasonable output: + +* Download the `run_train.sh` script from [here](https://alimonitor.cern.ch/train-workdir/run_train.sh). Say this is placed in a folder `/my/path/`. +* Make sure `jq` is installed on your system. Type `jq` on the command prompt. If you get an error that the command was not found, you have to install it. This package is a system package on most systems (it has nothing to do with ALICE). Use Google if you need instructions for your specific operation system. +* Now the following command should work and give reasonable output: + ```bash /my/path/run_train.sh --help ``` + To now run a specific train test or Grid run, you need to create a folder and put there two files: - * Download the `full_config.json` from the train test or Grid run - * Create a file `input_data.txt` in which you put the file paths of the data you want to process. You can either put the paths to files on AliEn or download the data locally and point to the local paths. Each line should contain one file. In order to take the same data as from a train test, you can check at the top of the `stdout.log` of a train test where you have the AliEn paths and also paths to download the files to your local machine. You then run: + +* Download the `full_config.json` from the train test or Grid run +* Create a file `input_data.txt` in which you put the file paths of the data you want to process. You can either put the paths to files on AliEn or download the data locally and point to the local paths. Each line should contain one file. In order to take the same data as from a train test, you can check at the top of the `stdout.log` of a train test where you have the AliEn paths and also paths to download the files to your local machine. You then run: + ```bash /my/path/run_train.sh --skip-perf ``` - ## Train slots per week -For a given analysis, every dataset has a train slots per week limit. This limit is shown in the dataset under 'Maximal train slots per analysis per week'. If an analyzer uses the same dataset across multiple analyses, the calculation (for the analyzer only) is the summed slots across analyses. +For a given analysis, every dataset has a train slots per week limit. This limit is shown in the dataset under 'Maximal train slots per analysis per week'. If an analyzer uses the same dataset across multiple analyses, the calculation (for the analyzer only) is the summed slots across analyses. These limits ensure fair usage of resources, and are calculated on a rolling basis. You may view how many slots have been used for a dataset from the wagon table in My Analyses:
- +Screenshot of train slots per user per analysis
- Trains may use more than one slot. The number of slots is calculated as the number of wagons from the analysis in the train, capped by the number of cores that the train runs with. The slots used per analysis may be viewed in the train 'Test - Full Test' tab, where also the time when the train will stop counting towards the quota is shown:
- +Screenshot of weekly slots
If a single user wagon needs more memory than available in a single core queue, it can still be composed by hyperloop to the two core queue but it will count as a **heavy wagon**. Heavy wagons count as two slots. These wagons are listed in red in the train 'Test - Per Wagon' tab:
- +Screenshot of heavy wagon
- ## Local merging scripts + [Here](https://github.com/romainschotter/HYRunByRunMerging/tree/main) is a repository containing scripts to download all output files from a Hyperloop train run by run, and to merge locally only the files associated to a given run list.