Scheduling Pipeline Flowchart
Queue Design
Jobs specify
gpu_count, gpu_memory_min, nvlink_required, and max_duration. The scheduler sorts by priority, then by fair-share deficit, then by submission time.
Priority and Preemption
Critical priority is reserved for regression gates and production deployment validation. Critical jobs can preempt Normal and Low jobs. Preempted jobs are checkpointed and requeued at their original priority. Preemption requires:- Experiment state checkpoint in ArtifactStore
- GPU memory state saved via framework checkpoint (PyTorch checkpoint)
- Job requeued with
preempted=trueflag
Fair-Share Allocation
Each user or project receives a fair-share weight. The scheduler tracks GPU-hours consumed per entity. Entities below their fair-share target receive scheduling preference. Weights are configurable per project. Formula:score = priority * (1 + (target - consumed) / target)
Multi-Node and Topology Awareness
Multi-node jobs requestnode_count * gpu_per_node. The scheduler attempts to place all GPUs within the same rack or NVLink domain to minimize cross-node communication.
NVLink groups: GPUs connected via NVLink are treated as a single scheduling unit. Jobs requesting NVLink are placed entirely within one group or rejected if no group has sufficient capacity.
Topology labels: Each GPU worker advertises nvlink_group_id, rack_id, and network_bandwidth_gbps. The scheduler uses these labels for affinity and anti-affinity rules.