Architecture & Measurement-Design Analysis
Sia: Heterogeneity-aware, goodput-optimized ML-cluster scheduling
Source: Subramanya, S. J.; Arfeen, D.; Lin, S.;
Qiao, A.; Jia, Z.; Ganger, G. R. SOSP '23, Koblenz, Germany,
October 23-26 2023, pp. 642-657. DOI:
10.1145/3600006.3613175 Affiliations: Carnegie Mellon
University + Cornell University + Petuum Inc. Built on:
AdaptDL (petuum/adaptdl), Kubernetes, PyTorch, CVXPY + GLPK_MI
Reader: pdftotext -layout direct
extraction (gemini-reader script pinned to a retired model)
Analyst: Vishwakarma Date:
2026-09-01
Table of Contents
- System Architecture (the scheduler itself)
- System-Under-Test Architecture (testbed, simulator, baselines)
- Design-Space Diagram (axes swept, axes held fixed)
- Algorithm & Control Flow Diagrams
- Quantitative Results — Empirical Findings by Regime
- Configuration-Regime Trade-off Tables
- Bottlenecks & Insights Surfaced by the Measurements
- Limitations of the Methodology
- Note on NCCL Tuning
- Analogy
1. System Architecture (the scheduler itself)
Sia is a pre-emptive, round-based cluster scheduler that maximizes cluster-wide goodput. Its defining claim is that two degrees of freedom prior schedulers treated separately — which GPU type a job runs on (heterogeneity) and how many GPUs plus what batch size it runs with (adaptivity) — must be decided jointly, in one solve, every round. Prior work splits into heterogeneity-aware schedulers (Gavel) serving only rigid jobs, and adaptivity-aware schedulers (Pollux) assuming all GPUs are identical. Sia is the intersection.
1.1 Component graph and job life cycle
+------------------------------------------------------------------+
| Sia scheduler |
| (1) submit (max_bsz, max_ngpus) |
| | (2) profile 1 GPU of EACH type, ~10 |
| v batchsizes, < 20 GPU-seconds per type |
| +--------------+ ------------------------------> +-----------+ |
| | Queue | | Profiler | |
| +------+-------+ +-----+-----+ |
| | (3) profiles | |
| | (4) waits until allocated v |
| | +--------------------------------+ |
| | | Goodput Estimator | |
| | | - throughput model per | |
| | | (job, GPU_type) | |
| | (8) goodput for | - statistical-efficiency model | |
| v all configs | per job (borrowed: Pollux) | |
| +--------------------+ +----+-----------------------^---+ |
| | Sia Policy |<--------+ | |
| | build G (|J|x|C|) | (7) gradient + throughput |
| | row-normalize | stats, 30 s default | |
| | restart factor r_i | | |
| | fairness exponent p| | |
| | solve binary ILP | | |
| +---------+----------+ | |
| | (5) ALLOCATION (n, m, X) | |
| v | |
| +--------------------------------------+ | |
| | Placer (three rules; see Fig 10) | | |
| +---------+----------------------------+ | |
| | (6) PLACEMENT: physical GPUs | |
| v | |
| +--------------------------------------+ | |
| | Adaptive Executors |----------------+ |
| | transparent ckpt-restore | batchsize | |
| | adaptivity | stats reporting | |
| +--------------------------------------+ |
| continuous loop: (5) -> (6) -> (7) -> (8) -> (5) -> ... |
+------------------------------------------------------------------+
^ Fig 1: Sia component graph, redrawn from Figure 3 of the paper with
the paper's own lifecycle numbering. Steps (1)-(4) happen once per
job; (5)-(8) loop for the rest of the job's life in the cluster.
Three kinds of state sit in three components, and that separation is what makes the round cheap. The Profiler produces static per-GPU-type compute measurements once; the Goodput Estimator holds the slowly refined per-(job, GPU-type) throughput model; the Policy holds no state that survives a round. Learning is amortized across rounds while per-round work is one integer program.
1.2 Implementation stack
+---------------------------------------------------+
| DL job (ResNet18/BERT/DeepSpeech2/YOLOv3/ | workload
| ResNet50/2.8B GPT) |
+---------------------------------------------------+
| AdaptDL data-loaders (variable batch size); LR | adaptivity
| scaling: square-root (AdamW), AdaScale (SGD) |
+---------------------------------------------------+
| Sia Adaptive Executor: minibatch + gradient stat | agent
| profiling; goodput-model fitting every 30 s; |
| batch-size selection; ckpt-restore on realloc |
+---------------------------------------------------+
| PyTorch + gradient all-reduce | training
+---------------------------------------------------+
| Sia Policy (Kubernetes service) | control
| Eq. (4) as a MILP, solved by GLPK_MI via CVXPY | plane
+---------------------------------------------------+
| Kubernetes-managed heterogeneous GPU cluster | substrate
| (t4 / rtx / a100 / quad node types) |
+---------------------------------------------------+
^ Fig 2: Implementation stack. Sia is a drop-in scheduler and
data-loader replacement inside AdaptDL, which is what makes a
head-to-head comparison with the public Pollux implementation
possible on identical framework machinery.
Because Sia and Pollux share the executor, data-loader, framework and checkpoint-restore path, the difference between them is attributable to the policy, not to engineering quality below it. Gavel, Themis and Shockwave lack that property — they are compared only in simulation.
1.3 Decoupled allocation and placement
Sia splits the problem into an allocation stage
(number and type of resources per job) and a placement
stage (which physical GPUs satisfy it), then restricts the
allocation space so a valid placement is guaranteed for
anything the solver can emit. Pollux instead considers every way to
place each (job, GPU_count) pair across all nodes, giving a
solution count exponential in nodes and GPUs-per-node.
Most of Sia's measured advantages follow from this one decision. Shrinking the set lets the ILP solve in under a second at 2048 GPUs; guaranteed feasibility lets the Placer be three rules rather than a second optimizer; and forbidding two distributed jobs from sharing a node eliminates NIC contention, a slowdown source cited from prior work. The stated cost is optimality, and the homogeneous-cluster result (Table 4) is the evidence that the restriction does not materially hurt job runtimes.
2. System-Under-Test Architecture (testbed, simulator, baselines)
2.1 Node types and cluster settings
| Tag | Deployment | GPUs per node | VRAM | Interconnect |
|---|---|---|---|---|
| t4 | Cloud | 4x NVIDIA T4 | 16 GB | AWS g4dn.12xlarge |
| rtx | On-prem | 8x NVIDIA RTX 2080Ti | 11 GB | 50 Gb/s Ethernet |
| a100 | On-prem | 8x NVIDIA A100 (DGX) | 40 GB | 1.6 Tb/s InfiniBand |
| quad | On-prem | 4x NVIDIA Quadro RTX6000 | 24 GB | 200 Gb/s InfiniBand |
+------------- Heterogeneous setting (64 GPUs, simulated) ---------+
| 6x t4 node 3x rtx node 2x a100 node |
| +------------+ +--------------+ +-----------------+ |
| | 4x T4 16GB | | 8x 2080Ti | | 8x A100 40GB | |
| | cloud VM | | 11GB | | DGX-A100 | |
| | | | 50 Gb/s Eth | | 1.6 Tb/s IB | |
| +------------+ +--------------+ +-----------------+ |
| x6 = 24 x3 = 24 x2 = 16 |
| interconnect spread 50 -> 1600 Gb/s (32x); VRAM 11 -> 40 GB |
+------------------------------------------------------------------+
+--- Physical setting (44 GPUs, real): 3x rtx + 2x a100 + 1x quad -+
+--- Homogeneous setting (64 GPUs, simulated): 16x t4 node --------+
^ Fig 3: The three cluster settings. The heterogeneous cluster mixes a
50 Gb/s Ethernet node type with a 1.6 Tb/s InfiniBand node type, so
"which GPU type" is not reducible to "how fast is the GPU".
The interconnect spread matters more than the compute spread. Because scaling depends on a job's compute-to-network ratio, a node type can be the best choice at 1 GPU and the worst at 8: the paper states that GPU types can have distinct compute-to-network bandwidth ratios, so a job may scale better on one type even when single-GPU throughputs are ordered the other way.
2.2 Evaluation harness
+------------------------------------------------------------------+
| Trace samplers Model catalogue (Table 2) |
| Philly 10 x 8h S ResNet18/CIFAR-10 |
| Helios 10 x 8h ---------> M BERT/SQuAD, DeepSpeech2/ARCTIC|
| newTrace 10 x 48h L YOLOv3/PASCAL-VOC |
| 20 jobs/hr average XL ResNet50/ImageNet-1k |
| XXL 2.8B GPT/SQuAD |
| +---------------------------------------v------------------+ |
| | Scheduler under test | |
| | Sia | Pollux | Gavel+TJ | Shockwave+TJ | Themis+TJ | |
| +--------------------------+-------------------------------+ |
| +----------------+----------------+ |
| v v |
| +-------------------+ +--------------------------+ |
| | PHYSICAL | | SIMULATOR | |
| | 44 GPUs, 3 types | | Pollux discrete-time sim | |
| | 30 jobs, 3-h trace| | + Gavel, + Shockwave, | |
| | 4 repeat runs | | + heterogeneous Pollux, | |
| | | | + model-specific ckpt- | |
| | | | restore delays | |
| | | | 200 repeat runs | |
| +---------+---------+ +------------+-------------+ |
| +----------- cross-check ---------+ |
| < 5% error in avg JCT and makespan for Sia and |
| Gavel; Pollux does NOT cross-validate |
| v |
| Metrics: avg JCT, p99 JCT, makespan, GPU-hours/job, contention |
| (avg/max), restarts/job, FTF rho, unfair job fraction, policy |
| runtime (median / p95) |
+------------------------------------------------------------------+
^ Fig 4: Evaluation harness. The physical cluster is used once, at
44 GPUs, to validate the simulator; all breadth (cluster size,
arrival rate, parameter sweeps) comes from simulation.
2.3 Trace provenance and baseline conditioning
| Trace | Origin | Sampling |
|---|---|---|
| Philly | 100k jobs over two months, Microsoft multi-tenant cluster, multiple GPU types | 10 traces, 8 busiest hours, 20 jobs/hr, 160 jobs each |
| Helios | Saturn cluster, 3.3M jobs over six months, heterogeneous cluster with over 6k GPUs | 10 traces, 8 busiest hours, 20 jobs/hr, 160 jobs each |
| newTrace | Recent production system spanning multiple clusters with thousands of GPUs; VM-based, diurnal, bursts from hyper-parameter scripts | 10 traces over 48 h, 20 jobs/hr avg, 960 jobs each; arrival rate varies 5 to 100 jobs/hr |
Jobs are binned by total GPU time — Small (0-1 h), Medium (1-10 h), Large (10-100 h), Extra-large (>100 h) — and each bin maps onto representative models. XXL (2.8B GPT) is hybrid-parallel only.
| Baseline | Adjustment made to enable comparison |
|---|---|
| Gavel / Themis / Shockwave | TunedJobs (TJ): batch size and GPU count manually tuned per job. Search over (batch size, GPU count), GPU count <= 64 (Homogeneous) or <= 16 (Physical, Heterogeneous); pick a combination whose simulated runtime is 50-80% of ideal speedup over a 1-GPU baseline at the optimal batch size |
| Pollux on heterogeneous clusters | 8-GPU nodes presented as 2 virtual 4-GPU nodes to remove node-capacity heterogeneity; if Pollux still spans GPU types, pick the type with the most GPUs, ties broken toward the more powerful type (a100 > quad > rtx > t4) |
Defaults: p = -0.5, lambda = 1.1 for Sia;
p = -1 for Pollux and (10, 1e-1) for
Shockwave, both as in their original papers. Round duration 60 s for Sia
and Pollux, 360 s for Gavel, Themis and Shockwave. Gavel runs
max-sum-throughput, chosen because it gives Gavel the lowest average JCT
on Philly among its published policies.
3. Design-Space Diagram (axes swept, axes held fixed)
+------------------------------------------------------------------+
| SIA DESIGN SPACE |
| SWEPT AXES |
| A1 Scheduler policy (5): Sia, Pollux, Gavel+TJ, |
| Shockwave+TJ, Themis+TJ |
| A2 Cluster composition (3): Physical 44 (3 types), |
| Homogeneous 64 t4, Heterogeneous 64 (3 types) |
| A3 Trace (3): Philly 8h, Helios 8h, newTrace 48h |
| A4 Cluster size up to 2048 GPUs (traces scaled proportionally) |
| A5 Job arrival rate (Helios, 64 GPUs) |
| A6 Adaptivity class (3), also swept as a population fraction: |
| Adaptive (bsz + count + type), Strong-scaling (fixed bsz), |
| Rigid (fixed bsz + count; type free) |
| A7 Profiling regime (3): Oracle, No Prof, Bootstrap |
| A8 Fairness exponent p in [-1.0, 1.0], default -0.5 |
| A9 Scheduling round duration {30 s, 60 s, 300 s} |
| A10 Parallelism form (2): pure data parallel; pipeline-MP + |
| data parallel (2.8B GPT) |
| |
| HELD FIXED |
| - lambda = 1.1; Executor reporting interval 30 s |
| - Scale-up: start at 1 GPU, at most 2x growth per round |
| - LR scaling (square-root for AdamW, AdaScale for SGD) |
| - Configuration-set restriction and the three placement rules; |
| node-exclusive placement for distributed jobs |
| - Data parallelism with gradient all-reduce as scale-out |
| - Solver: GLPK_MI via CVXPY |
| - Non-data-parallel degrees of a hybrid job (pipeline depth, |
| tensor-parallel width) are NOT co-optimized |
| - Interconnect / collective configuration: never a decision |
| variable; communication time is only ever OBSERVED |
+------------------------------------------------------------------+
^ Fig 5: Ten swept axes and the fixed frame around them. Sia's own
action space is exactly three of these (GPU type, GPU count, batch
size); the rest are experimental conditions.
The last fixed item is the most consequential. Sia treats communication time as something to measure and predict, never to change: a configuration is a bundle of resources, not resources plus a communication strategy. Every result is a statement about resource assignment under a fixed communication regime.
4. Algorithm & Control Flow Diagrams
4.1 The configuration set
A configuration is a 3-tuple (n, r, t): n
nodes holding r resources of type t in total.
For N physical nodes with R GPUs of type
X each:
SINGLE-NODE set MULTI-NODE set
(n = 1, powers of 2, <= R) (whole nodes only)
+----------------------+ +----------------------+
| (1, 2^0, X) | | (2, 2R, X) |
| (1, 2^1, X) | U | (3, 3R, X) |
| ... | | ... |
| (1, R, X) | | (N, N*R, X) |
+----------------------+ +----------------------+
log2(R) entries N entries
|C| = N + log2(R) vs. Pollux search space O(N^R)
If R is not a power of 2: decompose R into a sum of powers of 2
and model one physical node as several virtual nodes.
Worked example (paper): 1 node of 2 type-A GPUs + 1 node of 4
type-B GPUs -> C = {(1,1,A),(1,2,A),(1,1,B),(1,2,B),(1,4,B)}
^ Fig 6: Configuration-set construction. Within a node, allocations
are powers of 2; across nodes, allocations consume whole nodes.
The Submesh Shape Covering theorem guarantees every valid allocation from this set admits a placement in which no two distributed jobs share a node — which is why the Placer never searches.
4.2 The bootstrapping ladder
The naive approach profiles many multi-GPU allocations per GPU type, at a cost growing linearly in both the number of GPU types and the nodes of each type. Sia climbs a ladder instead, replacing crude estimates with measured ones as the job runs.
(1) PROFILE J on ONE GPU of each type: min batchsize upward until
the GPU memory limit (~10 batchsizes), < 20 GPU-s per type
KEY: compute time is INDEPENDENT of GPU COUNT, because scaling
is data-parallel with all-reduce -- so only COMMUNICATION time
remains unknown
|
(2) INITIALIZE throughput models from the 1-GPU profiles
|
(3) Sia places J on 1 GPU of type A; online profiling learns a
statistical-efficiency model vs batch size and a refined 1-GPU
throughput model for A
|
(4) To estimate 2 GPUs of A: ONE-TIME SIMPLIFYING ASSUMPTION --
two data-parallel replicas give twice the throughput of one
(perfect scaling, zero communication time)
|
(5) Sia assigns 2 GPUs of A -> measured communication times ->
refine xput_A to cover compute AND communication
|
(6) Type B has never run multi-GPU. BOOTSTRAP it:
est-xput_B(N) = ( xput_B(1) / xput_A(1) ) * xput_A(N)
Assumption: B's compute:communication scaling matches A's
|
(7) If J ever runs multi-GPU on B -> refine xput_B from measured
communication times -> DISCARD the bootstrapped model
^ Fig 7: The bootstrapping ladder. Each rung replaces an assumption
with a measurement; the assumptions exist only to make the NEXT
exploratory allocation reasonable, not to be permanently trusted.
The load-bearing observation is at step (1). Because scale-out is pure data parallelism, per-GPU compute time does not change with GPU count, so the unknown collapses from a surface (count x batchsize) to a curve (communication vs count) — which is what makes one measured multi-GPU point enough to calibrate a whole type.
4.3 Goodput matrix to allocation
per-(job, GPU_type) throughput models
+ per-job statistical-efficiency models
v
Goodput estimators (f_A, f_B) for J1 ; (g_A, g_B) for J2
v
+---------------------------------------------+
| Goodput matrix G, size |J| x |C| |
| G_ij = goodput of job i in config j |
| ROWS comparable; COLUMNS ARE NOT |
+----------------------+----------------------+
| row-normalize: G_ij <- N_i^min * G_ij / min_j G_ij
| -> scale-free utility matrix, columns comparable
| restart discount: for J_i running c_k,
| G_ij <- r_i * G_ij for all c_j != c_k
| fairness exponent: entries raised to power p
| (default -0.5; if p < 0 flip the objective sign)
v
+---------------------------------------------+
| Binary ILP over A (same shape as G): |
| max_A sum_ij A_ij (r_i G_ij)^p |
| + lambda (1 - ||A_i||_1) |
| s.t. ||A_i||_1 <= 1 (<=1 config per job) |
| allocated GPUs <= available, per type |
+----------------------+----------------------+
v
A_i all-zero -> no resources this round; A_ij = 1 -> config c_j
^ Fig 8: Data flow from throughput models to a binary allocation
matrix. Row normalization is the step that converts "which config
is best for this job" into "which job deserves this config".
Normalizing by the row minimum, scaled by the job's minimum required
GPU count N_i^min, gives two properties the paper calls
out. G reads as a utility matrix — the largest entry along
a row is the best configuration for that job — and entries become
comparable down a column, so a configuration can go to the job
that values it most. Unnormalized, G_mj > G_nj does not
imply job m deserves j.
Worked example (Table 1), 1 node of 2 type-A + 1 node of 4 type-B:
| Job | (1,1,A) | (1,2,A) | (1,1,B) | (1,2,B) | (1,4,B) |
|---|---|---|---|---|---|
| J1 | 1 | 1 | 2 | 3 | 4 |
| J2 | 2 | 4 | 1 | 2 | 3 |
Maximizing the sum selects (1,4,B) for J1
and (1,2,A) for J2.
4.4 One scheduling round, end to end
ROUND BOUNDARY (every 60 s by default)
|
(1) Collect latest goodput-model parameters from every Adaptive
Executor (each refits every 30 s and pushes to Policy), add a
row to G per new job, delete rows for completed jobs
|
(3) Recompute restart factors r_i = (T_i - N_i*S_i) / (T_i + S_i)
T_i = job age, S_i = GPU-seconds per restart, N_i = prior
restart count
|
(4) Apply constraints for special job classes: non-preemptive jobs
and reservations force requested resources; rigid jobs use the
separate objective Eq. (5) over (job, GPU type) only;
strong-scaling jobs substitute throughput for goodput
|
(5) SOLVE the MILP with GLPK_MI (median 96 ms, p95 426 ms at 64 GPU)
|
(6) Diff new allocation A against current assignment
|
+-- unchanged --> job continues, no restart
|
+-- changed --> (7) PLACER assigns physical GPUs, minimizing
unnecessary migrations
(8) PREEMPT after the current minibatch (no comm
in flight): checkpoint model weights, data-
loader state and optimizer state to shared
storage; release GPUs
(9) RESTORE: one Adaptive Executor per GPU on the
new resources, restore, resume
|
NEXT ROUND
^ Fig 9: One scheduling round. The restart factor at step (3) is what
keeps step (8) from firing on every tiny change in G.
4.5 Placement rules and job states
Allocation (n, m, X) at Placer Job state machine
| [SUBMITTED]
v | submit(max_bsz,
partial-node (m < R)? | max_ngpus)
| v
+- yes -> must fit in ONE node [PROFILING] 1 GPU/type
| free node? -> PLACE v
+- no -> take n WHOLE nodes [QUEUED] <-------+
free nodes? -> PLACE | A_ij = 1 |
v v |
RESOURCE FRAGMENTATION [RUNNING] ------+ alloc
| | unchanged
v | alloc changed
EVICT some jobs and retry v
(rare; usually fewer than [CHECKPOINTING] after current
3 evictions at once) | minibatch only
v
[RESTORING] --> [RUNNING]
| target metric met
v
[COMPLETE]
also: epoch-boundary checkpoints allow resuming on different
resources after worker failure
^ Fig 10: Placement decision flow (left) and job state machine
(right). There is no search in the Placer -- the configuration-set
restriction already did that work. The RUNNING -> CHECKPOINTING
edge is what the restart factor makes expensive, since restart
costs are 25-250 seconds for the Table 2 models.
5. Quantitative Results — Empirical Findings by Regime
5.1 Physical cluster, 44 GPUs, 3 GPU types
Setting: 3 rtx + 1 quad + 2 a100 nodes; a single 3-hour trace of 30 jobs mixing all Table 2 models; each scheduler run four times.
| Comparison | Result |
|---|---|
| Sia vs Gavel, avg JCT | 50% lower |
| Sia vs Pollux, avg JCT | 35-50% lower |
| Simulator error, Sia and Gavel | < 5% in avg JCT and makespan |
| Simulator error, Pollux | Pollux performed significantly worse on the physical cluster than the simulator predicted |
The Pollux discrepancy is attributed to three causes: the simulator modifications gave Pollux an advantage on single jobs over heterogeneous resources; its schedules vary widely from randomness in the genetic optimization and misguided adaptivity from noisy throughput estimators; and real heterogeneity is mapped onto virtual nodes Pollux assumes homogeneous.
Behavioural trace over 45 minutes (Figure 5 of the paper): rising congestion makes Sia scale down and move the ImageNet job to rtx, freeing a100 for incoming CIFAR-10 jobs; when congestion falls, Sia shifts ImageNet back to a100 and scales DeepSpeech2 out on rtx.
5.2 Heterogeneous simulation, 64 GPUs (Table 3)
| Trace | Policy | Avg JCT | p99 JCT | Makespan | GPU-hrs/job | Contention avg | Contention max | Restarts/job |
|---|---|---|---|---|---|---|---|---|
| Philly | Sia | 0.6h ± 0.1 | 9.5h | 14.2 ± 1.9h | 4.0 ± 0.7 | 6.9 | 31 | 2.9 |
| Philly | Pollux | 1.0 ± 0.1h | 14.9h | 24.5 ± 7.9h | 5.6 ± 1.1 | 7.2 | 42 | 5.8 |
| Philly | Gavel+TJ | 1.9 ± 0.3h | 30.0h | 33.8 ± 8.6h | 9.0 ± 6.3 | 9.9 | 56 | 5.7 |
| Helios | Sia | 0.7 ± 0.1h | 10.9h | 14.9 ± 1.7h | 4.8 ± 0.7 | 7.4 | 32 | 3.4 |
| Helios | Pollux | 1.0 ± 0.2h | 15.0h | 25.5 ± 8.0h | 5.9 ± 0.7 | 6.9 | 47 | 5.3 |
| Helios | Gavel+TJ | 2.5 ± 0.9h | 38.7h | 43.0 ± 10.9h | 12.1 ± 3.7 | 9.2 | 48 | 7.5 |
| newTrace | Sia | 0.7 ± 0.1h | 4.6h | 52.2 ± 1.3h | 3.0 ± 0.1 | 13 | 69 | 5.0 |
| newTrace | Pollux | 1.5 ± 0.2h | 10.3h | 62.3 ± 4.6h | 3.4 ± 0.2 | 22 | 85 | 5.4 |
| newTrace | Gavel+TJ | 11.3 ± 3.0h | 98.1h | 110 ± 21.5h | 6.4 ± 1.1 | 96 | 243 | 4.5 |
Headline summary as stated in Section 5.2: Sia reduces average JCT by 30-93% and p99 JCT by 28-95% versus Pollux and Gavel, and allocates 12-60% fewer GPU hours per job.
The variance column is as informative as the mean — Sia's makespan error bars are ±1.3 to ±1.9 hours against Pollux's ±4.6 to ±8.0 and Gavel's ±8.6 to ±21.5 — and Pollux restarts jobs roughly twice as often as Sia on the moderately congested traces, attributed to Pollux optimizing in steps of 1 GPU while Sia moves in whole-node steps.
newTrace separates the schedulers most sharply, with bursts of up to 100 jobs/hr in the busiest hour. The paper describes a positive feedback loop for Gavel: rising contention forces more frequent swap-in/swap-out, burning GPU capacity on checkpoint-restore exactly when GPUs are scarce — reaching contention average 96 and maximum 243 against Sia's 13 and 69. At peak load Sia and Pollux both scale jobs to 1 GPU each, narrowing their gap, but Sia's type matching still improves cluster goodput.
5.3 Homogeneous simulation, 64 t4 GPUs, Philly traces (Table 4)
| Policy | Avg JCT | p99 JCT | Makespan | GPU hrs/job |
|---|---|---|---|---|
| Sia | 1.9h | 18.1h | 21.4h | 8.4h |
| Pollux | 2.0h | 19.3h | 21.7h | 8.6h |
| Shockwave+TJ | 3.6h | 32.8h | 35.0h | 12.5h |
| Themis+TJ | 5.4h | 44.7h | 49.7h | 17.2h |
| Gavel+TJ | 4.3h | 37.1h | 44.3h | 15.3h |
Restarts per job: Sia 2.6, Pollux 5.1.
This is the control condition — heterogeneity removed, so only adaptivity is in play, and Pollux was designed for exactly this. Sia matches and slightly exceeds Pollux on every metric, attributed to the ILP guaranteeing a global optimum where Pollux's genetic algorithm does not, plus fewer wasted GPU hours on checkpoint-restore. Both show a 50-70% improvement over the inelastic baselines on all metrics; among those, Shockwave is best because its objective targets job progress and finish-time fairness while penalizing large makespan.
5.4 Rigid-job regime (heterogeneity without adaptivity)
With auto-scaling and batch-size tuning disabled for both Sia and Pollux — every job pinned to the trace's batch size and GPU count — Sia still outperforms Gavel by about 25%, in the regime Gavel was designed for. The cause is the objective, not the mechanism: Sia maximizes summed goodput while Gavel maximizes cluster throughput, so with inelastic jobs Sia always delivers higher per-GPU goodput. Pollux also optimizes summed goodput but produces worse JCTs because it cannot see the heterogeneity.
Figure 1 frames the argument in three panels: Pollux and Sia win on adaptive jobs on a homogeneous cluster; Gavel and Sia win on rigid jobs on a heterogeneous cluster; in the middle case Sia beats both, with the middle trio of bars showing 40-70% lower average JCTs.
5.5 Matching jobs to GPU types (Figure 6, Helios traces)
| Observation | Detail |
|---|---|
| Sia's BERT policy | Allocates BERT almost exclusively to a100 GPUs |
| Sia's DeepSpeech2 policy | Prefers rtx, leaving a100 free for BERT |
| Gavel's behaviour | Time-sharing forces BERT to rotate between a100, rtx and t4, giving less-efficient execution |
| Pollux's behaviour | Heterogeneity-unaware; no distinct (job, GPU type) preferences |
| Cost of Sia's specialization | YOLOv3 and DeepSpeech2 consume about 5% more GPU hours under Sia than Pollux, because Pollux gives them more time on faster GPUs out of randomness |
5.6 Workload intensity sweep (Figure 7, Helios, 64 GPUs)
| Finding | Value |
|---|---|
| Sia vs Pollux across arrival rates | Sia consistently 50-65% better |
| Why both beat Gavel at high arrival rates | Sia and Pollux can scale running jobs down rather than time-share |
| Contention ratio, Gavel vs Sia, 48-hour newTrace | ~7x |
| Contention ratio, Gavel vs Sia, 8-hour traces | < 2x |
5.7 Hybrid-parallel jobs (Section 5.3)
Sia is presented as the first cluster scheduler able to elastically scale hybrid-parallel jobs.
| Setup element | Value |
|---|---|
| Model | 2.8B GPT, finetuned on SQuAD |
| Parallelism | Pipeline model parallelism within a replica; data parallelism with gradient all-reduce across replicas |
| Internal PMP schedule | GPipe |
| Pipeline stages, a100 | 2 (1 per GPU) |
| Pipeline stages, rtx | 8 (1 per GPU), more stages for smaller memory |
| Micro-batches per replica | 48 micro-batches of size 1 |
| Statistical efficiency profile | Borrowed from BERT (closest match) |
| Measured scaling | Throughput scales linearly with GPU count; computation dominates communication for this model |
| Observed adaptation | Sia scales the GPT job down around the 1-hour mark and back up around the 4-hour mark, following congestion |
Scaling rule: a job with N data-parallel replicas over a
P-GPU pipeline uses exactly N x P GPUs; with
mini-batch M and micro-batch m, each replica
computes M / (m*N) micro-batches across its P
GPUs, then the N replicas synchronize by gradient
all-reduce. The objective gains terms and constraints keeping
allocations in units of P.
5.8 Finish-time fairness (Figure 8, Helios, heterogeneous)
Finish-time fairness ratio rho is a job's completion
time in the shared cluster over its completion time in an isolated,
fair-sized cluster of N_gpus / N_avg GPUs. Sia extends it
as rho = sum_G P(G = g) * rho_g, the expectation of the
per-GPU-type ratio weighted by the share of cluster GPUs of type
g; with one GPU type this reduces to the original
definition.
| Scheduler | Worst FTF ratio | Unfair job fraction |
|---|---|---|
| Sia | 1.2 | < 0.3% |
| Shockwave | 3.3 | 14% |
| Pollux | 4.6 | 28% |
| Gavel | 27.8 | 15% |
The abstract states the same result as 64% lower worst-case finish-time fairness and 99% lower unfair job fraction. Shockwave beats Gavel and Pollux on unfair fraction because it penalizes jobs with high FTF ratios, trading worst-case ratio for fraction. Sia's advantage is behavioural: Gavel and Shockwave prioritize either makespan or long jobs, hurting short jobs during congestion, whereas Sia scales long jobs down during congestion to admit incoming short jobs and scales them back out afterwards.
5.9 Policy overhead and scalability (Figure 9)
64-GPU heterogeneous setting, Helios traces:
| Scheduler | Median policy runtime | p95 policy runtime |
|---|---|---|
| Gavel | 13 ms | 28 ms |
| Sia | 96 ms | 426 ms |
| Pollux | 2.2 s | 4.8 s |
Scaled to 2048 GPUs with proportionally sized Helios traces, Sia stays at a single-second runtime. Pollux's genetic algorithm runs roughly 100x slower and struggles to find optimal solutions at large cluster sizes from search-space explosion — without the extra complexity heterogeneity would add — and Section 2.1 adds that at 1000+ GPUs it takes tens of minutes. Gavel is faster than both because it does not consider job adaptation at all.
5.10 Parameter sensitivity (Figure 10)
| Fairness exponent finding | Detail |
|---|---|
| Effect on p99 JCT | Very evident: Sia allocates more GPUs to jobs that exploit both scale and newer GPU types well (particularly BERT and ImageNet); because those run long, p99 JCT drops sharply at the expense of average JCT |
p = 1.0 |
Higher unfair job fraction than p = -0.5 |
| Chosen default | p = -0.5, best across average JCT, average makespan and
finish-time fairness among all tested values |
| Range tested | -1.0 to 1.0, described as providing robust fairness with minimal negative impact on efficiency across that range |
| Round duration | Effect on average JCT |
|---|---|
| 30 s | Higher rate of re-allocations, worse than 60 s |
| 60 s (default) | Best |
| 300 s | Average JCT increased by 333 s (12%) |
No significant change in p99 JCT or makespan was observed across round durations, and policy optimization takes under a second even for moderate clusters, so 60 s is not a solver-imposed floor.
5.11 Adaptivity and profiling ablations (Figures 11, Helios/Philly)
| Adaptation dimensions available to Sia | Reported effect on avg JCT |
|---|---|
| GPU type only (Rigid jobs) | reference |
| GPU type + GPU count (Strong-scaling jobs) | 56% improvement |
| GPU type + GPU count + batch size (Adaptive jobs) | a further 13% improvement |
| Profiling regime | Description | Cost | Result |
|---|---|---|---|
| Oracle | Sia knows a job's throughput on any set of resources | 100s-1000s of placements across GPU types, 1-10 GPU hrs/job; impractical | Best-case reference |
| Bootstrap | Min-GPU profiles plus extrapolation (Section 3) | ~0.1 GPU hrs per job | 30% better than No Prof, only 8% worse than Oracle |
| No Prof | No initial profiling; profile-as-you-go | Zero | Worst |
Two supporting results: profiling two GPU counts per GPU type performed worse than Sia's minimized approach, and at 20 GPU types bootstrapping adds under 5% overhead to a job's execution.
6. Configuration-Regime Trade-off Tables
6.1 Scheduler posture toward the two degrees of freedom
| Dimension | Gavel (heterogeneity only) | Pollux (adaptivity only) | Sia (both) | Sia's choice |
|---|---|---|---|---|
| GPU type selection | Yes | No | Yes | Both |
| GPU count selection | No (user-specified) | Yes | Yes | Both |
| Batch size selection | No (user-specified) | Yes | Yes | Both |
| Homogeneous 64-GPU avg JCT | 4.3h | 2.0h | 1.9h | Sia |
| Heterogeneous Helios avg JCT | 2.5h | 1.0h | 0.7h | Sia |
| Worst FTF ratio | 27.8 | 4.6 | 1.2 | Sia |
| Median policy runtime at 64 GPUs | 13 ms | 2.2 s | 96 ms | Gavel on speed alone |
Sia's position: the two degrees of freedom are not
additive. Extending Gavel's (job_id, GPU_type) throughput
matrix to (job_id, GPU_type, num_GPUs, minibatch_size)
breaks twice — filling a non-trivial portion needs extensive per-job
profiling, and the program becomes too large to solve quickly. Sia
answers both: bootstrapping for the first, configuration-set restriction
for the second.
6.2 Search-space formulation and configuration granularity
| Dimension | Genetic search (Pollux) | Linear program (Gavel) | Restricted ILP (Sia) | Winner |
|---|---|---|---|---|
| Search space size | O(N^R) |
(job, GPU_type) pairs only |
N + log2(R) configs |
Sia |
| Optimality guarantee | None | Yes, within its space | Global optimum within C |
Sia |
| Runtime at 2048 GPUs | ~100x Sia; tens of minutes at 1000+ GPUs | Fast | ~1 s | Sia |
| Run-to-run variance | High (randomness in optimization) | Low | Low | Sia / Gavel |
| Allocation step size | 1 GPU | User-specified, fixed | Powers of 2 within node; whole nodes across | Pollux on flexibility |
| Restarts/job (Philly, heterogeneous) | 5.8 | 5.7 | 2.9 | Sia |
| Restarts/job (homogeneous) | 5.1 | (not reported separately) | 2.6 | Sia |
| Cross-job NIC contention | Possible | Possible | Eliminated for distributed jobs | Sia |
Sia's position: shrink the space until an exact solver fits rather than keeping it large and accepting a heuristic. Fine granularity is a liability once restarts cost 25-250 seconds — coarse steps change the solver's output less often, so more allocated GPU-hours are spent training.
6.3 Throughput-model acquisition
| Dimension | Exhaustive profiling | No profiling | Bootstrap (Sia) | Winner |
|---|---|---|---|---|
| Cost scaling | Linear in GPU types x nodes per type | None | < 20 GPU-s per type; < 5% job overhead at 20 GPU types | Bootstrap |
| First-round decision quality | Perfect | Blind | Informed by 1-GPU profiles per type | Bootstrap |
| Failure mode | Wastes cluster capacity | Wastes rounds exploring | Crude for types not yet run multi-GPU | -- |
Sia's position: profile only what cannot be inferred — the single-GPU point per type — and let the allocation policy supply the rest as a side effect of running the job. Profiling two GPU counts per type was tested and performed worse, so the minimum is also the best.
6.4 Fairness mechanism
| Dimension | Themis (explicit objective) | Shockwave (penalty term) | Sia (utility exponent p) |
Winner |
|---|---|---|---|---|
| Worst FTF ratio | (not in Fig. 8) | 3.3 | 1.2 | Sia |
| Unfair job fraction | (not in Fig. 8) | 14% | < 0.3% | Sia |
| Homogeneous avg JCT | 5.4h | 3.6h | 1.9h | Sia |
| Mechanism cost | Dedicated objective | Dedicated penalty term | One scalar exponent on an existing matrix | Sia |
Sia's position: fairness is nearly free because the row-normalized matrix is already scale-free — a power reshapes how sharply the objective favours high-utility matches without a second objective. Elasticity is the primary congestion valve and type matching the secondary one, which is why the Sia-Pollux gap narrows but does not close at peak load.
7. Bottlenecks & Insights Surfaced by the Measurements
The search space, not the model, was the blocking problem. Pollux's per-round solve takes 2.2 s median at 64 GPUs and tens of minutes at 1000+ GPUs, before heterogeneity multiplies the space, and Gavel's fast LP could not extend to adaptivity because the extended throughput matrix becomes both unfillable and unsolvable. Sia's contribution is less a better model of job behaviour than a better-shaped decision variable.
Compute time is GPU-count-invariant, and that is the whole profiling trick. Because scale-out is pure data parallelism with all-reduce, per-GPU compute time depends on batch size and GPU type but not count. The unknown collapses from a surface to a curve, letting one measured multi-GPU point per type complete a model and letting Equation (1) transfer that curve to an unmeasured type by a single ratio.
Restart cost is the hidden budget every adaptive scheduler spends. Checkpoint-restore costs 25-250 seconds for the Table 2 models, and Pollux restarts about twice as often as Sia, tied to its 1-GPU allocation granularity. Gavel's newTrace collapse is the same mechanism at an extreme: time-sharing under contention pays restart costs when the cluster can least afford them, driving contention to an average of 96.
Elasticity in GPU count carries more value than batch-size co-adaptation. Adding GPU-count optimization on top of GPU-type optimization improves average JCT by 56%; adding batch-size optimization adds a further 13%. Since batch-size adaptation carries the model-quality risk — the paper acknowledges a generalization gap at large batch sizes — a cluster forbidding batch-size changes still captures most of the benefit.
Specialization has a small cost. Sia sends BERT almost exclusively to a100 and DeepSpeech2 to rtx, so YOLOv3 and DeepSpeech2 consume roughly 5% more GPU hours than under heterogeneity-unaware Pollux — a per-job evaluation on DeepSpeech2 alone would report a loss.
Fairness improved as a by-product of goodput optimization. Sia's worst FTF ratio of 1.2 and unfair fraction below 0.3% beat Shockwave's 3.3 and 14%, despite Shockwave being purpose-built for fairness. Gavel and Shockwave prioritize makespan or long jobs and hurt short jobs during congestion, while Sia's congestion response happens to be the short-job-friendly policy — fairness emergent from elasticity rather than legislated.
The simulator validated for two of three schedulers. Under 5% error for Sia and Gavel, but Pollux performed significantly worse in reality than in simulation. Since Pollux is the strongest simulated baseline, the asymmetry cuts in Sia's favour.
8. Limitations of the Methodology
Breadth comes from simulation. Only one experiment runs on real hardware: 44 GPUs, a single 3-hour trace of 30 jobs, four repeats, three schedulers. Every claim about cluster size, arrival rate, parameter sensitivity, fairness, hybrid parallelism and profiling regime is simulated. The paper explains why — dedicated time on the on-premise nodes required blocking out all other users — and cross-validates the simulator, but that validation covers Sia and Gavel and explicitly fails for Pollux.
Baselines are hand-tuned, and Pollux runs outside its envelope. Gavel, Themis and Shockwave use TunedJobs, in which the authors chose each job's batch size and GPU count by searching for a configuration whose runtime lands at 50-80% of ideal speedup — a heuristic band, not an optimum, so neither a floor nor a strict upper bound on those schedulers. Making Pollux run on heterogeneous clusters required virtual 4-GPU nodes plus a majority-type heuristic that the paper itself calls imperfect; those numbers are "Pollux plus an adapter".
Reported ranges are inconsistent across the paper's own sections. The abstract gives 12-55% for GPU-hours reduction while the introduction and Section 5.2 give 12-60%; the abstract folds makespan into the 28-95% p99 range while the introduction gives it separately as 38-65%. A reader quoting a single range should say which section it came from.
Statistical efficiency modelling is inherited, not evaluated. The Goodput Estimator combines Sia's throughput model with a Gradient Noise Scale-based statistical efficiency model borrowed from Pollux, never validated here; for the 2.8B GPT experiment the profile is borrowed from BERT. Model-quality outcomes — accuracy, F1, mAP — are not reported anywhere; jobs are simulated as running to a target metric rather than measured as reaching it.
Hybrid-parallel support is partial by construction. Sia scales such jobs only by replicating a fixed pipeline configuration data-parallel-wise; pipeline depth and tensor-parallel width are fixed at submission, and the paper defers elastic scaling without fixing those degrees to future work because existing hybrid-parallel optimizers are time-consuming. The GPT result is also simulated.
The bootstrap transfer assumption is validated only in aggregate. Equation (1) assumes an unmeasured GPU type's compute-to-communication scaling ratio matches a measured one's, over a testbed spanning 50 Gb/s Ethernet to 1.6 Tb/s InfiniBand. The defence is end-to-end — Bootstrap lands within 8% of Oracle — not a direct measurement of Equation (1)'s prediction error; the model is discarded as soon as a real multi-GPU measurement arrives, limiting how long error persists.
No memory-capacity or failure experiments, and a single solver. Gradient accumulation (for batch sizes exceeding GPU memory) and checkpoint-based recovery from worker failures are described but never measured. All results use GLPK_MI through CVXPY on one ILP formulation, with no comparison against other solvers or a well-tuned greedy heuristic over the same restricted set, so reported runtimes characterize this implementation, not the formulation's difficulty.
9. Note on NCCL Tuning
Sia's throughput model rests on a factorization that is directly useful when reasoning about collective-library configuration: because scale-out is data-parallel, per-GPU compute time is invariant to GPU count, so the only quantity that must be learned as a function of scale is communication time. That reduction is what makes a single measured multi-GPU point per hardware type sufficient, and Equation (1) then transfers the measured scaling curve to an unmeasured type by one ratio of single-GPU throughputs — an explicit bet that the compute-to-communication balance behaves similarly across hardware, made on a testbed spanning a 32x interconnect range — the same bet made whenever a configuration learned on one interconnect is reused on another. Sia also removes cross-job NIC interference by construction rather than modelling it, so its communication measurements are clean by design, a property any measurement-driven tuner must reproduce deliberately for its observations to mean much.
10. Analogy
Sia is a hospital operating-theatre scheduler for a hospital with both a brand-new robotic surgical suite and several older conventional theatres, where every operation can also be performed by a variable-sized surgical team.
The theatres are GPU types and the team sizes are GPU counts. Gavel knows which theatre suits which operation but insists the surgeon name the team size at booking; Pollux sizes teams beautifully but believes all theatres are identical. Figure 1's outer panels show each winning in its own hospital. The middle panel is the real hospital, where a cardiac case that runs three times faster in the robotic suite is sent to a conventional theatre by one scheduler and given a six-person team by the other.
The profiling story maps precisely. You cannot rehearse every operation in every theatre with every team size — the Oracle regime, 1 to 10 GPU-hours per job. So Sia times a single surgeon performing the operation in each theatre, under 20 seconds of theatre time apiece. Because the surgical work per surgeon does not change when you add surgeons — only the coordination overhead does — one timed two-surgeon run in one theatre reveals the whole coordination curve, which then transfers to the other theatres by the ratio of their single-surgeon times. That is Equation (1), discarded the moment a real multi-surgeon run happens there.
The configuration set is the hospital's booking rule: within a theatre you may book 1, 2, 4 or 8 surgeons; across theatres you must book whole theatres. It looks arbitrarily coarse until you notice what it buys — every bookable request is guaranteed a physical arrangement, so the booking desk needs three rules instead of a second optimizer, and no two multi-theatre operations share a corridor, which is the elimination of NIC contention. That Sia matches Pollux in the single-theatre hospital while offering fewer booking options is the evidence surgeons were not using the finer options well.
The restart factor is the rule that you do not move a patient mid-procedure for a marginal improvement, because scrubbing out and back in costs 25 to 250 seconds. Pollux, booking in single-surgeon increments, reschedules and pays that cost twice as often. Gavel under a surge rotates every patient through every theatre in turn, so at the busiest hour the corridors hold 243 waiting cases against Sia's 69. The fairness result falls out of the same behaviour rather than a separate rule — when the hospital fills up, Sia shrinks the long operations to make room for the short ones and grows them again when the pressure lifts, which is exactly the policy that keeps a twenty-minute procedure from waiting all day behind a twelve-hour one.