Huseyin Kaya commited on
Commit
9c105de
·
unverified ·
2 Parent(s): 0080e32 e42f9e7

Merge pull request #7 from app2scale/feature_estimate_metrics_on_unavailable_states

Browse files
agent/backend/policy.py CHANGED
@@ -19,7 +19,7 @@ $$ \max_{state} reward(model(state)) $$
19
  self.label = """PolicyArgMax: pursue max reward """
20
 
21
  def choose(self, model, ds, input_ranges, cur_state, cur_metrics, reward_fn):
22
- print(input_ranges)
23
 
24
  input_df, output_df = predict_dict(model, ds, input_ranges)
25
 
@@ -28,7 +28,7 @@ $$ \max_{state} reward(model(state)) $$
28
  io_df['reward'] = io_df.apply(lambda row: reward_fn.calculate(row), axis=1)
29
  max_reward_index = io_df['reward'].argmax()
30
  next_state = io_df.loc[max_reward_index].to_dict()
31
- print('next state', next_state)
32
  return next_state
33
 
34
 
 
19
  self.label = """PolicyArgMax: pursue max reward """
20
 
21
  def choose(self, model, ds, input_ranges, cur_state, cur_metrics, reward_fn):
22
+ #print(input_ranges)
23
 
24
  input_df, output_df = predict_dict(model, ds, input_ranges)
25
 
 
28
  io_df['reward'] = io_df.apply(lambda row: reward_fn.calculate(row), axis=1)
29
  max_reward_index = io_df['reward'].argmax()
30
  next_state = io_df.loc[max_reward_index].to_dict()
31
+ #print('next state', next_state)
32
  return next_state
33
 
34
 
agent/backend/utils.py CHANGED
@@ -46,10 +46,11 @@ def read_metrics(df, cur_state):
46
  cols = list(df.columns)
47
 
48
  dff = df[cols]
49
- #for col, value in cur_state.items():
50
- # print(f'{col} = {value}', dff.columns)
51
- # dff = dff.query(f'{col} = {value}')
52
- dff = dff.query('replica == 1')
 
53
  output_df = dff.sample(1)
54
  for feature in ['replica','cpu','expected_tps']:
55
  if feature in cols:
 
46
  cols = list(df.columns)
47
 
48
  dff = df[cols]
49
+ for col, value in cur_state.items():
50
+ #print(f'{col} = {value}', dff.columns)
51
+ dff = dff.query(f'{col} == {value}')
52
+ if len(dff) == 0:
53
+ return None
54
  output_df = dff.sample(1)
55
  for feature in ['replica','cpu','expected_tps']:
56
  if feature in cols:
agent/dashboard/inference.py CHANGED
@@ -44,7 +44,7 @@ def force_render():
44
  @solara.component
45
  def InferencePlots(render_count):
46
 
47
-
48
 
49
  def execute():
50
  #print(selected_policy_label, selected_reward_label, selected_load_label)
@@ -62,7 +62,7 @@ def InferencePlots(render_count):
62
 
63
 
64
  df = ds.df
65
- print(df.columns)
66
  # get all possible values for inputs
67
  input_ranges = {col: list(pd.unique(df[col])) for col in input_cols}
68
 
@@ -72,6 +72,7 @@ def InferencePlots(render_count):
72
  cur_hist = {}
73
  replica = initial_replica.value
74
  cpu = initial_cpu.value
 
75
  for load, eod in load_profile:
76
  if step > nsteps.value:
77
  break
@@ -83,9 +84,13 @@ def InferencePlots(render_count):
83
 
84
  if use_model_to_estimate_metrics.value:
85
  cur_metrics = estimate_metrics(model, ds, cur_state)
86
- print(cur_metrics)
87
  else:
88
  cur_metrics = read_metrics(df, cur_state)
 
 
 
 
89
 
90
  combined_data = cur_state | cur_metrics
91
  for state, value in combined_data.items():
@@ -112,6 +117,7 @@ def InferencePlots(render_count):
112
  cpu = next_state['cpu']
113
 
114
  step += 1
 
115
 
116
 
117
  with solara.Row():
@@ -130,7 +136,8 @@ def InferencePlots(render_count):
130
  solara.Warning("There is no trained model ye, please train one!")
131
 
132
  solara.Button(label="Execute", on_click=execute, disabled=model is None)
133
-
 
134
 
135
  #print('Interence plots')
136
  with solara.ColumnsResponsive():
 
44
  @solara.component
45
  def InferencePlots(render_count):
46
 
47
+ unavailable_states_in_data, set_unavailable_states_in_data = solara.use_state_or_update(0)
48
 
49
  def execute():
50
  #print(selected_policy_label, selected_reward_label, selected_load_label)
 
62
 
63
 
64
  df = ds.df
65
+ #print(df.columns)
66
  # get all possible values for inputs
67
  input_ranges = {col: list(pd.unique(df[col])) for col in input_cols}
68
 
 
72
  cur_hist = {}
73
  replica = initial_replica.value
74
  cpu = initial_cpu.value
75
+ state_not_found_in_data = 0
76
  for load, eod in load_profile:
77
  if step > nsteps.value:
78
  break
 
84
 
85
  if use_model_to_estimate_metrics.value:
86
  cur_metrics = estimate_metrics(model, ds, cur_state)
87
+ #print(cur_metrics)
88
  else:
89
  cur_metrics = read_metrics(df, cur_state)
90
+ if cur_metrics is None:
91
+ print('there is no data for this state',cur_state)
92
+ state_not_found_in_data += 1
93
+ cur_metrics = estimate_metrics(model, ds, cur_state)
94
 
95
  combined_data = cur_state | cur_metrics
96
  for state, value in combined_data.items():
 
117
  cpu = next_state['cpu']
118
 
119
  step += 1
120
+ set_unavailable_states_in_data(state_not_found_in_data)
121
 
122
 
123
  with solara.Row():
 
136
  solara.Warning("There is no trained model ye, please train one!")
137
 
138
  solara.Button(label="Execute", on_click=execute, disabled=model is None)
139
+ if unavailable_states_in_data > 0:
140
+ solara.Warning(f'There are {unavailable_states_in_data} unavailable states in data. Estimatated versions are used!')
141
 
142
  #print('Interence plots')
143
  with solara.ColumnsResponsive():