Skip to main content

ODOP Engine in HPC

Project description

ODOP - Opportunistic Data Operations Platform

Overview

ODOP is a framework supporting the developer/scientist to explore free resources allocated for their long running applications to carry out data operations in an opportunistic manner. The key idea is that applications can be annotated with functions for data operations, such as moving files, lightweight data analysis and ML, to be executed when resources are free during the run of the main applications. Usually these operations must be done after the long-running application finished.

ODOP Concept

The following publication provides a high overview of ODOP:

Minh-Tri Nguyen, Anh-Dung Nguyen, Jarno Rantaharju, Touko Puro, Matthias Rheinhardt, Maarit Korpi-Lagg, Hong-Linh Truong, "Supporting Opportunistic Data Operations for Data-Intensive Computational Applications (download PDF), 2024 IEEE International Conference on Big Data (BigData), Washington, DC, USA, 2024, pp. 3735-3744, doi: 10.1109/BigData62323.2024.10826079.

Currently ODOP is mainly tested with applications executed atop LUMI.

ODOP Architecture

  • OpObservability
  • OpSchedule
  • OpEngine

API documentation

https://rdsea.github.io/odop

Quickstart

  1. Clone this repo and install the Odop package:

    cd odop
    pip install .
    
  2. Annotate which function that you want to run opportunistically in the source code. The simplest task only needs name and trigger. We support many other parameter that can help with the scheduling and execution which can be found in the docs

    import odop
    
    @odop.task(
          name="optask_name",
          trigger="file_updated",
          file_path="data/file_updated",
    )
    def function():
       # your function implementation
    
  3. Start Odop in your main function. Here we assume the all source code is under the same directory and odop will automatically scan the optask and run it opportunistically in concurrent with the main function.

    import odop
    
    if __name__=="__main__":
       odop.start(run_name="run_1")
       #Your main function here
       ...
       odop.stop()
    

Options

  1. Odop path
  • Odop stores task information, and observability data in the Odop path. The default Odop path is $HOME/.odop. This can be set using the ODOP_PATH variable.
    export ODOP_PATH=$HOME/odop/odop/odop_obs/
    
  1. The search path for opportunistic tasks can be given as a parameter if the opportunistica task is not in the same directory as the main function

    odop.start(run_name="run_1", task_folder="./local_task_folder")
    
  2. The path to the configuration file can be provided directly as a parameter to odop.start.

    odop.start(run_name="run_1", config_file="odop_conf.yaml")
    
  3. It is possible to monitor the application without starting all the components of odop. This does not scan for opportunities and only monitors the application

    from odop.odop_obs import OdopObs
    from odop.common import ODOP_PATH
    
    odop_obs = OdopObs(config_path=ODOP_PATH + "config/odop_conf.yaml")
    odop_obs.start()
    
    #Your computation here
    ...
    
    odop_obs.stop()
    

Examples

Further examples can be found in the examples folder. examples/run_odop.py contains another example of running odop with while simulating an HPC workload. examples/run_monitoring.py shows how to run the only the monitoring module.

Building the Documentation

  1. Requirement:
  • Python > 3.6
  • sphinx
  • sphinx_rtd_theme
  • myst_parser
pip install -e ".[docs]"
  1. Make document
cd $ODOP_PATH/docs
make html
  1. Start document server
cd _build/html
python -m http.server

Testing

  • The examples in the examples folder can be run as integration tests.

  • Running unit tests requires installing additional dependencies:

    pip install ".[dev]"
    

    To run the tests use

    pytest
    

Acknowledgment

This work has received funding from the European HighPerformance Computing Joint Undertaking (JU) under grant agreement No 101118139. W

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

odop-0.0.1.tar.gz (37.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

odop-0.0.1-py3-none-any.whl (50.5 kB view details)

Uploaded Python 3

File details

Details for the file odop-0.0.1.tar.gz.

File metadata

  • Download URL: odop-0.0.1.tar.gz
  • Upload date:
  • Size: 37.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.14

File hashes

Hashes for odop-0.0.1.tar.gz
Algorithm Hash digest
SHA256 803a12efb3b78949a51e2f0f3c07889e774d00bf5045f96f2e10031713f7d2be
MD5 801b5f01d291efd6ded1a7c030c6a116
BLAKE2b-256 4b882a3094e0f98dcd27f5f150b7aec46645418bbfeefb5d8cb5253306d5cc22

See more details on using hashes here.

File details

Details for the file odop-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: odop-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 50.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.14

File hashes

Hashes for odop-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 62da69b5394c8834df48a6cec4e72ad47ac98e95614209fd5db56c0495ae383f
MD5 24c3c47f02071d13d373b19ec8693cd4
BLAKE2b-256 d21896a83f2aec2b1ce0812eed6c2e53b845002f1982feecfa57c0d40657d09f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page