-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest_all_envs.py
128 lines (102 loc) · 4.78 KB
/
test_all_envs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import datetime
import itertools
import os
import random
import sys
import time
from math import ceil
import ray
import test
import test_ared
import test_droptail
from gym_lr.rl_src.configurations import SINGLE_SWITCH_EVAL_TOPO_PARAMS, SINGLE_RED_SWITCH_EVAL_TOPO_PARAMS, \
PACKET_SIZE_BYTES, get_buffer_size, TEST_DELAYS, TEST_NUM_OF_SENDERS, TEST_BUFFERS, LSTM_SIZE
def run_test(test_label, checkpoint):
real_net, agent, env = test.build_setup(label=test_label, topo_params=SINGLE_SWITCH_EVAL_TOPO_PARAMS,
agent_checkpoint=checkpoint)
delays = TEST_DELAYS
senders = TEST_NUM_OF_SENDERS
buffers = [TEST_BUFFERS]
bw = 1000
for (delay, no_senders, buf) in list(itertools.product(delays, senders, buffers)):
buf = get_buffer_size(bw=bw, delay=delay, senders=no_senders) if buf is None else buf
eval_topo_parmas = {
"delay": delay,
"buf_size": buf,
"bw": bw,
"no_senders": no_senders,
}
label = f"{test_label}/rl_bw_{bw}_delay_{delay}_buf_{buf}_senders_{no_senders}"
test.change_setup_params(label, real_net, agent, env, eval_topo_parmas)
print(label)
seed = int(random.uniform(0, 2 ** 32 - 1))
agent.workers.foreach_worker(
lambda ev: ev.foreach_env(
lambda env: env.seed(seed)))
random.seed(seed)
test.test_single_env(eval_topo_parmas, real_net, agent, env, real_net.start_senders_iperfs)
env.reset_episodes()
# agent.workers.foreach_worker(lambda ev: ev.foreach_env(lambda env: env.reset_episodes()))
test.close_all(env, real_net, agent)
# ARED
real_net, agent, env = test_ared.build_setup(label=test_label, topo_params=SINGLE_RED_SWITCH_EVAL_TOPO_PARAMS)
for min_thresh_r in [0.1, 0.2, 0.3]:
for (delay, no_senders, buf) in list(itertools.product(delays, senders, buffers)):
buf = get_buffer_size(bw=bw, delay=delay, senders=no_senders) if buf is None else buf
eval_topo_parmas = {
"delay": delay,
"buf_size": buf,
"bw": bw,
"no_senders": no_senders,
"limit": buf * PACKET_SIZE_BYTES,
"min": buf * PACKET_SIZE_BYTES * min_thresh_r,
"max": buf * PACKET_SIZE_BYTES * min_thresh_r * 3,
"burst": 1 + ceil(buf * min_thresh_r),
"red_max_p": 0.1,
}
label = f"{test_label}/ared_min_{int(min_thresh_r * 100)}_bw_{bw}_delay_{delay}_buf_{buf}_senders_{no_senders}"
test_ared.change_setup_params(label, real_net, agent, env, eval_topo_parmas)
print(label)
seed = int(random.uniform(0, 2 ** 32 - 1))
agent.workers.foreach_worker(
lambda ev: ev.foreach_env(
lambda env: env.seed(seed)))
random.seed(seed)
test_ared.test_single_env(eval_topo_parmas, real_net, agent, env, real_net.start_senders_iperfs)
env.reset_episodes()
# agent.workers.foreach_worker(lambda ev: ev.foreach_env(lambda env: env.reset_episodes()))
test_ared.close_all(env, real_net, agent)
# Droptail
real_net, agent, env = test_droptail.build_setup(label=test_label, topo_params=SINGLE_SWITCH_EVAL_TOPO_PARAMS)
for (delay, no_senders, buf) in list(itertools.product(delays, senders, buffers)):
buf = get_buffer_size(bw=bw, delay=delay, senders=no_senders) if buf is None else buf
eval_topo_parmas = {
"delay": delay,
"buf_size": buf,
"bw": bw,
"no_senders": no_senders,
}
label = f"{test_label}/droptail_bw_{bw}_delay_{delay}_buf_{buf}_senders_{no_senders}"
test.change_setup_params(label, real_net, agent, env, eval_topo_parmas)
print(label)
seed = int(random.uniform(0, 2 ** 32 - 1))
agent.workers.foreach_worker(
lambda ev: ev.foreach_env(
lambda env: env.seed(seed)))
random.seed(seed)
test_droptail.test_single_env(eval_topo_parmas, real_net, agent, env, real_net.start_senders_iperfs)
env.reset_episodes()
# agent.workers.foreach_worker(lambda ev: ev.foreach_env(lambda env: env.reset_episodes()))
test.close_all(env, real_net, agent)
if __name__ == '__main__':
os.nice(-20)
# label = "test_"
label = sys.argv[1]
cp = sys.argv[2]
start = time.time()
print(f'Starting multi-topology test real run at {datetime.datetime.now().isoformat(sep=" ", timespec="seconds")}')
ray.init()
run_test(label, checkpoint=cp)
ray.shutdown()
print(f'Completed at {datetime.datetime.now().isoformat(sep=" ", timespec="seconds")} ; '
f'{str(datetime.timedelta(seconds=time.time() - start))}')