high performance computational experiments with swift/t justin m. wozniak, argonne national...

68
High Performance Computational Experiments with Swift/T Justin M. Wozniak <[email protected]>, Argonne National Laboratory & The University of Chicago http://swift-lang.org/Swift-T Utility & Cloud Computing – December 8, 2015

Upload: ambrose-thomas

Post on 19-Jan-2016

217 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

High Performance Computational Experiments with Swift/T

Justin M. Wozniak <[email protected]>,

Argonne National Laboratory & The University of Chicagohttp://swift-lang.org/Swift-T

Utility & Cloud Computing – December 8, 2015

Page 2: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

The Scientific Computing Campaign

Swift addresses most of these components

2

THINK about what to run next

RUN a battery of tasks

COLLECT results

IMPROVE methods and

codes

Page 3: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Goals of the Swift language

Swift was designed to handle many aspects of the computing campaign

Ability to integrate many application components into a new workflow application

Data structures for complex data organization Portability- separate site-specific configuration from application logic Logging, provenance, and

plotting features

Today, we will focus on supporting multiple language applications at large scale

3

THINK RUN

COLLECTIMPROVE

Page 4: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

SWIFT OVERVIEWBig picture

Page 5: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

5

Swift programming model:all progress driven by concurrent dataflow

F() and G() implemented in native code or external programs F() and G()run in concurrently in different processes r is computed when they are both done This parallelism is automatic Works recursively throughout the program’s call graph

(int r) myproc (int i, int j){ int x = F(i); int y = G(j); r = x + y;}

Page 6: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

6

Swift programming model

Data typesint i = 4;string s = "hello world";file image<"snapshot.jpg">;

Shell accessapp (file o) myapp(file f, int i){ mysim "-s" i @f @o; }

Structured datatypedef image file;image A[];type protein_run {

file pdb_in; file sim_out;}bag<blob>[] B;

Conventional expressionsif (x == 3) { y = x+2; s = strcat("y: ", y);}

Parallel loopsforeach f,i in A { B[i] = convert(A[i]);}

Data flowmerge(analyze(B[0], B[1]), analyze(B[2], B[3]));

Swift: A language for distributed parallel scripting, J. Parallel Computing, 2011

Page 7: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

7

Hierarchical programming model

Top-level dataflow scriptuser-workflow.swift

Distributed dataflow evaluationData dependency resolution

Work stealing / load balancing

SWIG-generated wrappers

C C++ Fortran

User libraries

MPI

MPI?

Page 8: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Support calls to embedded interpreters

8

We have plugins for Python, R, Tcl, Julia, and QtScript

Page 9: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Write site-independent scripts Automatic parallelization and data movement Run native code, script fragments as applications Rapidly subdivide large partitions for

MPI jobs Move work to data locations

9

www.ci.uchicago.edu/swift www.mcs.anl.gov/exm

Swift control process

Swift control process

Swift/T control process

Swift worker process

C C++

Fortran

C C++

Fortran

C C++ Fortran

MPI

Swift/T worker

64K cores of Blue Waters2 billion Python tasks14 million Pythons/s

Swift/T: Enabling high-performance workflows

Page 10: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

10

Using Swift/Python/Numpy

global const string numpy = "from numpy import *\n\n"; typedef matrix string;

(matrix A) eye(int n) { command = sprintf("repr(eye(%i))", n); code = numpy+command; matrix t = python(code); A = replace_all(t, "\n", "", 0); }

(matrix R) add(matrix A1, matrix A2) { command = sprintf("repr(%s+%s)", A1, A2); code = numpy+command; matrix t = python(code); R = replace_all(t, "\n", "", 0); }

a1 = eye(3); a2 = eye(3); sum = add(a1, a2); printf("2*eye(3)=%s", sum);

Page 11: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Fully parallel evaluation of complex scripts

11

int X = 100, Y = 100;int A[][];int B[];foreach x in [0:X-1] { foreach y in [0:Y-1] { if (check(x, y)) { A[x][y] = g(f(x), f(y)); } else { A[x][y] = 0; } } B[x] = sum(A[x]);}

Page 12: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Centralized evaluation can be a bottleneckat extreme scales

12

Had this (Swift/K): For extreme scale, we need (Swift/T):

