Pensieve is a system that generates adaptive bitrate algorithms using reinforcement learning. https://web.mit.edu/pensieve/
- Install prerequisites (tested with Ubuntu 16.04, Tensorflow v1.1.0, TFLearn v0.3.1 and Selenium v2.39.0)
python setup.py
- To train a new model, put training data in
sim/cooked_traces
and testing data insim/cooked_test_traces
, then insim/
runpython get_video_sizes.py
and then run
python multi_agent.py
The reward signal and meta-setting of video can be modified in multi_agent.py
and env.py
. More details can be found in sim/README.md
.
- To test the trained model in simulated environment, first copy over the model to
test/models
and modify theNN_MODEL
field oftest/rl_no_training.py
, and then intest/
runpython get_video_sizes.py
and then run
python rl_no_training.py
Similar testing can be performed for buffer-based approach (bb.py
), mpc (mpc.py
) and offline-optimal (dp.cc
) in simulations. More details can be found in test/README.md
.
- To run experiments over mahimahi emulated network, first copy over the trained model to
rl_server/results
and modify theNN_MODEL
filed ofrl_server/rl_server_no_training.py
, and then inrun_exp/
run
python run_all_traces.py
This script will run all schemes (buffer-based, rate-based, Festive, BOLA, fastMPC, robustMPC and Pensieve) over all network traces stored in cooked_traces/
. The results will be saved to run_exp/results
folder. More details can be found in run_exp/README.md
.
- To run real-world experiments, first setup a server (
setup.py
automatically installs an apache server and put needed files in/var/www/html
). Then, copy over the trained model torl_server/results
and modify theNN_MODEL
filed ofrl_server/rl_server_no_training.py
. Next, modify theurl
field inreal_exp/run_video.py
to the server url. Finally, inreal_exp/
run
python run_exp.py
The results will be saved to real_exp/results
folder. More details can be found in real_exp/README.md
.