forked from rarias/bscpkgs
Preliminar version for the slides
This commit is contained in:
parent
ed95cb0a04
commit
6fa3facfb1
@ -79,7 +79,161 @@ Experiments run on demand based on article \fBfigures\fP
|
|||||||
Fast pkg overrides (MPI)
|
Fast pkg overrides (MPI)
|
||||||
.LE 1
|
.LE 1
|
||||||
.\"==================================================================
|
.\"==================================================================
|
||||||
.NS "Execution pipeline (review)"
|
.NS "Overview"
|
||||||
|
Dependency graph of a complete experiment that produces a figure. Each box
|
||||||
|
is a derivation and arrows represent \fBbuild dependencies\fP.
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.3;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
P: box "Program"
|
||||||
|
arrow
|
||||||
|
box "..."
|
||||||
|
arrow
|
||||||
|
T: box "Trebuchet"
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed
|
||||||
|
arrow
|
||||||
|
R: box "ResultTree"
|
||||||
|
arrow
|
||||||
|
box "..."
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
arrow <-> from P.nw + (0, 0.2) to T.ne + (0, 0.2) \
|
||||||
|
"Execution pipeline (EP)" above
|
||||||
|
arrow <-> from R.nw + (0, 0.2) to F.ne + (0, 0.2) \
|
||||||
|
"Postprocess pipeline (PP)" above
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
The \fBResult\fP is not covered by nix (yet). This is what it looks like
|
||||||
|
when executed:
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
circle "Build EP"
|
||||||
|
arrow
|
||||||
|
circle "Run EP"
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed
|
||||||
|
arrow
|
||||||
|
circle "Fetch"
|
||||||
|
arrow
|
||||||
|
R: box "ResultTree"
|
||||||
|
arrow
|
||||||
|
circle "Build PP"
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
Notice dependency order is not the same as execution order.
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Building the execution pipeline (EP)"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
B: circle "Build EP" fill
|
||||||
|
arrow
|
||||||
|
R: circle "Run EP"
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed
|
||||||
|
arrow
|
||||||
|
circle "Fetch"
|
||||||
|
arrow
|
||||||
|
box "ResultTree"
|
||||||
|
arrow
|
||||||
|
circle "Build PP"
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
arrow from B.w + (0, 0.35) to F.e + (0, 0.35) \
|
||||||
|
"Order or execution" above
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
Run nix-build with the experiment name:
|
||||||
|
.P
|
||||||
|
.VERBON
|
||||||
|
xeon07$ nix-build -A exp.nbody.baseline
|
||||||
|
\&...
|
||||||
|
/nix/store/5zhmdzi5mf0mfsran74cxngn07ba522m-trebuchet
|
||||||
|
.VERBOFF
|
||||||
|
.P
|
||||||
|
Outputs the first stage (the trebuchet). All other stages
|
||||||
|
are built as dependencies, as they are required to build the trebuchet.
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Running the EP"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
B: circle "Build EP"
|
||||||
|
arrow
|
||||||
|
R: circle "Run EP" fill
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed
|
||||||
|
arrow
|
||||||
|
circle "Fetch"
|
||||||
|
arrow
|
||||||
|
box "ResultTree"
|
||||||
|
arrow
|
||||||
|
circle "Build PP"
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
circlerad=0.2;
|
||||||
|
linewid=0.3;
|
||||||
|
T: circle at B + (0,-1.3) "trebu."
|
||||||
|
arrow
|
||||||
|
circle "runexp"
|
||||||
|
arrow
|
||||||
|
circle "isolate"
|
||||||
|
arrow
|
||||||
|
circle "exp."
|
||||||
|
arrow
|
||||||
|
circle "..."
|
||||||
|
arrow
|
||||||
|
circle "exec"
|
||||||
|
arrow
|
||||||
|
P: circle "program"
|
||||||
|
line from R.sw to T.nw dashed
|
||||||
|
line from R.se to P.n dashed
|
||||||
|
arrow <-> from T.w - (0, 0.35) to P.e - (0, 0.35) \
|
||||||
|
"Execution pipeline stages" below
|
||||||
|
arrow from B.w + (0, 0.35) to F.e + (0, 0.35) \
|
||||||
|
"Order or execution" above
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.SP 1m
|
||||||
|
.P
|
||||||
|
The stages are launched sequentially. Let see what happens in each one.
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Execution pipeline"
|
||||||
.2C
|
.2C
|
||||||
List of stages required to run the program of the experiment:
|
List of stages required to run the program of the experiment:
|
||||||
.BL
|
.BL
|
||||||
@ -102,6 +256,8 @@ if there are several instances running in parallel and
|
|||||||
if is part of the standard execution pipeline.
|
if is part of the standard execution pipeline.
|
||||||
.LE
|
.LE
|
||||||
.S P P
|
.S P P
|
||||||
|
.P
|
||||||
|
Sorted by the \fBexecution order\fP.
|
||||||
.\" Go to the next column
|
.\" Go to the next column
|
||||||
.NCOL
|
.NCOL
|
||||||
.KF
|
.KF
|
||||||
@ -659,19 +815,18 @@ r lw(5.5m) c c c c c.
|
|||||||
_ _ _ _ _ _
|
_ _ _ _ _ _
|
||||||
Stage Target Safe Copies User Std
|
Stage Target Safe Copies User Std
|
||||||
_ _ _ _ _ _
|
_ _ _ _ _ _
|
||||||
trebuchet xeon no no yes yes
|
\(rh \fBtrebuchet\fP xeon no no yes \fByes\fP
|
||||||
runexp login no no yes yes
|
\(rh \fBrunexp\fP login no no yes \fByes\fP
|
||||||
isolate login no no no yes
|
\(rh \fBisolate\fP login no no no \fByes\fP
|
||||||
experiment login yes no no yes
|
\(rh \fBexperiment\fP login yes no no \fByes\fP
|
||||||
unit login yes no no yes
|
\(rh \fBunit\fP login yes no no \fByes\fP
|
||||||
sbatch login yes no no yes
|
\(rh \fBsbatch\fP login yes no no \fByes\fP
|
||||||
_ _ _ _ _ _
|
_ _ _ _ _ _
|
||||||
isolate comp no no no yes
|
\(rh \fBisolate\fP comp no no no \fByes\fP
|
||||||
control comp yes no no yes
|
\(rh \fBcontrol\fP comp yes no no \fByes\fP
|
||||||
srun comp yes no no yes
|
\(rh \fBsrun\fP comp yes no no \fByes\fP
|
||||||
isolate comp no yes no yes
|
\(rh \fBisolate\fP comp no yes no \fByes\fP
|
||||||
_ _ _ _ _ _
|
_ _ _ _ _ _
|
||||||
\m[white]\(rh\m[]\
|
|
||||||
exec comp yes yes no no
|
exec comp yes yes no no
|
||||||
program comp yes yes no no
|
program comp yes yes no no
|
||||||
_ _ _ _ _ _
|
_ _ _ _ _ _
|
||||||
@ -735,123 +890,579 @@ r lw(5.5m) c c c c c.
|
|||||||
.KE
|
.KE
|
||||||
.1C
|
.1C
|
||||||
.\"==================================================================
|
.\"==================================================================
|
||||||
.NS "Generating figures"
|
.NS "Running the EP"
|
||||||
The postprocess pipeline takes the results of the execution and produces
|
|
||||||
figures or tables to be used in a publication.
|
|
||||||
.DS CB
|
.DS CB
|
||||||
.PS 5.3
|
.S -3.5
|
||||||
circlerad=0.3;
|
.PS
|
||||||
ellipsewid=1.2;
|
circlerad=0.25;
|
||||||
linewid=0.3;
|
linewid=0.3;
|
||||||
boxwid=1;
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
right
|
right
|
||||||
box "Experiment"
|
B: circle "Build EP"
|
||||||
arrow
|
arrow
|
||||||
ellipse "Execution"
|
R: circle "Run EP" fill
|
||||||
arrow
|
arrow
|
||||||
box "Result"
|
box "Result" "(MN4)" dashed
|
||||||
arrow
|
arrow
|
||||||
ellipse "Postprocess"
|
circle "Fetch"
|
||||||
arrow
|
arrow
|
||||||
box "Figure"
|
box "ResultTree"
|
||||||
|
arrow
|
||||||
|
circle "Build PP"
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
arrow from B.w + (0, 0.35) to F.e + (0, 0.35) \
|
||||||
|
"Order or execution" above
|
||||||
.PE
|
.PE
|
||||||
|
.S P P
|
||||||
.DE
|
.DE
|
||||||
.P
|
.P
|
||||||
Once the results are available, multiple figures can be created without
|
|
||||||
re-running the experiment.
|
|
||||||
.P
|
|
||||||
The postprocess pipeline is \fBexperimental\fP; there is no standard
|
|
||||||
yet.
|
|
||||||
.\"==================================================================
|
|
||||||
.NS "Executing experiments"
|
|
||||||
.P
|
|
||||||
We cannot access MN4 from nix, as it doesn't has the SSH keys nor
|
We cannot access MN4 from nix, as it doesn't has the SSH keys nor
|
||||||
network access when building derivations.
|
network access when building derivations.
|
||||||
.P
|
.P
|
||||||
The garlic(1) tool is used to run experiments and fetch the results. See
|
The garlic(1) tool is used to run experiments and fetch the results. See
|
||||||
the manual for details.
|
the manual for details.
|
||||||
.P
|
|
||||||
.VERBON
|
|
||||||
xeon07$ nix-build -A fig.nbody.small
|
|
||||||
\&...
|
|
||||||
/tmp/garlic/1qcc44lx2nxwi7rmr6389sksq3gwy9w5-experiment: not found
|
|
||||||
Run the experiment and fetch the results with:
|
|
||||||
|
|
||||||
\f[CB]garlic -RFv /nix/store/5zhmdzi5mf0mfsran74cxngn07ba522m-trebuchet\fP
|
|
||||||
|
|
||||||
See garlic(1) for more details.
|
|
||||||
cannot continue building /nix/store/jql4...2cb0-resultTree, aborting
|
|
||||||
.VERBOFF
|
|
||||||
.\"==================================================================
|
.\"==================================================================
|
||||||
.NS "Executing experiments"
|
.NS "Running the EP"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
B: circle "Build EP"
|
||||||
|
arrow
|
||||||
|
R: circle "Run EP" fill
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed
|
||||||
|
arrow
|
||||||
|
circle "Fetch"
|
||||||
|
arrow
|
||||||
|
box "ResultTree"
|
||||||
|
arrow
|
||||||
|
circle "Build PP"
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
arrow from B.w + (0, 0.35) to F.e + (0, 0.35) \
|
||||||
|
"Order or execution" above
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
.P
|
.P
|
||||||
To run an experiment use \fB-R\fP and provide the trebuchet path:
|
To launch the EP use \fBgarlic -R\fP and provide the trebuchet path:
|
||||||
.P
|
.P
|
||||||
.VERBON
|
.VERBON
|
||||||
xeon07$ garlic -Rv /nix/store/5zh...22m-trebuchet
|
.S -2
|
||||||
|
xeon07$ garlic -Rv /nix/store/5zhmdzi5mf0mfsran74cxngn07ba522m-trebuchet
|
||||||
Running experiment 1qcc...9w5-experiment
|
Running experiment 1qcc...9w5-experiment
|
||||||
sbatch: error: spank: x11.so: Plugin file not found
|
sbatch: error: spank: x11.so: Plugin file not found
|
||||||
Submitted batch job 12719522
|
Submitted batch job 12719522
|
||||||
\&...
|
\&...
|
||||||
xeon07$
|
xeon07$
|
||||||
|
.S P P
|
||||||
.VERBOFF
|
.VERBOFF
|
||||||
.P
|
.P
|
||||||
Once the experiment is submited, you can leave the session: it will run
|
Once the jobs are submited, you can leave the session: it will run
|
||||||
in MN4 automatically at some point.
|
in MN4 automatically at some point.
|
||||||
|
|
||||||
.\"==================================================================
|
.\"==================================================================
|
||||||
.NS "Executing experiments"
|
.NS "Execution complete"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
B: circle "Build EP"
|
||||||
|
arrow
|
||||||
|
R: circle "Run EP"
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed fill
|
||||||
|
arrow
|
||||||
|
circle "Fetch"
|
||||||
|
arrow
|
||||||
|
box "ResultTree"
|
||||||
|
arrow
|
||||||
|
circle "Build PP"
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
arrow from B.w + (0, 0.35) to F.e + (0, 0.35) \
|
||||||
|
"Order or execution" above
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
.P
|
.P
|
||||||
To wait and fetch the results, use \fB-F\fP:
|
When the EP is complete, the generated results are stored in MN4.
|
||||||
|
.P
|
||||||
|
As stated previously, nix cannot access MN4 (yet), so we need to manually
|
||||||
|
fetch the results.
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Fetching the results"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
B: circle "Build EP"
|
||||||
|
arrow
|
||||||
|
R: circle "Run EP"
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed
|
||||||
|
arrow
|
||||||
|
circle "Fetch" fill
|
||||||
|
arrow
|
||||||
|
box "ResultTree"
|
||||||
|
arrow
|
||||||
|
circle "Build PP"
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
arrow from B.w + (0, 0.35) to F.e + (0, 0.35) \
|
||||||
|
"Order or execution" above
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
To fetch the results, use \fBgarlic -F\fP:
|
||||||
.P
|
.P
|
||||||
.VERBON
|
.VERBON
|
||||||
xeon07$ garlic -Fv /nix/store/5zhmd...522m-trebuchet
|
.S -3.5
|
||||||
|
xeon07$ garlic -Fv /nix/store/5zhmdzi5mf0mfsran74cxngn07ba522m-trebuchet
|
||||||
/mnt/garlic/bsc15557/out/1qc...9w5-experiment: checking units
|
/mnt/garlic/bsc15557/out/1qc...9w5-experiment: checking units
|
||||||
3qnm6drx5y95kxrr43gnwqz8v4x641c7-unit: running 7 of 10
|
3qnm6drx5y95kxrr43gnwqz8v4x641c7-unit: running 7 of 10
|
||||||
awd3jzbcw0cwwvjrcrxzjvii3mgj663d-unit: completed
|
awd3jzbcw0cwwvjrcrxzjvii3mgj663d-unit: completed
|
||||||
bqnnrwcbcixag0dfflk1zz34zidk97nf-unit: no status
|
bqnnrwcbcixag0dfflk1zz34zidk97nf-unit: no status
|
||||||
l32097db7hbggvj7l5hz44y1glzz6jcy-unit: no status
|
|
||||||
n1a26qa13fdz0ih1gg1m0wfcybs71hm9-unit: completed
|
|
||||||
rywcwvnpz3mk0gyp5dzk94by3q1h3ljp-unit: completed
|
|
||||||
yl8ygadghd1fyzjwab3csd8hq1q93cw3-unit: completed
|
|
||||||
\&...
|
\&...
|
||||||
/mn...w5-experiment: \f[CB]execution complete, fetching results\fP
|
/mn...w5-experiment: \f[CB]execution complete, fetching results\fP
|
||||||
these derivations will be built:
|
these derivations will be built:
|
||||||
/nix/store/mqdr...q4z-resultTree.drv
|
/nix/store/mqdr...q4z-resultTree.drv
|
||||||
\&...
|
\&...
|
||||||
\f[CB]/nix/store/jql41hms1dr49ipbjcw41i4dj4pq2cb0-resultTree\fP
|
\f[CB]/nix/store/jql41hms1dr49ipbjcw41i4dj4pq2cb0-resultTree\fP
|
||||||
|
.S P P
|
||||||
.VERBOFF
|
.VERBOFF
|
||||||
|
.P
|
||||||
|
Notice that if the experiments are still running, it waits for the
|
||||||
|
completion of all units first.
|
||||||
.\"==================================================================
|
.\"==================================================================
|
||||||
.NS "Execution"
|
.NS "Fetching the results"
|
||||||
The dependency graph shows the role of the garlic tool:
|
|
||||||
.DS CB
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
.PS
|
.PS
|
||||||
scale=1;
|
|
||||||
circlerad=0.25;
|
circlerad=0.25;
|
||||||
linewid=0.3;
|
linewid=0.3;
|
||||||
diag=linewid + circlerad;
|
boxwid=0.52;
|
||||||
far=circlerad*3 + linewid*4
|
boxht=0.35;
|
||||||
circle "Prog"
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
B: circle "Build EP"
|
||||||
arrow
|
arrow
|
||||||
E: circle "EP"
|
R: circle "Run EP"
|
||||||
R: circle "Result" at E + (far,0)
|
|
||||||
RUN: circle "Run" at E + (diag,-diag) dashed
|
|
||||||
FETCH: circle "Fetch" at R + (-diag,-diag) dashed
|
|
||||||
move to R.e
|
|
||||||
arrow
|
arrow
|
||||||
P: circle "PP"
|
box "Result" "(MN4)" dashed
|
||||||
arrow
|
arrow
|
||||||
circle "Plot"
|
circle "Fetch"
|
||||||
arrow dashed from E to RUN chop
|
arrow
|
||||||
arrow dashed from RUN to FETCH chop
|
box "ResultTree" fill
|
||||||
arrow dashed from FETCH to R chop
|
arrow
|
||||||
arrow from E to R chop
|
circle "Build PP"
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
arrow from B.w + (0, 0.35) to F.e + (0, 0.35) \
|
||||||
|
"Order or execution" above
|
||||||
.PE
|
.PE
|
||||||
|
.S P P
|
||||||
.DE
|
.DE
|
||||||
With the two pipelines
|
.P
|
||||||
.BL
|
.VERBON
|
||||||
|
.S -3.5
|
||||||
|
\&...
|
||||||
|
\f[CB]/nix/store/jql41hms1dr49ipbjcw41i4dj4pq2cb0-resultTree\fP
|
||||||
|
.S P P
|
||||||
|
.VERBOFF
|
||||||
|
.P
|
||||||
|
When the fetch operation success, the \fBresultTree\fP derivation is
|
||||||
|
built, with the \fBlogs\fP of the execution.
|
||||||
|
.P
|
||||||
|
All other generated data is \fBignored by now\fP, as we don't want to
|
||||||
|
store large files in the nix store of xeon07.
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Running and fetching"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
B: circle "Build EP"
|
||||||
|
arrow
|
||||||
|
R: circle "Run EP" fill
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed fill
|
||||||
|
arrow
|
||||||
|
circle "Fetch" fill
|
||||||
|
arrow
|
||||||
|
box "ResultTree" fill
|
||||||
|
arrow
|
||||||
|
circle "Build PP"
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
arrow from B.w + (0, 0.35) to F.e + (0, 0.35) \
|
||||||
|
"Order or execution" above
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
You can run an experiment and fetch the results with \fBgarlic -RF\fP in
|
||||||
|
one go:
|
||||||
|
.P
|
||||||
|
.VERBON
|
||||||
|
.S -2
|
||||||
|
xeon07$ garlic -RF /nix/store/5zhmdzi5mf0mfsran74cxngn07ba522m-trebuchet
|
||||||
|
.S P P
|
||||||
|
.VERBOFF
|
||||||
|
.P
|
||||||
|
Remember that you can interrupt the fetching while is waiting, and come
|
||||||
|
later if the experiment takes too long.
|
||||||
|
.P
|
||||||
|
If nix tries to build \fBResultTree\fP and doesn't find the experiment
|
||||||
|
results, it will tell you to run this command to run and fetch the
|
||||||
|
experiment. Example: building the figure before running the experiment:
|
||||||
|
.P
|
||||||
|
.VERBON
|
||||||
|
.S -2
|
||||||
|
xeon07$ nix-build -A fig.nbody.baseline
|
||||||
|
.S P P
|
||||||
|
.VERBOFF
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Postprocess pipeline (PP)"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
B: circle "Build EP"
|
||||||
|
arrow
|
||||||
|
R: circle "Run EP"
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed
|
||||||
|
arrow
|
||||||
|
circle "Fetch"
|
||||||
|
arrow
|
||||||
|
box "ResultTree"
|
||||||
|
arrow
|
||||||
|
circle "Build PP" fill
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
arrow from B.w + (0, 0.35) to F.e + (0, 0.35) \
|
||||||
|
"Order or execution" above
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
Once the \fBresultTree\fP derivation is built, multiple figures can be created
|
||||||
|
without re-running the experiment.
|
||||||
|
.P
|
||||||
|
The postprocess pipeline is formed of several stages as well, but is
|
||||||
|
considered \fBexperimental\fP; there is no standard yet.
|
||||||
|
.P
|
||||||
|
It only needs to be built, as nix can perform all tasks to create the
|
||||||
|
figures (no manual intervention)
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Building the postprocess pipeline (PP)"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
B: circle "Build EP"
|
||||||
|
arrow
|
||||||
|
circle "Run EP"
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed
|
||||||
|
arrow
|
||||||
|
circle "Fetch"
|
||||||
|
arrow
|
||||||
|
R: box "ResultTree"
|
||||||
|
arrow
|
||||||
|
PP: circle "Build PP" fill
|
||||||
|
arrow
|
||||||
|
F: box "Figure"
|
||||||
|
circlerad=0.2;
|
||||||
|
linewid=0.3;
|
||||||
|
T: box at R + (-0.02,-0.8) "timetable"
|
||||||
|
arrow
|
||||||
|
box "merge"
|
||||||
|
arrow
|
||||||
|
P: box "rPlot"
|
||||||
|
line from PP.sw to T.n dashed
|
||||||
|
line from PP.se to P.n dashed
|
||||||
|
arrow <-> from T.w - (0, 0.35) to P.e - (0, 0.35) \
|
||||||
|
"Execution pipeline stages" below
|
||||||
|
arrow from B.w + (0, 0.35) to F.e + (0, 0.35) \
|
||||||
|
"Order or execution" above
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
To build the figure, only three stages are required: timetable, merge
|
||||||
|
and rPlot.
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "PP stages: timetable"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
box "timetable" fill
|
||||||
|
arrow
|
||||||
|
box "merge"
|
||||||
|
arrow
|
||||||
|
P: box "rPlot"
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
The timetable transforms the logs of the execution into a NDJSON file,
|
||||||
|
which contains all the unit configuration and the execution time in one
|
||||||
|
line in JSON:
|
||||||
|
.P
|
||||||
|
.VERBON
|
||||||
|
.S -2
|
||||||
|
{ "unit":"...", "experiment":"...", "run":1, "config":{...}, "time":1.2345 }
|
||||||
|
{ "unit":"...", "experiment":"...", "run":2, "config":{...}, "time":1.2333 }
|
||||||
|
{ "unit":"...", "experiment":"...", "run":3, "config":{...}, "time":1.2323 }
|
||||||
|
.S P P
|
||||||
|
.VERBOFF
|
||||||
|
.P
|
||||||
|
This format allows R (and possibly other programs) to load \fBall\fP
|
||||||
|
information regarding the experiment configuration into a table.
|
||||||
|
.P
|
||||||
|
It requires the execution logs to contain a line with the time:
|
||||||
|
.P
|
||||||
|
.VERBON
|
||||||
|
.S -2
|
||||||
|
time 1.2345
|
||||||
|
.S P P
|
||||||
|
.VERBOFF
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "PP stages: merge"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
box "timetable"
|
||||||
|
arrow
|
||||||
|
box "merge" fill
|
||||||
|
arrow
|
||||||
|
P: box "rPlot"
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
The merge stage allows multiple results of several experiments to be
|
||||||
|
merged in one dataset.
|
||||||
|
.P
|
||||||
|
In this way, multiple results can be presented in one figure.
|
||||||
|
.P
|
||||||
|
It simple concatenates all the NDJSON files together.
|
||||||
|
.P
|
||||||
|
This stage can be build directly with:
|
||||||
|
.P
|
||||||
|
.VERBON
|
||||||
|
$ nix-build ds.nbody.baseline
|
||||||
|
.VERBOFF
|
||||||
|
.P
|
||||||
|
So you can inspect the dataset and play with it before generating the
|
||||||
|
plots (is automatically built by nix as a dependency).
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "PP stages: rPlot"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
box "timetable"
|
||||||
|
arrow
|
||||||
|
box "merge"
|
||||||
|
arrow
|
||||||
|
P: box "rPlot" fill
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
Finally, the rPlot stage runs a R script that loads the NDJSON dataset
|
||||||
|
and generates some plots.
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Building the figures"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.25;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
B: circle "Build EP"
|
||||||
|
arrow
|
||||||
|
circle "Run EP"
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed
|
||||||
|
arrow
|
||||||
|
circle "Fetch"
|
||||||
|
arrow
|
||||||
|
R: box "ResultTree"
|
||||||
|
arrow
|
||||||
|
PP: circle "Build PP"
|
||||||
|
arrow
|
||||||
|
F: box "Figure" fill
|
||||||
|
arrow from B.w + (0, 0.35) to F.e + (0, 0.35) \
|
||||||
|
"Order or execution" above
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
The complete PP and the figures can be build by using:
|
||||||
|
.P
|
||||||
|
.VERBON
|
||||||
|
xeon07$ nix-build -A fig.nbody.baseline
|
||||||
|
.VERBOFF
|
||||||
|
.P
|
||||||
|
A interactive R shell can be used to play with the presentation of the
|
||||||
|
plots:
|
||||||
|
.P
|
||||||
|
.VERBON
|
||||||
|
xeon07$ nix-shell garlic/fig/dev/shell.nix
|
||||||
|
$ cp /nix/store/...-merge.json input.json
|
||||||
|
$ R
|
||||||
|
> source("garlic/fig/nbody/baseline.R")
|
||||||
|
.VERBOFF
|
||||||
|
.P
|
||||||
|
More about this later.
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Figure dependencies"
|
||||||
|
.DS CB
|
||||||
|
.S -3.5
|
||||||
|
.PS
|
||||||
|
circlerad=0.3;
|
||||||
|
linewid=0.3;
|
||||||
|
boxwid=0.52;
|
||||||
|
boxht=0.35;
|
||||||
|
fillval=0.2;
|
||||||
|
right
|
||||||
|
P: box "Program"
|
||||||
|
arrow
|
||||||
|
box "..."
|
||||||
|
arrow
|
||||||
|
T: box "Trebuchet"
|
||||||
|
arrow
|
||||||
|
box "Result" "(MN4)" dashed
|
||||||
|
arrow
|
||||||
|
R: box "ResultTree"
|
||||||
|
arrow
|
||||||
|
box "..."
|
||||||
|
arrow
|
||||||
|
F: box "Figure" fill
|
||||||
|
arrow <-> from P.nw + (0, 0.2) to T.ne + (0, 0.2) \
|
||||||
|
"Execution pipeline (EP)" above
|
||||||
|
arrow <-> from R.nw + (0, 0.2) to F.ne + (0, 0.2) \
|
||||||
|
"Postprocess pipeline (PP)" above
|
||||||
|
.PE
|
||||||
|
.S P P
|
||||||
|
.DE
|
||||||
|
.P
|
||||||
|
The figure contains as dependencies all the EP, results and PP.
|
||||||
|
.P
|
||||||
|
Any change in any of the stages (or dependencies) will lead to a new
|
||||||
|
figure, \fBautomatically\fP.
|
||||||
|
.P
|
||||||
|
Figures contain the hash of the dataset in the title, so they can
|
||||||
|
be tracked.
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Article with figures"
|
||||||
|
.P
|
||||||
|
An example LaTeX document uses the name of the figures in nix:
|
||||||
|
.P
|
||||||
|
.VERBON
|
||||||
|
\\includegraphics[]{@fig.nbody.small@/scatter.png}
|
||||||
|
.VERBOFF
|
||||||
|
.P
|
||||||
|
Then, nix will extract all figure references, build them (re-running the
|
||||||
|
experiment if required) and build the report: \fC$ nix-build
|
||||||
|
garlic.report\fP
|
||||||
|
.P
|
||||||
|
We also have \fBreportTar\fP that puts the figures, LaTeX sources and
|
||||||
|
a Makefile required to build the report into a self-contained tar.gz.
|
||||||
|
.P
|
||||||
|
It can be compiled with \fBmake\fP (no nix required) so it can be sent
|
||||||
|
to a journal for further changes in the LaTeX source.
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Other changes"
|
||||||
|
.DL
|
||||||
.LI
|
.LI
|
||||||
EP: Execution pipeline
|
We can provide the complete benchmark and BSC packages as a simple
|
||||||
|
overlay. This allows others to load their own changes on top or below our
|
||||||
|
benchmark.
|
||||||
.LI
|
.LI
|
||||||
PP: Postprocess pipeline
|
We now avoid reevaluation of nixpkgs when setting the MPI
|
||||||
|
implementation (allows faster evaluations: 2 s/unit \(-> 2 s total).
|
||||||
|
.LI
|
||||||
|
Dependencies between experiments results are posible (experimental):
|
||||||
|
allows generation of a dataset + computation with dependencies.
|
||||||
.LE
|
.LE
|
||||||
|
.\"==================================================================
|
||||||
|
.NS "Questions?"
|
||||||
|
.defcolor gray rgb #bbbbbb
|
||||||
|
\m[gray]
|
||||||
|
.P
|
||||||
|
Example questions:
|
||||||
|
.DL
|
||||||
|
.LI
|
||||||
|
What software was used to build this presentation?
|
||||||
|
.LI
|
||||||
|
I used groff.
|
||||||
|
.LI
|
||||||
|
And the diagrams?
|
||||||
|
.LI
|
||||||
|
Same :-D
|
||||||
|
.LI
|
||||||
|
How long takes to build?
|
||||||
|
.LI
|
||||||
|
0,39s user 0,02s system 129% cpu 0,316 total
|
||||||
|
.LE
|
||||||
|
\m[]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user