maple

Wrapper over containerization services to manage and deploy containers for scientific computing workflows

https://github.com/akashdhruv/maple

Science Score: 31.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
  • .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (18.4%) to scientific vocabulary
Last synced: 10 months ago · JSON representation ·

Repository

Wrapper over containerization services to manage and deploy containers for scientific computing workflows

Basic Info
Statistics
  • Stars: 2
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created over 5 years ago · Last pushed over 2 years ago
Metadata Files
Readme License Citation

README.rst

.. |icon| image:: ./media/icon.svg
  :width: 30
  
============  
|icon| Maple
============

|Code style: black|

|BubbleBox| |FlashX| |FlowX| |Minimal|

Maple is a productivity tool that acts a wrapper around docker, podman, and singularity containerization services to provide a seamless interface to deploy High Performance Computing (HPC) applications on cloud and supercomputing platforms. It comprises a python based library and command line interface to manage developer and production environment for running complex multiphysics simulations.

Open-source tools for numerical simulation of partical engineering problems provide state-of-art methods and techniques, and undergo continous development for accuracy and performance on modern computing architectures. Accessibility of these tools for core industry users has been a challenge due to the presence of complexities associated with setting up desired problems with external dependencies. Consider the problem illustrated below where a backend developer for an open-source simulation tool manages/creates images for application users, who in turn can customize it for their specific use case. Maple can be used to manage/deploy this workflow.

|fig1|

Another important aspect that Maple aims to address is the reproducibility in research and development. As illustrated below, a scientist can publish software images using Maple to allow their peers to: (1) Reproduce their research datasets (2) Work with existing datasets to gain more insight. Maple aims to make the process of publishing/use of images organized and systematic.

|fig2|
    
Tutorial
========

The link below provides an overiew of Maple within the context of Flash-X (https://flash-x.org), a multiphysics simulation software instrument. Some of the details maybe be outdated, but we are working on updating the tutorial.

|Tutorial|

Installation
============

Stable releases of Maple are hosted on Python Package Index website (``_) and can be installed by executing,

::

   pip install PyMaple
   
Note that ``pip`` should point to ``python3+`` installation package ``pip3``. 

Upgrading and uninstallation is easily managed through this interface using,

::

   pip install --upgrade PyMaple
   pip uninstall PyMaple

There maybe situations where users may want to install Maple in development mode $\\textemdash$ to design new features, debug, or customize options/commands to their needs. This can be easily accomplished using the ``setup`` script located in the project root directory and executing,

::

   ./setup develop

Development mode enables testing of features/updates directly from the source code and is an effective method for debugging. Note that the ``setup`` script relies on ``click``, which can be installed using,

::

  pip install click

The ``maple`` script is installed in ``$HOME/.local/bin`` directory and therfore the environment variable, ``PATH``, should be updated to include this location for command line use.

Dependencies
============

``click`` ``toml`` ``docker`` ``singularity`` ``podman``

Writing a Maplefile
===================

Maplefile is a TOML configuration file that is placed in a project root directory. Location of the Maplefile marks the directory which will be mounted inside container,

::

  $ tree Flash-X
  
  ├── bin 
  ├── docs  
  ├── LICENSE
  ├── NOTICE
  ├── RELEASE
  ├── sites
  ├── tools
  ├── container
  ├── lib
  ├── Maplefile
  ├── README.md
  ├── setup
  ├── source

The example above shows the directory tree for Flash-X, which contains a Maplefile along with files/folders that comprise the project. The corresponding Maplefile looks like,

.. code-block:: python
  
  # Maplefile for Flash-X

  # Base Image
  base = "akashdhruv/amrex:ppc64le"

  # Platform
  platform = "linux/ppc64le"

  # Name of the container/image
  container = "flashx"

  # MPI path from host
  mpi = "/path/to/host/mpi"

  # Commands for building local image
  # from base image, and installing dependencies
  build = [
    "dnf install ", 
    "pip install ", 
  ]

  # Commands to execute inside the container
  # using the current mount directory and
  # update the local image
  publish = [
    "./setup  ", 
    "make && cp  ", 
  ]

  # Backend for service
  # docker/singularity/podman
  backend = "podman"
  
Image versus Container
======================

Following is how Maple differentiates between an Image and a Container:

- Image

    Blueprint for running containers, provides environment to work with code/data in working directory

- Container

    Instance of an image

    Interacts with an image by mounting data/code from working directory

    Writes data to working directory when running applications from an image

    Updates an image using data/code from working directory


Usage
=====

- Build a local image from base image

    ``maple image build --base=``
- Activate local container from an image

    ``maple container pour --image=``
- Step inside container shell

    ``maple container shell``
    
- Save changes from a local container to an image

    ``maple container commit --image=`` 

- Stop and delete local container

    ``maple container rinse``

- Prune redundant layers from a local image (reduce size)

    ``maple image squash --image=``

- Launch an ipython notebook inside the container

    ``maple container notebook --image= --port=``

- Run commands inside the container

    ``maple container run --image= "echo Hello World!"``

- Delete containers

    ``maple container rinse   ``

- Delete images

    ``maple image delete   ``

-  Remote interface 

    ``maple pull ``
    
    ``maple push ``

Citation
========

::

  @software{akash_dhruv_2022_7255622,
    author       = {Akash Dhruv},
    title        = {akashdhruv/Maple: October 2022},
    month        = oct,
    year         = 2022,
    publisher    = {Zenodo},
    version      = {22.10},
    doi          = {10.5281/zenodo.7255622},
    url          = {https://doi.org/10.5281/zenodo.7255622}
  }

.. |Code style: black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
   :target: https://github.com/psf/black
   
.. |BubbleBox| image:: https://github.com/akashdhruv/Maple/workflows/BubbleBox/badge.svg
.. |FlashX| image:: https://github.com/akashdhruv/Maple/workflows/FlashX/badge.svg
.. |FlowX| image:: https://github.com/akashdhruv/Maple/workflows/FlowX/badge.svg
.. |Minimal| image:: https://github.com/akashdhruv/Maple/workflows/Minimal/badge.svg

.. |Tutorial| image:: http://img.youtube.com/vi/gNmVtj7-RBY/0.jpg
   :target: http://www.youtube.com/watch?v=gNmVtj7-RBY
   
.. |fig1| image:: ./media/maple-use-1.png
    :width: 450px
    
.. |fig2| image:: ./media/maple-use-2.png
    :width: 450px

.. |nbsp|   unicode:: U+00A0 .. NO-BREAK SPACE

Owner

  • Name: Akash Dhruv
  • Login: akashdhruv
  • Kind: user
  • Location: Chicago, IL
  • Company: Argonne National Laboratory

Citation (CITATION)

# Citation here

GitHub Events

Total
Last Year

Dependencies

.github/workflows/bubblebox.yml actions
  • ./.github/actions/install * composite
  • actions/checkout v2 composite
  • docker/login-action v1 composite
.github/workflows/flashx.yml actions
  • ./.github/actions/install * composite
  • actions/checkout v2 composite
  • eWaterCycle/setup-singularity v7 composite
.github/workflows/flowx.yml actions
  • ./.github/actions/install * composite
  • actions/checkout v2 composite
  • docker/login-action v1 composite
.github/workflows/minimal.yml actions
  • ./.github/actions/install * composite
  • actions/checkout v2 composite
  • eWaterCycle/setup-singularity v7 composite