Page 13: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

MPI: The Message Passing Interface

Programming model used on large supercomputers Can run on many networks, including sockets, or

shared memory Standard API for C and Fortran, other languages have

working implementations Contains communication calls for

– Point-to-point (send/recv)– Collectives (broadcast, reduce, etc.)

Interesting concepts– Communicators: collections of

communicating processing and a context

– Data types: Language-independent data marshaling scheme

13

Page 14: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

ADLB: Asynchronous Dynamic Load Balancer An MPI library for master-worker

workloads in C Uses a variable-size, scalable

network of servers Servers implement

work-stealing The work unit is a byte array Optional work priorities, targets, types

For Swift/T, we added:– Server-stored data– Data-dependent execution– Tcl bindings!

14

Servers

Workers

• Lusk et al. More scalability, less pain: A simple programming model and its implementation for extreme computing. SciDAC Review 17, 2010.

Page 15: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

One Swift server core per node:

16 n

ode

job

Flexible placement of server ranks in a Swift/T job

Four Swift nodes for the job:

16 n

ode

job

Page 16: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

A[3] = g(A[2]);

Example distributed execution

Code

Evaluate dataflow operations

Workers: execute tasks

16

A[2] = f(getenv(“N”));

• Perform getenv()• Submit f

• Process f• Store A[2]

• Subscribe to A[2]• Submit g

• Process g• Store A[3]

Task put Task put

Notification

• Wozniak et al. Turbine: A distributed-memory dataflow engine for high performance many-task applications. Fundamenta Informaticae 128(3), 2013

Task get Task get

Page 17: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Swift/T-specific features

Task locality: Ability to send a task to a process– Allows for big data –type applications– Allows for stateful objects to remain resident in the workflow– location L = find_data(D);

int y = @location=L f(D, x); Data broadcast Task priorities: Ability to set task priority

– Useful for tweaking load balancing Updateable variables

– Allow data to be modified after its initial write– Consumer tasks may receive original or updated values when they emerge

from the work queue

17

Wozniak et al. Language features for scalable distributed-memory dataflow computing. Proc. Dataflow Execution Models at PACT, 2014.

Page 18: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Swift/T: scaling of trivial foreach { } loop 100 microsecond to 10 millisecond taskson up to 512K integer cores of Blue Waters

18

Page 19: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Swift/T application benchmarkson Blue Waters

19

Page 20: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Swift/T Compiler and Runtime

STC translates high-level Swiftexpressions into low-level Turbine operations:

20

– Create/Store/Retrieve typed data– Manage arrays– Manage data-dependent tasks

• Wozniak et al. Large-scale application composition via distributed-memory data flow processing. Proc. CCGrid 2013.

• Armstrong et al. Compiler techniques for massively scalable implicit task parallelism. Proc. SC 2014.

Page 21: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

x = g();if (x > 0) { n = f(x); foreach i in [0:n-1] { output(p(i)); }}

Swift code in dataflow

Dataflow definitions create nodes in the dataflow graph Dataflow assignments create edges In typical (DAG) workflow languages, this forms a static graph In Swift, the graph can grow dynamically – code fragments are evaluated

(conditionally) as a result of dataflow In its early implementation, these fragments were just tasks

21

x = g();

x

n

