Open MOdeL Experiment

Mathieu Leclaire
Romain Reuillon
Jonathan Passerat-Palmbach

Context

  • Complex-system community
  • Various scientific fields
  • Bring Distributed Computing / HPC resources to researchers


/ Application

/ Program

/ Call it whatever you want

/ (stuff taking inputs and producing outputs)

Embed a model (/ application) as a black box

Zero deployment approach

  • The code is the user's code, not a web service
  • User code is automatically deployed at runtime
  • Ships to remote environment
  • No prior knowledge of remote environment needed
  • No installation required on any machine

Portable code ... or not

Codes running on JVM (Java, Scala, Netlogo)

And others ... C, C++, Python, R, Fortran, Octave, Scilab, Haskell, OCaml, etc

Packaging an application with Care

Applications have dependencies:
  • Shared libraries
  • Packages (Python, R, ...)
  • Low level system calls
  • Environment variables
  • ...

Capture these dependencies and transfer along with the application from Linux to Linux

Distributed execution of (almost) any program to (pretty much) any computing environment in 3 simple steps


  • Package it with CARE* ⇒ execute it on linux
  • Write your OpenMOLE workflow
  • Click the run button


* http://reproducible.io

Parameter tuning

Classic methods:

  • Grid Search
  • Random sampling
  • Latin Hypercube
  • ...

Not very dynamic

Let's do some serious experiments



Sensitivity analysis: Profiles



Reverse problems: Genetic algorithms



Pattern Space Exploration



Powered by EGI

(and others)

Naturally parallel formalism to design experiments: a workflow



A workflow


val i   = Val[Double]        
val res = Val[Double]        

val exploration = ExplorationTask ( i in (0.0 to 10.0 by 1.0) )

val model = 
  ScalaTask ("val res = i * 2") set (
    inputs  += i,
    outputs += (i, res)
  )
  
val env = LocalEnvironment(5)

val ex = exploration -< (model on env) start
        

Same workflow on the Grid !


val i   = Val[Double]        
val res = Val[Double]        

val exploration = ExplorationTask ( i in (0.0 to 10.0 by 1.0) )

val model = 
  ScalaTask ("val res = i * 2") set (
    inputs  += i,
    outputs += (i, res)
  )
  
val env = EGIEnvironment("biomed")

val ex = exploration -< (model on env) start
        

That's what we call usable HPC :)

Demo time?

OpenMOLE for all communities, for all languages



OpenMOLE is neither dedicated to a scientific field nor to a language


  • Chromosome structuring: Neuro Sciences, C++
  • The SimTRAP project: Social Sciences, Netlogo
  • The SimPOP project: Geography, Scala
  • The BioEmergence project: Biology, C

Useful Links

Documentation www.openmole.org
Mailing-list list.openmole.org
Development version next.openmole.org
Source code github.com/openmole
Market place github.com/openmole-market

Thanks!

romain.reuillon@iscpif.fr
mathieu.leclaire@iscpif.fr
j.passerat-palmbach@imperial.ac.uk