-
Notifications
You must be signed in to change notification settings - Fork 124
/
Copy pathpower_consumption_benchmark.py
83 lines (67 loc) · 2.89 KB
/
power_consumption_benchmark.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
import requests
import time
import json
import argparse
import numpy as np
import service
non_keyword_set = set(["_silence_", "_unknown_"])
keyword_list = ["_silence_", "_unknown_", "yes", "no", "up", "down", \
"left", "right", "on", "off", "stop", "go"]
model_list = ["cnn_one_fstride4.onnx", "cnn_one_fstride8.onnx", "cnn_tpool2.onnx", "cnn_tpool3.onnx", "cnn_trad_fpool3.onnx", "google-speech-dataset-full.onnx", "google-speech-dataset-compact.onnx"]
def wait_util_idle(get_last_read_url, idle_read=2.2):
for _ in range(15):
time.sleep(5)
last_read = float(requests.get(get_last_read_url).json())
if last_read <= idle_read:
break
def evaluate_model(get_read_url, get_last_read_url, reset_read_url):
for model in model_list:
serv = service.Caffe2LabelService("model/{}".format(model), keyword_list)
model_accuracy = []
model_consumption = []
model_duration = []
model_peak = -1
for ind, keyword in enumerate(keyword_list):
if keyword in non_keyword_set:
continue
wait_util_idle(get_last_read_url)
requests.get(reset_read_url)
start_time = time.time()
accuracy = round(serv.evaluate([keyword], [ind]), 3)
duration = round(time.time() - start_time, 1)
read_dic = requests.get(get_read_url).json()
consumption = round(read_dic["consumption"], 1)
peak = read_dic["peak"]
print(model, keyword, accuracy, duration, consumption, peak)
model_accuracy.append(accuracy)
model_duration.append(duration)
model_consumption.append(consumption)
model_peak = max(model_peak, peak)
print("model:", model)
print("avg accuracy:", np.mean(model_accuracy))
print("avg duration:", np.mean(model_duration))
print("avg consumption:", np.mean(model_consumption))
print("peak watt:", model_peak, "\n")
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
"--ip",
type=str,
default="",
help="The ip address to run this server on")
parser.add_argument(
"--port",
type=str,
default="",
help="The port to run this server on")
flags, _ = parser.parse_known_args()
if not flags.ip or not flags.port:
print("the ip address and the port of the wattsup_server must be provided")
exit(0)
wattsup_server_ip, wattsup_server_port = flags.ip, flags.port
get_read_url = "http://{}:{}/get_read".format(wattsup_server_ip, wattsup_server_port)
get_last_read_url = "http://{}:{}/get_last_read".format(wattsup_server_ip, wattsup_server_port)
reset_read_url = "http://{}:{}/reset_read".format(wattsup_server_ip, wattsup_server_port)
evaluate_model(get_read_url, get_last_read_url, reset_read_url)
if __name__ == '__main__':
main()