foreach i … { output(p(i));

if (x > 0) { n = f(x); …

Page 22: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Swift/T

http://swift-lang.org

Page 23: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Swift/T optimization challenge: distributed vars

23http://swift-lang.org

Page 24: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Swift/T optimizations improve data locality

24http://swift-lang.org

Page 25: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Prioritize long-running tasks

Variable-sized tasks produce trailing tasks:addressed by exposing ADLB task priorities at language level

Page 26: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

ApplicationDataflow, annotations

Features for Big Data analysis

26

• Location-aware schedulingUser and runtime coordinate data/task locations

• Collective I/OUser and runtime coordinate data/task locations

RuntimeHard/soft locations

Distributed data

ApplicationI/O hook

RuntimeMPI-IO transfers

Distributed data

Parallel FS

• F. Duro et al. Exploiting data locality in Swift/T workflows using Hercules.Proc. NESUS Workshop, 2014.

• Wozniak et al. Big data staging with MPI-IO for interactive X-ray science.Proc. Big Data Computing, 2014.

Page 27: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Parallel tasks in Swift/T

Swift expression: z = @par=32 f(x,y); ADLB server finds 8 available workers

– Workers receive ranks from ADLB server– Performs comm = MPI_Comm_create_group()

Workers perform f(x,y)communicating on comm

Page 28: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

LAMMPS parallel tasks

LAMMPS provides a convenient C++ API

Easily used by Swift/T parallel tasks

foreach i in [0:20] { t = 300+i; sed_command = sprintf("s/_TEMPERATURE_/%i/g", t); lammps_file_name = sprintf("input-%i.inp", t); lammps_args = "-i " + lammps_file_name; file lammps_input<lammps_file_name> = sed(filter, sed_command) => @par=8 lammps(lammps_args);}

Tasks with varying sizes packed into big MPI run Black: Compute Blue: Message White: Idle

Page 29: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

GeMTC: GPU-enabled Many-Task Computing

Goals:

1) MTC support 2) Programmability

3) Efficiency 4) MPMD on SIMD

5) Increase concurrency to warp level

Approach:

Design & implement GeMTC middleware:

1) Manages GPU 2) Spread host/device

3) Workflow system integration (Swift/T)

Motivation: Support for MTC on all accelerators!

Page 30: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

LOGGING AND DEBUGGING

What just happened?

30

Page 31: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Logging and debugging in Swift

Traditionally, Swift programs are debugged through the log or the TUI (text user interface)

Logs were produced using normal methods, containing: – Variable names and values as set with respect to thread– Calls to Swift functions– Calls to application code

A restart log could be produced to restart a large Swift run after certain fault conditions

Methods require single Swift site: do not scale to larger runs

31

Page 32: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Logging in MPI

The Message Passing Environment (MPE) Common approach to logging MPI programs Can log MPI calls or application events – can store arbitrary data Can visualize log with Jumpshot

Partial logs are stored at the site of each process– Written as necessary to shared

file system• in large blocks• in parallel

– Results are merged into a big log file (CLOG, SLOG)

Work has been done optimize the file format for various queries

32

Page 33: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Logging in Swift & MPI Now, combine it together Allows user to track down erroneous Swift program logic

Use MPE to log data, task operations, calls to native code Use MPE metadata to annotate events for later queries

MPE cannot be used to debug native MPI programs that abort– On program abort, the MPE log is not flushed from the process-local cache– Cannot reconstruct final fatal events

MPE can be used to debug Swift application programs that abort– We finalize MPE before aborting Swift – (Does not help much when developing Swift itself)– But primary use case is non-fatal arithmetic/logic errors

33

• Wozniak et al. A model for tracing and debugging large-scale task-parallel programs with MPE. Proc LASH-C, 2013.

Page 34: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Visualization of Swift/T execution User writes and runs Swift script Notices that native application code is called with nonsensical inputs Turns on MPE logging – visualizes with MPE

– PIPS task computation Store variable Notification (via control task)Blue: Get next task Retrieve variable Server process (handling of control task is highlighted in yellow)

Color cluster is task transition: Simpler than visualizing messaging pattern (which is not the user’s code!) Represents Von Neumann computing model – load, compute, store

34

TimeJumpshot view of PIPS application run

Proc

ess

rank

Page 35: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Debugging Swift/T execution

Starting from GUI, user can identify erroneous task – Uses time and rank coordinates from task metadata

Can identify variables used as task inputs

Can trace provenance of those variables back in reverse dataflow

35

erroneous task

Aha! Found script defect. ← ← ← (searching backwards)

Page 36: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

CASE STUDIESUse cases in the sciences

Page 37: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Can we build a Makefile in Swift?

User wants to test a variety of compiler optimizations Compile set of codes under wide range of possible configurations Run each compiled code to obtain performance numbers Run this at large scale on a supercomputer (Cray XE6)

In Make you say:CFLAGS = ... f.o : f.c     gcc $(CFLAGS) f.c -o f.o

In Swift you say:

string cflags[] = ...; f_o = gcc(f_c, cflags);

37

Page 38: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Swift for Really Parallel Builds

