Alice Weekly Meeting: Software for Hardware Accelerators / PDP-SRC

Zoom Meeting ID
David Rohr
Useful links
Join via phone
Zoom URL
    • 10:00 AM 10:20 AM
      Discussion 20m
      Speakers: David Rohr (CERN), Ole Schmidt (CERN)

      Color code: (critical, news during the meeting: green, news from this week: blue, news from last week: purple, no news: black)

      High priority Framework issues:

      • Fix dropping lifetime::timeframe for good: Still pending: problem with CCDB objects getting lost by DPL leading to "Dropping lifetime::timeframe", saw at least one occation during SW validation.
        • Checked with Ernst, we still get such errors at EOR, since some process time out and do skip some TFs. Should deactivate that error message when the exit transition is active.
        • Gioulio: Related problem with multi-output proxy - to be checked - Status?
      • Start / Stop / Start: 2 problems on O2 side left:
          • All processes are crashing randomly (usually ~2 out of >10k) when restarting. Stack trace hints to FMQ.
          • TPC ITS matching QC crashing accessing CCDB objects. Not clear if same problem as above, or a problem in the task itself:
      • Stabilize calibration / fix EoS: New scheme: Still WiP.
      • Fix problem with ccdb-populator: no idea yet - since Ole left, someone else will have to take care.


      Other framework tickets:

      • We need to make progress with these tickets at some point...
      • TOF problem with receiving condition in tof-compressor:
      • Grafana metrics: Might want to introduce additional rate metrics that subtract the header overhead to have the pure payload: low priority.
      • Backpressure reporting when there is only 1 input channel: no progress:
      • Stop entire workflow if one process segfaults / exits unexpectedly. Tested again in January, still not working despite some fixes.
      • : FIX in PR, but has side effects which must also be fixed.
      • : Cannot override debug severity for tpc-tracker
      • : Improve DebugGUI information
      • : Better error message (or a message at all) when input missing
      • : Problem with 2 devices of the same name
      • : Usage of valgrind in external terminal: The testcase is currently causing a segfault, which is an unrelated problem and must be fixed first. Reproduced and investigated by Giulio.
      • Run getting stuck when too many TFs are in flight.
      • Reduce obsolete DPL metrics
      • Do not use string comparisons to derrive processor type, since is user-defined.
      • Found a reproducible crash (while fixing the memory leak) in the TOF compressed-decoder at workflow termination, if the wrong topology is running. Not critical, since it is only at the termination, and the fix of the topology avoids it in any case. But we should still understand and fix the crash itself. A reproducer is available.
      • Support in DPL GUI to send individual START and STOP commands.
      • Problem I mentioned last time with non-critical QC tasks and DPL CCDB fetcher is real. Will need some extra work to solve it. Otherwise non-critical QC tasks will stall the DPL chain when they fail.
      • DPL sending SHM metrics for all devices, not only input proxy:
      • Some improvements to ease debugging:


      Global calibration topics:

      • TPC IDC and SAC workflow issues to be reevaluated with new O2 at restart of data taking. Cannot reproduce the problems any more.


      Async reconstruction

      • Remaining oscilation problem: GPUs get sometimes stalled for a long time up to 2 minutes. Checking 2 things:
        • does the situation get better without GPU monitoring? --> Inconclusive
        • We can use increased GPU processes priority as a mitigation, but doesn't fully fix the issue.
      • ḾI100 GPU stuck problem will only be addressed after AMD has fixed the operation with the latest official ROCm stack.
      • Did some parameter tuning for async pp and PbPb workflow on EPNs:
        • Minor changes to pp workflow, particularly since 2023 data has shorter TFs, so we can have more TFs in flight.
          • Limiting factor for pp workflow is now the TPC time series, which is to slow and creates backpressure (costs ~20% performance on EPNs). Enabled multi-threading as recommended by Matthias - need to check if it works.


      EPN major topics:

      • Fast movement of nodes between async / online without EPN expert intervention.
        • 2 goals I would like to set for the final solution:
          • It should not be needed to stop the SLURM schedulers when moving nodes, there should be no limitation for ongoing runs at P2 and ongoing async jobs.
          • We must not lose which nodes are marked as bad while moving.
      • Interface to change SHM memory sizes when no run is ongoing. Otherwise we cannot tune the workflow for both Pb-Pb and pp:
        • Lubos to provide interface to querry current EPN SHM settings - ETA July 2023, Status?
      • Improve DataDistribution file replay performance, currently cannot do faster than 0.8 Hz, cannot test MI100 EPN in Pb-Pb at nominal rate, and cannot test pp workflow for 100 EPNs in FST since DD injects TFs too slowly. NO ETA
      • DataDistribution distributes data round-robin in absense of backpressure, but it would be better to do it based on buffer utilization, and give more data to MI100 nodes. Now, we are driving the MI50 nodes at 100% capacity with backpressure, and then only backpressured TFs go on MI100 nodes. This increases the memory pressure on the MI50 nodes, which is anyway a critical point.
      • TfBuilders should stop in ERROR when they lose connection.
      • Allow epn user and grid user to set nice level of processes:


      Other EPN topics:


      Raw decoding checks:

      • Add additional check on DPL level, to make sure firstOrbit received from all detectors is identical, when creating the TimeFrame first orbit.


      Full system test issues:

      Topology generation:

      • Should test to deploy topology with DPL driver, to have the remote GUI available.
        • DPL driver needs to implement FMQ state machine. Postponed until YETS issues solved.


      QC / Monitoring / InfoLogger updates:

      • CTF/RAW Size monitoring: status?


      AliECS related topics:

      • Extra env var field still not multi-line by default.


      GPU ROCm / compiler topics:

      • Found new HIP internal compiler error when compiling without optimization: -O0 make the compilation fail with unsupported LLVM intrinsic. Disappeared with ROCm 6.x
      • Found a new miscompilation with -ffast-math enabled in looper folllowing, for now disabled -ffast-math. Seems fixed with ROCm >= 5.5.
      • Must create new minimal reproducer for compile error when we enable LOG(...) functionality in the HIP code. Verified that this is not a bug in our code but internal compiler problem. AMD has a minimal reproducer.
      • Found another compiler problem with template treatment found by Ruben. Same problem as the previous one.
      • Debugging the calibration, debug output triggered another internal compiler error in HIP compiler. Same problem as the previous one.
      • ROCm 6.1 with custom compiler with additional fixes - Still trying to find a standalone reproducer for the crash in the FST.
        • Started running 8 1-GPU FSTs in parallel on the nodes. In that case, usually 0-2 of them crash immediately, with the others succeeding. So it seems to be some initialization problem.


      TPC GPU Processing

      • Bug in TPC QC with MC embedding, TPC QC does not respect sourceID of MC labels, so confuses tracks of signal and of background events.
      • New problem with bogus values in TPC fast transformation map still pending. Sergey is investigating, but waiting for input from Alex. Ruben reported that he still sees such bogus values.
      • Status of cluster error parameterizations
        • No progress yet on newly requested debug streamers.
        • Waiting for TPC to check PR with full cluster errors during seeding.
      • Problem with constraining TPC tracks to TPC volume. Fixed - taking into account  TPCFastTransform::getT0
      • TPC reported a problem with laser runs. In case of bad data (tpc data outside of the triggered drift time), GPUs sometimes can get stuck, so apparently the skipping of bad data is not fully working. Recorded some laser raw data to check.
      • Added an option to print all TPC configKeyValues to log file, printing only for the first pipeline instance.


      TPC processing performance regression:

      • O2/dev:
          • Total time: 4.695s, Track Fit Time 1.147s, Seeding Time 1.241s
        • O2/dev with commit from 4.3. reverted:
          • Total time 4.351s, Track Fit Time 1.089, Seeding Time 1.008s
        • For reference: before introduction of the V-Shape map:
          • Total time 3.8421s (didn't measure individual times)
        • O2/dev with scaling factors hard-coded to 0 (essentially using one single transformation map without any scaling):
          • Total time 3.093 Track Fit Time 0.682s Seeding Time 0.429s
      • Proposed 3 ideas to speed up the map access:
        1. We merge the maps on-the-fly to one combined map, and query only one map.
        2. We could add plenty of #ifdef in the code, to make sure that for online purposes all the code for the non-static map is not seen.
        3. We could try to optimize the code to make it easier for the compiler.
      • Outcome of meeting with TPC:
        • Sergey will implement a new fully flat map, and multiple existing maps will be merged into the new one.
          • This will give optimal performance for both sync and async.
          • It will also remove the memory overhead of having multiple maps in memory per process, since then we can use the flat maps from the SHM.
          • Timescale is ~September.
        • Meanwhile, I will add the possibility to remove the M/V-shape code with run time compilation, which should restore the performance from last November at P2 if we use RTC.


      General GPU Processing

      • Pending problems with using GPU RTC at P2:
        • /tmp is inside the slurm container and wiped afterwards. Fixed by using /var/tmp.
        • RTC is started from one of the GPU processes, which has a NUMA pinning to one NUMA domain, thus it uses only half of the CPU cores. Need to extend the CPU pinning for the compilation subprocesses.
        • RTC compiles for the architecturs of the original build, which is currently MI50/MI100, i.e. all nodes compile twice, which takes extra time. Need to add an option to select an architecture, and the topology generation must put in the setting for MI50 / MI100 architectures.
        • AMD compiler leaves stale temp folders, can avoid this by setting $TMPDIR.
        • RTC compilation fails in an online run since headers (e.g. <cmath>) are not found - Not understood yet.



      • Several oncall blocks open - also everyone will have to fill 1 more week this year (some people left, more days this year than anticipated).
        • 2 blocks free in August
        • all 4 blocks in September still free
        • 2 blocks in October free
        • physics group might tage 2 more blocks
        • Send around a mail with the current quota for everyone, ideally blocks should be taken by those who are behind.
    • 10:25 AM 10:30 AM
      TPC ML Clustering 5m
      Speaker: Christian Sonnabend (CERN, Heidelberg University (DE))

      NN clusterization in O2

      NN clusterization is fully implemented in O2 clusterization code. Initial performance tests will be shown today

      Classification + regression network make the processing on CPU about 3-4x slower in terms of wall time and have a much higher CPU utilization. My assumption: Currently the ONNX model is loaded once, but called applied on a per-peak level -> Overhead of the model->Run() function is significant (measured this some time ago). Expecting also much higher speed-up on GPU's and float16. Working on GPU framework: Lubos will make an old HLT node available with docker for the build. If that succeeds, I can probably proceed with a push to alidist relatively quickly.


      Comparison of the performance

      Distributions & matching

      Matching efficiency: 0.802463
      Clone rate: 0.541587
      Fake rate: 0.197537


      Differential analysis works on files from smaller dataset (1Ev 50kHz PbPb) but for larger files I get:

      [INFO] reading 1 data branch(es) and 1 mc branch(es)
      Error in <TBufferFile::CheckByteCount>: object of class vector<char> read too many bytes: 1349358918 instead of 275617094
      Warning in <TBufferFile::CheckByteCount>: vector<char>::Streamer() not in sync with data on file /lustre/alice/users/csonnab/PhD/jobs/simulation/sim_data/validation/o2sim_150324_50Ev_10000QED_PbPb_13t7p/tracks_clusters_nn_withcuts/regular_reco/tpc-native-clusters.root, fix Streamer()
    • 10:30 AM 10:35 AM
      ITS Tracking 5m
      Speaker: Matteo Concas (CERN)
    • 10:35 AM 10:55 AM
      TPC Track Model Decoding on GPU 20m
      Speaker: Gabriele Cimador (Universita e INFN Trieste (IT))