-
Notifications
You must be signed in to change notification settings - Fork 0
/
calculate_costs.py
172 lines (166 loc) · 11 KB
/
calculate_costs.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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
from pandas import read_csv
from algorithms_training import training_models
import argparse
lags = {
'cpu': {
'arima': [10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
'da-rnn': [20, 20, 20, 10, 60, 10, 30, 30, 30, 10],
'deep-ar': [40, 30, 60, 50, 40, 40, 20, 10, 30, 40],
'deep-state': [10, 10, 60, 50, 20, 60, 10, 60, 60, 50],
'lstm': [10, 10, 20, 10, 20, 20, 60, 30, 40, 50],
'mlp': [10, 10, 10, 10, 60, 40, 20, 20, 20, 40],
'rf': [10, 20, 20, 10, 40, 60, 10, 10, 30, 60],
'svr': [10, 10, 20, 10, 60, 50, 60, 50, 30, 10],
'tft': [10, 40, 50, 10, 60, 20, 20, 10, 30, 10],
'xgboost': [10, 30, 10, 60, 60, 10, 50, 10, 50, 20]
},
'memory': {
'arima': [10, 10, 10, 10, 10, 10, 20, 10, 10, 10],
'da-rnn': [20, 40, 30, 10, 60, 10, 10, 50, 20, 20],
'deep-ar': [50, 40, 50, 60, 50, 40, 50, 60, 60, 60],
'deep-state': [60, 50, 60, 50, 20, 60, 10, 10, 50, 50],
'lstm': [40, 40, 10, 40, 20, 30, 60, 10, 40, 40],
'mlp': [30, 60, 20, 60, 40, 50, 40, 60, 30, 50],
'rf': [40, 20, 10, 30, 60, 60, 30, 40, 60, 50],
'svr': [30, 30, 10, 30, 50, 60, 40, 20, 50, 60],
'tft': [60, 60, 30, 40, 30, 10, 10, 50, 60, 40],
'xgboost': [10, 50, 40, 10, 40, 40, 10, 50, 40, 40]
},
'response_time': {
'arima': [10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
'da-rnn': [40, 30, 10, 50, 10, 30, 10, 40, 10, 40],
'deep-ar': [40, 20, 40, 60, 50, 30, 60, 40, 60, 10],
'deep-state': [40, 60, 10, 50, 50, 30, 20, 30, 10, 20],
'lstm': [30, 50, 50, 30, 60, 40, 60, 10, 10, 40],
'mlp': [20, 50, 60, 30, 30, 40, 30, 10, 10, 10],
'rf': [30, 40, 20, 30, 20, 60, 30, 10, 20, 40],
'svr': [10, 20, 20, 40, 30, 20, 10, 60, 50, 10],
'tft': [10, 60, 40, 40, 50, 60, 50, 50, 20, 10],
'xgboost': [10, 50, 30, 40, 40, 20, 60, 50, 20, 60]
},
'traffic': {
'arima': [10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
'da-rnn': [60, 60, 20, 30, 40, 40, 60, 30, 10, 10],
'deep-ar': [50, 30, 50, 50, 50, 20, 10, 20, 30, 40],
'deep-state': [50, 20, 40, 20, 10, 10, 30, 30, 60, 20],
'lstm': [40, 10, 50, 50, 60, 10, 50, 60, 50, 60],
'mlp': [50, 20, 60, 40, 10, 30, 40, 10, 10, 20],
'rf': [20, 10, 10, 10, 60, 40, 40, 10, 10, 10],
'svr': [40, 30, 20, 10, 50, 30, 60, 10, 30, 30],
'tft': [40, 50, 60, 40, 60, 50, 50, 30, 20, 40],
'xgboost': [60, 10, 50, 30, 60, 20, 50, 10, 10, 40]
}
}
parameters = {
'cpu': {
'arima': [[1, 1, 3], [1, 1, 2], [1, 1, 2], [0, 1, 3], [8, 0, 2], [2, 1, 3], [5, 0, 2], [2, 1, 2], [2, 1, 2],
[1, 1, 4]],
'da-rnn': [[16], [16], [32], [16], [32], [16], [32], [64], [16], [64]],
'deep-ar': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'deep-state': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'lstm': [[2, 75, 0.01], [2, 125, 0.001], [2, 75, 0.01], [2, 75, 0.01],
[2, 125, 0.001],
[2, 50, 0.01], [2, 50, 0.01], [2, 50, 0.001], [2, 125, 0.001], [3, 125, 0.001]],
'mlp': [['logistic', 15], ['logistic', 15], ['logistic', 15], ['logistic', 20], ['logistic', 20],
['logistic', 20], ['logistic', 20], ['logistic', 20], ['logistic', 20], ['logistic', 20]],
'svr': [[0.1, 0.001, 1, 'rbf'], [10, 0.0001, 0.1, 'rbf'], [1, 0.0001, 0.1, 'rbf'], [100, 0.001, 0.001, 'rbf'],
[100, 0.001, 0.01, 'rbf'], [1000, 0.0001, 0.001, 'rbf'], [10, 0.001, 0.1, 'rbf'],
[100, 0.001, 0.01, 'rbf'], [10000, 0.0001, 0.001, 'sigmoid'], [1000, 0.0001, 0.001, 'sigmoid']],
'rf': [[10, 5, 100], [5, 15, 1000], [1, 15, 500], [1, 15, 500], [1, 15, 500],
[1, 2, 100], [5, 10, 1000], [10, 10, 100], [1, 10, 500], [1, 15, 100]],
'tft': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'xgboost': [[0.6, 1, 1, 10, 200, 0.1, 0.01], [0.8, 1, 1, 3, 150, 0.01, 0.1], [0.8, 1, 0.1, 6, 100, 0.01, 0.01],
[0.8, 1, 0.01, 10, 200, 0.1, 0.01], [0.4, 5, 0.1, 6, 100, 0.01, 0.01],
[0.6, 5, 0.01, 3, 200, 10, 0.1], [0.6, 1, 1, 3, 200, 0.1, 0.01], [0.8, 1, 0.1, 3, 150, 0.1, 0.1],
[0.8, 1, 0.1, 10, 200, 0.1, 10], [0.6, 1, 0.01, 6, 100, 0.1, 0.1]]
},
'memory': {
'arima': [[1, 1, 2], [0, 1, 2], [0, 1, 0], [0, 1, 1], [1, 1, 3], [0, 1, 0], [0, 1, 12], [0, 1, 2],
[2, 1, 2], [2, 1, 1]],
'da-rnn': [[32], [16], [64], [64], [32], [16], [64], [32], [64], [64]],
'deep-ar': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'deep-state': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'lstm': [[2, 50, 0.001], [2, 75, 0.001], [2, 50, 0.01], [3, 50, 0.001], [2, 125, 0.01], [3, 75, 0.01],
[3, 75, 0.01], [2, 125, 0.01], [6, 75, 0.001], [2, 50, 0.01]],
'mlp': [['logistic', 15], ['logistic', 20], ['logistic', 20], ['logistic', 15], ['logistic', 20],
['logistic', 20], ['logistic', 20], ['logistic', 20], ['logistic', 15], ['logistic', 15]],
'svr': [[1000, 0.001, 0.1, 'rbf'], [1, 0.001, 0.01, 'rbf'], [1000, 0.001, 0.001, 'rbf'],
[1000, 0.0001, 0.001, 'sigmoid'], [1000, 0.001, 0.001, 'sigmoid'], [1000, 0.001, 0.01, 'sigmoid'],
[1000, 0.0001, 0.001, 'sigmoid'], [10, 0.001, 0.1, 'rbf'], [100, 0.0001, 0.01, 'rbf'],
[100, 0.0001, 0.01, 'rbf']],
'rf': [[1, 5, 100], [1, 2, 100], [1, 10, 100], [5, 2, 100], [1, 15, 100], [10, 2, 1000],
[5, 10, 100], [1, 2, 500], [5, 5, 100], [1, 10, 100]],
'tft': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'xgboost': [[0.6, 5, 1, 6, 100, 0.01, 0.1], [0.4, 1, 0.01, 10, 200, 0.01, 10],
[0.4, 1, 1, 3, 100, 0.01, 0.01], [0.6, 1, 0.01, 3, 100, 10, 0.1], [0.4, 10, 1, 6, 200, 0.1, 0.1],
[0.8, 1, 0.01, 3, 200, 0.1, 0.01], [0.6, 1, 0.01, 6, 100, 10, 0.01],
[0.6, 1, 0.01, 10, 200, 0.1, 0.01],
[0.4, 1, 1, 10, 200, 0.01, 0.1], [0.4, 1, 1, 10, 200, 0.1, 10]]
},
'response_time': {
'arima': [[0, 1, 2], [0, 1, 1], [2, 1, 4], [1, 1, 2], [0, 1, 1], [4, 0, 0],
[0, 0, 1], [2, 1, 2], [0, 1, 1], [1, 1, 2]],
'da-rnn': [[32], [32], [16], [32], [32], [32], [32], [64], [32], [16]],
'deep-ar': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'deep-state': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'lstm': [[2, 50, 0.001], [5, 125, 0.001], [2, 125, 0.001],
[6, 75, 0.001], [3, 125, 0.001], [6, 50, 0.01], [3, 75, 0.001],
[2, 75, 0.01], [2, 75, 0.01], [4, 50, 0.01]],
'mlp': [['logistic', 20], ['logistic', 20], ['logistic', 5], ['logistic', 20], ['logistic', 20],
['logistic', 10], ['logistic', 15], ['logistic', 15], ['logistic', 20], ['logistic', 5]],
'rf': [[10, 2, 100], [5, 5, 100], [5, 2, 1000], [5, 2, 100], [1, 10, 100], [1, 5, 100],
[5, 15, 100], [10, 10, 100], [10, 2, 100], [10, 10, 500]],
'svr': [[100, 0.001, 0.001, 'rbf'], [10, 0.1, 0.1, 'rbf'], [10000, 0.0001, 0.001, 'rbf'],
[100, 0.001, 0.001, 'rbf'], [10, 0.1, 0.01, 'rbf'], [0.1, 0.0001, 1, 'sigmoid'],
[1000, 0.0001, 0.01, 'sigmoid'], [100, 0.0001, 0.001, 'rbf'], [10, 0.001, 0.01, 'sigmoid'],
[10000, 0.1, 0.01, 'rbf']],
'tft': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'xgboost': [[0.6, 1, 0.01, 6, 150, 0.01, 0.01], [0.6, 1, 1, 3, 200, 0.01, 0.1], [0.4, 1, 1, 3, 100, 0.1, 0.01],
[0.6, 1, 0.1, 10, 150, 0.01, 10], [0.8, 1, 1, 10, 100, 0.01, 10], [0.8, 10, 1, 6, 150, 0.1, 0.1],
[0.8, 1, 0.01, 10, 150, 10, 10], [0.8, 1, 0.01, 6, 200, 0.01, 0.01],
[0.6, 1, 0.1, 3, 200, 0.01, 0.1], [0.6, 1, 1, 6, 200, 0.01, 10]]
},
'traffic': {
'arima': [[1, 1, 2], [1, 1, 2], [2, 1, 1], [0, 1, 1], [2, 1, 1], [2, 1, 1], [2, 1, 1],
[0, 1, 1], [1, 1, 2], [0, 1, 1]],
'da-rnn': [[16], [16], [16], [16], [16], [16], [64], [32], [16], [64]],
'deep-ar': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'deep-state': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'mlp': [['logistic', 20], ['logistic', 5], ['logistic', 20], ['logistic', 10], ['logistic', 2],
['logistic', 20], ['logistic', 20], ['logistic', 20], ['logistic', 5], ['logistic', 20]],
'svr': [[100, 0.1, 'scale', 'rbf'], [100, 0.001, 'scale', 'rbf'],
[10000, 0.0001, 0.001, 'sigmoid'], [1000, 0.0001, 'scale', 'rbf'], [0.1, 0.001, 'scale', 'rbf'],
[100, 0.0001, 'scale', 'rbf'], [10, 0.0001, 0.001, 'sigmoid'], [0.1, 0.1, 'scale', 'rbf'],
[1000, 0.0001, 0.01, 'sigmoid'], [100, 0.001, 0.01, 'sigmoid']],
'rf': [[5, 5, 100], [10, 5, 500], [10, 10, 100], [1, 15, 1000], [1, 5, 100], [10, 2, 100],
[10, 10, 500], [1, 15, 100], [10, 10, 100], [10, 15, 500]],
'lstm': [[2, 125, 0.001], [3, 75, 0.01], [2, 1, 0.001], [2, 125, 0.001], [2, 125, 0.05],
[2, 125, 0.001], [2, 75, 0.01], [2, 75, 0.001], [2, 125, 0.001], [2, 75, 0.001]],
'tft': [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],
'xgboost': [[0.8, 1, 0.1, 6, 100, 0.01, 0.1], [0.4, 1, 1, 10, 150, 0.1, 0.01], [0.8, 1, 1, 6, 100, 10, 10],
[0.8, 1, 0.01, 3, 150, 0.01, 0.01], [0.8, 1, 1, 10, 150, 0.01, 0.01], [0.8, 5, 1, 3, 200, 0.1, 0.1],
[0.6, 1, 0.1, 6, 200, 0.01, 10], [0.8, 1, 1, 3, 100, 0.1, 10], [0.4, 1, 1, 6, 150, 0.1, 0.1],
[0.6, 1, 1, 10, 150, 0.01, 0.1]]
}
}
CLI = argparse.ArgumentParser()
CLI.add_argument("--microservices", nargs="*", type=int)
CLI.add_argument("--metrics", nargs="*", type=str)
CLI.add_argument("--learning_algorithms", nargs="*", type=str)
args = CLI.parse_args()
if not args.microservices or not args.metrics or not args.learning_algorithms:
print('You need to specify the microservice, metric and learning algorithm')
print('For example: python3 calculate_costs.py --metric cpu --microservices 1 --learning_algorithm arima')
print('For example: python3 calculate_costs.py --metric cpu memory --microservices 1 2 --learning_algorithm svr')
exit()
for microservice in args.microservices:
for metric in args.metrics:
for learning_algorithm in args.learning_algorithms:
time_series_name = 'microservice ' + str(microservice)
time_series = read_csv('time_series/alibaba/' + time_series_name + '/' + metric + '.csv')['value'].values
training_level = 'costs'
training_percentage = 0.6
sliding_window_size = [lags[metric][learning_algorithm][microservice - 1]]
learning_parameters = parameters[metric][learning_algorithm][microservice - 1]
training_models([learning_algorithm], sliding_window_size, time_series, training_level, training_percentage,
time_series_name, metric, learning_parameters=learning_parameters, validation_percentage=0.2)