Appsapp (object_file o) gcc(c_file c, string cflags[]) {// Example:// gcc -c -O2 -o f.o f.c "gcc" "-c" cflags "-o" o c;}

app (x_file x) ld(object_file o[], string ldflags[]) {// Example:// gcc -o f.x f1.o f2.o ... "gcc" ldflags "-o" x o;}

app (output_file o) run(x_file x) { "sh" "-c" x @stdout=o;}

app (timing_file t) extract(output_file o) { "tail" "-1" o "|" "cut" "-f" "2" "-d" " " @stdout=t;}

Swift code string program_name = "programs/program1.c"; c_file c = input(program_name);

// For each foreach O_level in [0:3] { make file names… // Construct compiler flags string O_flag = sprintf("-O%i", O_level); string cflags[] = [ "-fPIC", O_flag ];

object_file o<my_object> = gcc(c, cflags); object_file objects[] = [ o ]; string ldflags[] = []; // Link the program x_file x<my_executable> = ld(objects, ldflags); // Run the program output_file out<my_output> = run(x); // Extract the run time from the program output timing_file t<my_time> = extract(out);

38

Page 39: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Abstract, extensible MapReduce in Swift

main { file d[]; int N = string2int(argv("N")); // Map phase foreach i in [0:N-1] { file a = find_file(i); d[i] = map_function(a); } // Reduce phase file final <"final.data"> = merge(d, 0, tasks-1);}

(file o) merge(file d[], int start, int stop) { if (stop-start == 1) { // Base case: merge pair o = merge_pair(d[start], d[stop]); } else { // Merge pair of recursive calls n = stop-start; s = n % 2; o = merge_pair(merge(d, start, start+s), merge(d, start+s+1, stop)); }}

39

• User needs to implement map_function() and merge()

• These may be implemented in native code, Python, etc.

• Could add annotations• Could add additional custom

application logic

Page 40: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Hercules

Want to run arbitrary workflows over distributed filesystems that expose data locations: Hercules is based on Memcached– Data analytics, post-processing– Exceed generality MapReduce: without losing data optimizations

Can optionally send a Swift task to a particular location with simple syntax:

Can obtain ranks from hostnames: int rank = hostmapOneWorkerRank("my.host.edu");

Can now specify location constraints: location L = location(rank, HARD|SOFT, RANK|NODE);

Much more to be done here!

40

foreach i in 0:N-1 { location L = locationFromRank(i); @location=L f(i);}

Page 41: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Chicago

41

Advanced Photon Source (APS)

Supercomputers

Page 42: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Proximity means we can closelycouple computingin novel ways

Terabits/s in the near future

Petabits/s are possible

ALCF

APS

MCS

Page 43: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Advanced Photon Source (APS)

In 2014 – 2,000 visits by >5,000 unique users – >5,700 experiments – 1,800 (to date) total publications; 24% of refereed pubs in high-impact journals– >1,200 protein structure deposits – 66 operating beamlines, 5,000 hours

43

Page 44: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Real-time beamline analysis

Goal: Transfer data from APS to HPC while experiment is running Use ALCF Mira, an IBM Blue Gene/Q: 786,432 cores @ 10 PF

Challenges – Data transfer (15 TB / week or

more)– Co-scheduling HPC time with

beam time– Rapidly scaling existing

prototypical analysis codes to ~100K cores

– Staging experimental data (577 MB) from GPFS to the compute nodes

Can use 22 M CPU hours / week!

Page 45: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Diffuse scattering and crystal analysis

DISCUS is a general program to generate disordered atomic structures and compute the corresponding experimental data such as single crystal diffuse scattering (http://discus.sourceforge.net)

Given experimental data, can we fit a modeled crystal to the measurement?

(NeXpy screenshot from Ray Osborn)

Page 46: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

DIFFEV: Scaling crystal diffraction simulation

Determines crystal configuration that produced given scattering image through simulation and evolutionary algorithm

Swift/T calls DISCUS via Python interfaces

Page 47: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Potential concurrency: 100,000 cores

Application by Reinhard Neder

DIFFEV: Genetic algorithm via dataflow

Novel application composed from

existing libraries by domain expert!

Page 48: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Crystal Coordinate Transformation Workflow Goal: Transform 3D image stack from detector coordinates to

real space coordinates– Operate on up to 50 GB data – Relatively light processing – I/O rates are critical– Core numerics in C++, Qt– Parallelism via Swift

Challenges – Coupling C++ to Swift via Qscript– Data access to HDF file on distributed storage

48

Page 49: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

CCTW diagrams

49

Page 50: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

CCTW: Swift/T application (C++)

bag<blob> M[]; foreach i in [1:n] {

blob b1= cctw_input(“pznpt.nxs”);blob b2[]; int outputId[]; (outputId, b2) = cctw_transform(i, b1); foreach b, j in b2 { int slot = outputId[j];

M[slot] += b; }} foreach g in M {

blob b = cctw_merge(g); cctw_write(b); }}

50

Page 51: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

NAMD Replica Exchange Limitations One-to-one replicas to Charm++ partitions:

– Available hardware must match science.– Batch job size must match science.– Replica count fixed at job startup.– No hiding of inter-replica communication latency.– No hiding of replica performance divergence.

Can a different programming model help?

Page 52: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Swift integration into NAMD and VMD

52

www.ci.uchicago.edu/swift www.mcs.anl.gov/exm

www.ks.uiuc.edu/Research/swift

Page 53: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

NAMD/VMD and Swift/T

Typical Swift/T Structure NAMD/VMD Structure

• Phillips et al. Petascale Tcl with NAMD, VMD, and Swift/T . Proc. High Performance Technical Computing in Dynamic Languages at SC, 2014.

Page 54: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Agent-based Models (ABMs)

Method of computing the potential system-level consequences of the behaviors of sets of individuals

54

Allows modelers to:– Specify the individual

behavioral rules for each agent– Describe the circumstances in

which the individuals reside– Then to execute the rules in

order to determine possible system- level results

Page 55: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Agent-based Models (ABMs) cont.

As more complicated models of large complex systems are developed, HPC resources are increasingly used to run computational experiments for validated models that support decision-making

ABMS studies typically require the execution of many model runs to account for stochastic variation in model outputs as well as to explore the possible range of parameter dependent outcomes

Various scientific workflows are required to calibrate and analyze large-scale models: adaptive parametric studies; large-scale sensitivity analyses and scaling studies; optimization and metaheuristics; inverse modeling; uncertainty quantification; and data assimilation.

55

Page 56: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Background and Motivation (cont.)

General pattern for solving this problem using Swift/T Example using DEAP (Python EA library) controlling workflow Resident Python tasks w/ queue-based interfaces for running Repast

ABMs

56

Page 57: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Stateful external interpreters

Desire to use high-level, 3rd party algorithms in Python, R to orchestrate Swift workflows, e.g.:– Python DEAP for evolutionary algorithms– R language GA package

Typical control pattern: – GA minimizes the cost function– You pass the cost function to the library and wait

We want Swift to obtain the parameters from the library– We launch a stateful interpreter on a thread– The "cost function" is a dummy that returns the

parameters to Swift over IPC– Swift passes the real cost function results back

to the library over IPC Achieve high productivity and high scalability

– Library is not modified – unaware of framework!– Application logic extensions in high-level script

Load balancing

Swift worker

Python/R

IPC GA

MPI Process

Tasks Results

MPI

Page 58: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Queue-based task IPC (cont.)

Tasks running on this worker use the embedded Swift/T Python interpreter

Instantiate a Python subthread connected to the parent Python process with two queues, IN and OUT

Python task returns control to Swift/T but does not deallocate the Python interpreter

58

When subsequent Python tasks execute on location L, they have access to IN and OUT

Page 59: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Future work: Extreme scale ensembles Enhance Swift for exascale experiment/simulate/analyze ensembles

– Deploy stateful, varying sized jobs– Outermost, experiment-level coordination via dataflow– Plug in experiments and human-in-the-loop models (dataflow filters)

59

Big job 1: Type A Big job 2: Type A Big job 3: Type B

Small job 1: Type A

Small job 2: Type A

Small job 3: Type B

Small job 4: Type B

Small job 4: Type C

Small job 5: Type D

APS

Page 60: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

EXAMPLESThe tutorial part

Page 61: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Examples overview

61

www.ci.uchicago.edu/swift www.mcs.anl.gov/exm

Makefile example (how to build C programs from Swift): – Implemented a highly parallel build system:

• Like make –j but runs across nodes– Provides high-level overview of many features in one useful application

Simple cases– Successively build up a more complex script starting from fragments

Native functions– Shows how to call a native code (C) function from Swift– Provide the building blocks to compose your own high-performance workflows

Page 62: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Check installation

62

www.ci.uchicago.edu/swift www.mcs.anl.gov/exm

Scripts should be in /root/swift-t-examples

Add PATH entries:PATH=/usr/lib/jvm/java-7-openjdk-amd64/bin:$PATHPATH=$PATH:/tmp/exm-install/turbine/binPATH=$PATH:/tmp/exm-install/stc/bin

To run: cd swift-t-examples/simplestc script-1-echo.swift script-1-echo.tclturbine script-1-echo.tcl

Set TURBINE_LOG=0 to disable logging

Page 63: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Swift/T: Makefile example: 1

app (object_file o) gcc(c_file c, string cflags[]){// gcc -c -O2 -o f.o f.c "gcc" "-c" cflags "-o" o c;}

app (x_file x) ld(object_file o[], string ldflags[]){// gcc -o f.x f1.o f2.o ... "gcc" ldflags "-o" x o;}

app (output_file o) run(x_file x){ "sh" "-c" x @stdout=o;}

63

www.ci.uchicago.edu/swift www.mcs.anl.gov/exm

Page 64: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Swift/T: Makefile example: 2

// For each foreach O_level in [0:3] { // Construct file names string my_object = sprintf("programs/program1-O%i.o", O_level);

. . . string O_flag = sprintf("-O%i", O_level); string cflags[] = [ "-fPIC", O_flag ]; object_file o<my_object> = gcc(c, cflags); object_file objects[] = [ o ]; string ldflags[] = []; x_file x<my_executable> = ld(objects, ldflags);

64

www.ci.uchicago.edu/swift www.mcs.anl.gov/exm

Page 65: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Native code overview

Turbine is a Tcl-based system It is easy to call to Tcl from Swift/T

Thus, we simply need to wrap the native function in a Tcl wrapper You can do this manually or with SWIG

1. Build the native function as a shared library2. Wrap the native function in Tcl with SWIG3. Build a Tcl package4. Call to the Tcl function from Swift5. Run it- just make sure the package can be found at run time

65

www.ci.uchicago.edu/swift www.mcs.anl.gov/exm

Page 66: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Native code file list

There are quite a few files involved in this process See the Makefile to find out how they are used together

f.c – The code you wish to call f.h – The header for f.c – read by SWIG f.i – SWIG interface file – just points SWIG to f.h

f.tcl – Pure Tcl function to call from Swift

f.swift - Swift header containing reusable call to Tcl

test-f.c – Test calling the native function from C test-f.swift – Test calling the native function from Swift

66

www.ci.uchicago.edu/swift www.mcs.anl.gov/exm

Page 67: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Parallelism control

How do I get more workers? – You only have one by default– Add more processes (turbine –n)

How do I get more nodes?– If using MPICH on a cluster/cloud, simply provide a hosts file (turbine –f)

• Starts up based on SSH– Otherwise, see the run script for the system you want to use

• We currently support PBS, SLURM, and Cobalt

How do I get more control processes? – (I need faster task submission or more memory)– Set environment variables TURBINE_ENGINES and/or ADLB_SERVERS to

numbers bigger than 1 (the default)

67

www.ci.uchicago.edu/swift www.mcs.anl.gov/exm

Page 68: High Performance Computational Experiments with Swift/T Justin M. Wozniak, Argonne National Laboratory & The University of Chicago

Acknowledgments

Swift is supported in part by NSF grants OCI-1148443 and PHY-636265, NIH DC08638,and the UChicago SCI Program

Extreme scaling research on Swift (ExM project) was supported by the DOEOffice of Science, ASCR Division

The Swift team:– Mihael Hategan, Tim Armstrong, David Kelly, Ian Foster, Dan Katz,

Mike Wilde, Zhao Zhang Sincere thanks to our scientific collaborators whose usage of Swift

was described and acknowledged in this talk

68