• Stars
    star
    121
  • Rank 293,924 (Top 6 %)
  • Language
    Python
  • License
    MIT License
  • Created about 5 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Machine Learning for HPC Workflows

Python versions License Activity Issues Pull requests Language grade: Python

Merlin

A brief introduction to Merlin

Merlin is a tool for running machine learning based workflows. The goal of Merlin is to make it easy to build, run, and process the kinds of large scale HPC workflows needed for cognitive simulation.

At its heart, Merlin is a distributed task queuing system, designed to allow complex HPC workflows to scale to large numbers of simulations (we've done 100 Million on the Sierra Supercomputer).

Why would you want to run that many simulations? To become your own Big Data generator.

Data sets of this size can be large enough to train deep neural networks that can mimic your HPC application, to be used for such things as design optimization, uncertainty quantification and statistical experimental inference. Merlin's been used to study inertial confinement fusion, extreme ultraviolet light generation, structural mechanics and atomic physics, to name a few.

How does it work?

In essence, Merlin coordinates complex workflows through a persistent external queue server that lives outside of your HPC systems, but that can talk to nodes on your cluster(s). As jobs spin up across your ecosystem, workers on those allocations pull work from a central server, which coordinates the task dependencies for your workflow. Since this coordination is done via direct connections to the workers (i.e. not through a file system), your workflow can scale to very large numbers of workers, which means a very large number of simulations with very little overhead.

Furthermore, since the workers pull their instructions from the central server, you can do a lot of other neat things, like having multiple batch allocations contribute to the same work (think surge computing), or specialize workers to different machines (think CPU workers for your application and GPU workers that train your neural network). Another neat feature is that these workers can add more work back to central server, which enables a variety of dynamic workflows, such as may be necessary for the intelligent sampling of design spaces or reinforcement learning tasks.

Merlin does all of this by leveraging some key HPC and cloud computing technologies, building off open source components. It uses maestro to provide an interface for describing workflows, as well as for defining workflow task dependencies. It translates those dependencies into concrete tasks via celery, which can be configured for a variety of backend technologies (rabbitmq and redis are currently supported). Although not a hard dependency, we encourage the use of flux for interfacing with HPC batch systems, since it can scale to a very large number of jobs.

The integrated system looks a little something like this:

a typical Merlin workflow

In this example, here's how it all works:

  1. The scientist describes her HPC workflow as a maestro DAG (directed acyclic graph) "spec" file workflow.yaml
  2. She then sends it to the persistent server with merlin run workflow.yaml . Merlin translates the file into tasks.
  3. The scientist submits a job request to her HPC center. These jobs ask for workers via the command merlin run-workers workflow.yaml.
  4. Coffee break.
  5. As jobs stand up, they pull work from the queue, making calls to flux to get the necessary HPC resources.
  6. Later, workers on a different allocation, with GPU resources connect to the server and contribute to processing the workload.

The central queue server deals with task dependencies and keeps the workers fed.

For more details, check out the rest of the documentation.

Need help? [email protected]

Quick Start

Note: Merlin supports Python 3.6+.

To install Merlin and its dependencies, run:

$ pip3 install merlin

Create your application config file:

$ merlin config

That's it.

To run something a little more like what you're interested in, namely a demo workflow that has simulation and machine learning, first generate an example workflow:

$ merlin example feature_demo

Then install the workflow's dependencies:

$ pip install -r feature_demo/requirements.txt

Then process the workflow and create tasks on the server:

$ merlin run feature_demo/feature_demo.yaml

And finally, launch workers that can process those tasks:

$ merlin run-workers feature_demo/feature_demo.yaml

Documentation

Full documentation is available, or run:

$ merlin --help

(or add --help to the end of any sub-command you want to learn more about.)

Code of Conduct

Please note that Merlin has a Code of Conduct. By participating in the Merlin community, you agree to abide by its rules.

License

Merlin is distributed under the terms of the MIT LICENSE.

LLNL-CODE-797170

More Repositories

1

zfp

Compressed numerical arrays that support high-speed random access
C++
668
star
2

sundials

Official development repository for SUNDIALS - a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers. Pull requests are welcome for bug fixes and minor changes.
C
515
star
3

RAJA

RAJA Performance Portability Layer (C++)
C++
458
star
4

Caliper

Caliper is an instrumentation and performance profiling library
C++
345
star
5

Umpire

An application-focused API for memory management on NUMA & GPU architectures
C++
315
star
6

blt

A streamlined CMake build system foundation for developing HPC software
C++
253
star
7

lbann

Livermore Big Artificial Neural Network Toolkit
C++
223
star
8

SAMRAI

Structured Adaptive Mesh Refinement Application Infrastructure - a scalable C++ framework for block-structured AMR application development
C++
214
star
9

hiop

HPC solver for nonlinear optimization problems
C++
210
star
10

conduit

Simplified Data Exchange for HPC Simulations
C++
207
star
11

libROM

Data-driven model reduction library with an emphasis on large scale parallelism and linear subspace methods
C++
201
star
12

magpie

Magpie contains a number of scripts for running Big Data software in HPC environments, including Hadoop and Spark. There is support for Lustre, Slurm, Moab, Torque. LSF, Flux, and more.
Shell
193
star
13

HPC-Tutorials

Future home of hpc-tutorials.llnl.gov
C
188
star
14

units

A run-time C++ library for working with units of measurement and conversions between them and with string representations of units and measurements
C++
140
star
15

maestrowf

A tool to easily orchestrate general computational workflows both locally and on supercomputers
Python
133
star
16

serac

Serac is a high order nonlinear thermomechanical simulation code
C++
120
star
17

axom

CS infrastructure components for HPC applications
C++
110
star
18

UnifyFS

UnifyFS: A file system for burst buffers
C
106
star
19

ior

Parallel filesystem I/O benchmark
C
105
star
20

umap

User-space Page Management
C++
104
star
21

CHAI

Copy-hiding array abstraction to automatically migrate data between memory spaces
C++
104
star
22

cowc

Cars Overhead With Context related scripts described in Mundhenk et al. 2016 ECCV.
Python
104
star
23

scr

SCR caches checkpoint data in storage on the compute nodes of a Linux cluster to provide a fast, scalable checkpoint / restart capability for MPI codes.
C
99
star
24

LULESH

Livermore Unstructured Lagrangian Explicit Shock Hydrodynamics (LULESH)
C++
97
star
25

msr-safe

Allows safer access to model specific registers (MSRs)
C
92
star
26

RAJAPerf

RAJA Performance Suite
C++
90
star
27

FAST

Fusion models for Atomic and molecular STructures (FAST)
Python
89
star
28

shroud

Shroud: generate Fortran and Python wrappers for C and C++ libraries
C++
87
star
29

MacPatch

Software & Patch management for macOS
Objective-C
85
star
30

Aluminum

High-performance, GPU-aware communication library
C++
84
star
31

mpiP

A light-weight MPI profiler.
C
79
star
32

yorick

yorick interpreted language
C
78
star
33

camp

Compiler agnostic metaprogramming library providing concepts, type operations and tuples for C++ and cuda
C++
78
star
34

fpzip

Lossless compressor of multidimensional floating-point arrays
C++
75
star
35

GOTCHA

GOTCHA is a library for wrapping function calls in shared libraries
C
68
star
36

dataracebench

Data race benchmark suite for evaluating OpenMP correctness tools aimed to detect data races.
C
67
star
37

variorum

Vendor-neutral library for exposing power and performance features across diverse architectures
C++
67
star
38

STAT

STAT - the Stack Trace Analysis Tool
C
63
star
39

lmt

Lustre Monitoring Tools
C
62
star
40

pyranda

A Python driven, Fortran powered Finite Difference solver for arbitrary hyperbolic PDE systems. This is the mini-app for the Miranda code.
Fortran
61
star
41

spheral

C++
60
star
42

Abmarl

Agent Based Modeling and Reinforcement Learning
Python
56
star
43

pylibROM

Python interface for libROM, library for reduced order models
Python
56
star
44

ExaCA

Cellular automata code for alloy nucleation and solidification written with Kokkos
C++
56
star
45

lustre

LLNL's branches of Lustre
C
55
star
46

metall

Persistent memory allocator for data-centric analytics
C++
53
star
47

libmsr

Wrapper library for model-specific registers. APIs cover RAPL, performance counters, clocks and turbo.
C
52
star
48

H5Z-ZFP

A registered ZFP compression plugin for HDF5
C
50
star
49

mpiBench

MPI benchmark to test and measure collective performance
C
50
star
50

cardioid

Cardiac simulation toolkit.
C++
49
star
51

scraper

Python library for getting metadata from source code hosting tools
Python
49
star
52

llnl.github.io

Public home for LLNL software catalog
JavaScript
48
star
53

mttime

Time Domain Moment Tensor Inversion in Python
Python
45
star
54

quandary

Optimal control for open quantum systems
C++
45
star
55

LaSDI

Jupyter Notebook
45
star
56

GridDyn

GridDyn is an open-source power transmission simulation software package
C++
45
star
57

qball

Qball (also known as qb@ll) is a first-principles molecular dynamics code that is used to compute the electronic structure of atoms, molecules, solids, and liquids within the Density Functional Theory (DFT) formalism. It is a fork of the Qbox code by Francois Gygi.
C++
45
star
58

mgmol

MGmol is a scalable O(N) First-Principles Molecular Dynamics code that is capable of performing large-scale electronics structure calculations and molecular dynamics simulations of atomistic systems.
C++
44
star
59

Juqbox.jl

Juqbox.jl solves quantum optimal control problems in closed quantum systems
Julia
42
star
60

ExaConstit

A crystal plasticity FEM code that runs on the GPU
C++
41
star
61

unum

Universal Number Library
C
40
star
62

fastcam

A toolkit for efficent computation of saliency maps for explainable AI attribution. This tool was developed at Lawrence Livermore National Laboratory.
Jupyter Notebook
39
star
63

DJINN

Deep jointly-informed neural networks -- as easy-to-use algorithm for designing/initializing neural nets
Python
39
star
64

CxxPolyFit

A simple library for producing multidimensional polynomial fits for C++
Fortran
37
star
65

cruise

User space POSIX-like file system in main memory
C
35
star
66

Kripke

Kripke is a simple, scalable, 3D Sn deterministic particle transport code
C++
35
star
67

UEDGE

2D fluid simulation of plasma and neutrals in magnetic fusion devices
Fortran
34
star
68

wrap

MPI wrapper generator, for writing PMPI tool libraries
Python
34
star
69

acrotensor

A C++ library for computing large scale tensor contractions.
C++
34
star
70

AMPE

Adaptive Mesh Phase-field Evolution
C++
34
star
71

MACSio

A Multi-purpose, Application-Centric, Scalable I/O Proxy Application
C
34
star
72

zero-rk

Zero-order Reaction Kinetics (Zero-RK) is a software package that simulates chemically reacting systems in a computationally efficient manner.
C++
33
star
73

ddcMD

A fully GPU-accelerated molecular dynamics program for the Martini force field
C
33
star
74

GPLaSDI

Python
32
star
75

Quicksilver

A proxy app for the Monte Carlo Transport Code, Mercury. LLNL-CODE-684037
C++
32
star
76

mpibind

Pragmatic, Productive, and Portable Affinity for HPC
C
32
star
77

FPChecker

A dynamic analysis tool to detect floating-point errors in HPC applications.
Python
31
star
78

CallFlow

Visualization tool for analyzing call trees and graphs
Vue
30
star
79

FGPU

Fortran
30
star
80

graphite

A repository for implementing graph network models based on atomic structures.
Jupyter Notebook
30
star
81

ygm

C++
29
star
82

AMG

Algebraic multigrid benchmark
C
28
star
83

gLaSDI

Python
28
star
84

Silo

Mesh and Field I/O Library and Scientific Database
C
28
star
85

CARE

CHAI and RAJA provide an excellent base on which to build portable codes. CARE expands that functionality, adding new features such as loop fusion capability and a portable interface for many numerical algorithms. It provides all the basics for anyone wanting to write portable code.
C++
28
star
86

hatchet

Graph-indexed Pandas DataFrames for analyzing hierarchical performance data
JavaScript
28
star
87

burstfs

C
27
star
88

ravel

Ravel MPI trace visualization tool
C++
27
star
89

mpiGraph

MPI benchmark to generate network bandwidth images
Perl
27
star
90

macc

Robust neural network surrogate for inertial confinement fusion
Python
26
star
91

benchpark

An open collaborative repository for reproducible specifications of HPC benchmarks and cross site benchmarking environments
Python
26
star
92

Tribol

Modular interface physics library featuring state-of-the-art contact physics methods.
C++
25
star
93

uberenv

Automates using spack to build and deploy software
Shell
25
star
94

havoqgt

C++
25
star
95

muster

Massively Scalable Clustering
C++
23
star
96

MemAxes

Interactive Visualization of Memory Access Samples
C++
23
star
97

cram

Tool to run many small MPI jobs inside of one large MPI job.
Python
23
star
98

MuyGPyS

A fast, pure python implementation of the MuyGPs Gaussian process realization and training algorithm.
Python
23
star
99

mdtest

Used for testing the metadata performance of a file system
C
23
star
100

SoRa

SoRa uses genetic programming to find mathematical representations from experimental data
Python
23
star