Decouple and Decompose: Scaling Resource Allocation through a Different Lens
Project description
DeDe is a general, scalable, and theoretically grounded optimization framework that accelerates large-scale resource allocation problems through a decouple-and-decompose approach.
Getting started
Hardware requirements
- Linux OS
- A multi-core CPU instance
Dependencies
- Python >= 3.8
g++(required bycvxpy)- (optional) install
pytestwithpip install -U pytest
Installation
We have made DeDe available as a PyPI package! You can simply install it using pip:
pip install dede
- We recommend creating a Python virtual environment (e.g., venv or Conda) before installation.
Code structure
.
├── dede/ # core source code
├── tests/ # test suite
│ └── test_dede.py
└── examples/ # example use cases
├── traffic_engineering/
├── cluster_scheduling/
└── load_balancing/
Using DeDe
DeDe adopts a familiar interface from cvxpy, e.g., Variable(.), Minimize(.).
Key differences in DeDe:
- DeDe requires specifying separate
resource_constraintsanddemand_constraintswhen constructing a problem. - The
solve(.)method includes additional parameters:enable_dede: enables DeDe ifTrue; defaults tocvxpyifFalse.num_cpus: number of CPU cores (defaults to all available cores).rho: ADMM parameter.num_iter: maximum number of iterations; if not specified, DeDe stops if the accuracy improvement falls below 1%.
Toy examples
A toy example for resource allocation with DeDe is as follows:
import dede as dd
N, M = 100, 100
# Create allocation variables
x = dd.Variable((N, M), nonneg=True)
# Create the constraints
resource_constraints = [x[i,:].sum() >= i for i in range(N)]
demand_constraints = [x[:,j].sum() <= j for j in range(M)]
# Create an objective
objective = dd.Minimize(x.sum())
# Construct the problem
prob = dd.Problem(objective, resource_constraints, demand_constraints)
# Solve the problem with DeDe on 4 CPU cores
print(prob.solve(num_cpus=4, solver=dd.ECOS))
Another toy example is provided in tests/test_dede.py. To test these examples quickly, from the project root directory, run
./tests/test_dede.py
or, if pytest is installed:
pytest
Example output screenshots are provided in the assets folder.
Example use cases of DeDe
We provide three example applications of DeDe:
- Traffic engineering: a network flow optimization problem.
- Cluster scheduling: a resource allocation problem in cluster computing.
- Load balancing: a query balancing problem in distributed stores.
Please refer to examples/README.md for details.
Citation
If you use DeDe in your research, please cite our paper:
@inproceedings{dede,
title={{Decouple and Decompose: Scaling Resource Allocation with DeDe}},
author={Xu, Zhiying and Yu, Minlan and Yan, Francis Y.},
booktitle={Proceedings of the USENIX OSDI 2025 Conference},
month=jul,
year={2025}
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dede-0.1.6.tar.gz.
File metadata
- Download URL: dede-0.1.6.tar.gz
- Upload date:
- Size: 12.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95672377253b369a37f2b1d132edfc483dad64972ac573cfec53a5711ecf1baf
|
|
| MD5 |
7a4969e49efc8b1735e16a1533aa1f69
|
|
| BLAKE2b-256 |
575b160297cff9743af4fd3d551a638cc5c1eee705f18b8874ddeb6ce19b4215
|
File details
Details for the file dede-0.1.6-py3-none-any.whl.
File metadata
- Download URL: dede-0.1.6-py3-none-any.whl
- Upload date:
- Size: 11.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5900f678fcbfced134fa87539949b19489bf4c23dddaa9fab0d351fa8ef1a154
|
|
| MD5 |
aebae6e33cde937f9830385696ed2ace
|
|
| BLAKE2b-256 |
74c34f3a6c01c35e2011be822bb2899ec03df4f1507bc90e475e5431685f8ac1
|