Gavel: inspect the saved allocation trace
This notebook recomputes the two 1:2:3 policy means in How should AI jobs share different GPUs?, then lets you choose a timestep interval and a job. The inputs are the exact values saved in that article at commit 9df3f608a3e7b2e95312504f9d1cbf22e190091f.
Each score is effective throughput divided by that same job's expected rate at one-third time on each of K80, P100, and V100. The saved run used published policy code and measured throughput tables for an allocation-only numerical simulation. This notebook analyzes its outputs; it does not run GPU training or the round-based scheduler.
The source and saved outputs are visible before execution. Run all cells to check the numbers, or change the interval and job in the query cell. The article's existing charts remain directly explorable without running Python.
1. Read the three inputs
The site's runner mounts these files under /work: gavel-fresh-trace.json, gavel-weight-summary.json, and gavel-source.json. Locally, place them beside this notebook and run from that directory. The analysis uses the Python standard library; IPython.display renders the SVG outputs. There are no package installs or network calls in the notebook.
Source article commit: 9df3f608a3e7b2e95312504f9d1cbf22e190091f Verified input hashes: 2 Saved job values: 1368
2. Define the aggregation and checks
At each timestep, sum the scores of jobs that have arrived. The published bar is the arithmetic mean of those 72 totals, so every timestep receives equal weight. Averaging all 684 job records directly would answer a different question because the number of active jobs changes.
The checks verify unique job/timestep pairs, all 18 arrivals, both policy traces, finite nonnegative scores, and the two published means to an absolute tolerance of 1e-10.
All numerical and trace-coverage assertions passed.
3. Recompute the published baseline
These are normalized progress scores, not raw tokens per second or GPU utilization. The comparison below describes one saved job sequence and one set of weights.
Weights 1:2:3; all 72 timesteps Policy Steps Mean Min Max Throughput-aware 72 7.750821 1.719601 10.459325 Performance-agnostic 72 6.441240 1.000000 9.000000 Throughput-aware mean is 20.331% above the agnostic mean. Agnostic mean is 16.896% below the throughput-aware mean.
4. Draw the checked values
Both lines use the saved 1:2:3 trace. Each plotted total is computed from its active jobs; no points are interpolated to create missing records. SVG point titles retain the timestep and value.
5. Query a different interval or job
Edit START_STEP, END_STEP, or JOB_ID, then run this cell. Job IDs run from 0 to 17. A job's mean includes only the selected steps after its arrival; a pre-arrival interval reports “not arrived” instead of treating an absent job as a zero-throughput job. The aggregate mean still includes every selected timestep.
All active jobs, steps 49–72: Policy Steps Mean Min Max Throughput-aware 24 9.876224 9.096838 10.459325 Performance-agnostic 24 8.728238 7.856588 9.000000 Job 12, selected steps after arrival only: Policy Steps Mean Min Max Throughput-aware 24 1.130766 0.581074 1.527814 Performance-agnostic 24 0.888889 0.500000 1.000000
6. Compare the two saved weight scenarios
The article also saves four means for weights 1:2:3 and 1:1:1. The 1:2:3 means were independently recomputed above. The article contains only summary values for 1:1:1, so this cell compares those saved means without claiming to rerun that trace or solve new weights.
Changing weights changes the allocation objective. These differences describe this workload response; they do not establish a general policy or fairness ranking. Target-share distances and raw GPU allocations are not inputs to this notebook.
Policy 1:2:3 recomputed 1:1:1 saved Change Throughput-aware 7.750821276 7.921449236 2.201% Performance-agnostic 6.441239771 6.601999472 2.496%
Source trail
- Public references: Live article, Gavel paper, OSDI 2020, and Gavel source code.
- Exact input source:
script#gavel-datain the savedsource/gavel-trace.html. Its Git blob SHA-1 is572f09dc5a6399e5f80254791f0acbc1744798ba. - Trace coverage: 684 active-job records per policy, 1,368 total; 72 timesteps; 18 jobs. The full 1:2:3 series supports interval and job selection. The 1:1:1 series is not present in the article's embedded data.
- Preserved reproduction: Download the original source, allocation data, and diagnostics. This small analysis package supplements that download.
- Portable checks:
analysis.pyregenerates the CSV tables and SVG figures with Python's standard library.validate.pychecks the exact extraction, source hashes, numerical assertions, figures, and executed notebook.manifest.jsonrecords the inputs and artifact hashes.
Python runs locally in this page. Saved results and figures are visible before execution.