Experiential Fairness Scheduling for Large Language Model Inference Services
ExFairS introduces Experiential Fairness - a user-centric approach to fairness optimization in LLM serving systems. Unlike traditional schedulers that focus solely on system-level metrics, ExFairS formulates a composite metric that unifies user SLO compliance with system resource consumption to guide scheduling decisions.
- User-Centric Fairness: Bridges the gap between system metrics and actual user experience
- Real-time Monitoring: Continuous monitoring with dynamic priority adjustment
- Composite Metric: Unifies SLO compliance with resource consumption
- Proven Performance: Reduces SLO violation rates while improving fairness
git clone https://github.com/dadiaokua/ExFairS.git
cd ExFairS
pip install -r requirements.txt# Run single scenario
./run.sh --scenario scenario_I --strategy QUEUE_ExFairS
# Run all strategies for comparison
./run.sh --scenario scenario_I
# Run all scenarios
./run.sh --all# Visualize results
python3 scripts/visualize_results.py scenario_IExFairS uses a real-time monitoring architecture instead of round-based evaluation:
T0 ─────── T60s ─────── T120s ─────── T180s ─────── ... ─────── T600s
│ │ │ │ │
│ Window1 │ Window2 │ Window3 │ ... │ End
│ Collect │ Collect │ Collect │ │
│ SAFI │ SAFI │ SAFI │ │
│ Adjust │ Adjust │ Adjust │ │
- Continuous Monitoring: Background thread collects data every 60 seconds
- Real-time SAFI Calculation: Fairness metrics updated without blocking inference
- Dynamic Alpha Adjustment: Weight parameter adapts based on fairness variance
- Immediate Priority Update: New priorities applied instantly to incoming requests
RealtimeMonitor: Main monitoring classClientStats: Window-based client statisticsRequestQueueManager: Queue management with scheduling strategies
| Strategy | Description | Focus |
|---|---|---|
| ExFairS | Experiential Fairness Scheduling | User experience + efficiency |
| Justitia | Virtual time-based scheduling | Short job prioritization |
| SLOGreedy | SLO violation greedy | SLO compliance |
| VTC | Variable Token Credits | Token fairness |
| FCFS | First Come First Serve | Simplicity |
| Scenario | Description | Clients |
|---|---|---|
scenario_I |
Balanced load | 2 Mix clients |
scenario_II |
Imbalanced load | 2 Mix clients |
scenario_III |
Heterogeneous 4 | 4 Mix clients |
scenario_IV |
Heterogeneous 8 | 8 Mix clients |
scenario_V |
High concurrency | 20 Mix clients |
name: scenario_I
clients:
- type: Mix
count: 1
qpm: 20
slo: 20
- type: Mix
count: 1
qpm: 60
slo: 20GLOBAL_CONFIG = {
"alpha": 0.8, # Initial alpha weight
"fairness_ratio_exfairs": 0.05, # Exchange threshold
"max_exchange_times": 3, # Max exchanges per window
"ADJUST_SENSITIVITY": 2.0, # Priority adjustment sensitivity
}results/run_<timestamp>/
├── metadata.json
├── run.log
└── <scenario>/
├── <strategy>/
│ ├── results.json # Final statistics
│ ├── benchmark_results.json # Monitor history
│ ├── realtime_metrics_*.png # Trend visualization
│ └── performance_metrics_*.png
└── charts/
└── performance.png # Strategy comparison
ExFairS/
├── config/
│ ├── scenarios/ # Scenario configurations
│ └── vllm/ # vLLM engine config
├── BenchmarkClient/ # Client implementation
├── BenchmarkMonitor/ # RealtimeMonitor
├── RequestQueueManager/ # Queue and scheduling
├── scripts/ # Benchmark and visualization
├── util/ # Utility functions
├── results/ # Experiment results
└── run.sh # Main entry point
- Quick Start - 5-minute getting started
- Visualization Guide - Result analysis
- Ubuntu Setup - Environment setup
- Python 3.7+
- PyTorch
- vLLM
- transformers
- matplotlib
- numpy
Apache 2.0 License - see LICENSE for details.