_ce.py 2.9 KB
Newer Older
1
####this file is only used for continuous evaluation test!
R
root 已提交
2 3 4
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
5 6 7 8 9 10 11
import os
import sys
sys.path.append(os.environ['ceroot'])
from kpi import CostKpi, DurationKpi, AccKpi

#### NOTE kpi.py should shared in models in some way!!!!

R
root 已提交
12
train_acc_top1_kpi = AccKpi('train_acc_top1', 0.05, 0, desc='TOP1 ACC')
13
train_acc_top5_kpi = AccKpi(
D
Dang Qingqing 已提交
14
    'train_acc_top5', 0.05, 0, actived=False, desc='TOP5 ACC')
B
baiyfbupt 已提交
15
train_cost_kpi = CostKpi('train_cost', 0.5, 0, actived=True, desc='train cost')
R
root 已提交
16
test_acc_top1_kpi = AccKpi('test_acc_top1', 0.05, 0, desc='TOP1 ACC')
17
test_acc_top5_kpi = AccKpi(
D
Dang Qingqing 已提交
18
    'test_acc_top5', 0.05, 0, actived=False, desc='TOP5 ACC')
D
Dang Qingqing 已提交
19
test_cost_kpi = CostKpi('test_cost', 0.5, 0, actived=True, desc='train cost')
20 21
train_speed_kpi = AccKpi(
    'train_speed',
B
baiyfbupt 已提交
22
    0.5,
23 24 25 26 27
    0,
    actived=True,
    unit_repr='seconds/image',
    desc='train speed in one GPU card')
train_acc_top1_card4_kpi = AccKpi(
R
root 已提交
28
    'train_acc_top1_card4', 0.05, 0, desc='TOP1 ACC')
29
train_acc_top5_card4_kpi = AccKpi(
D
Dang Qingqing 已提交
30
    'train_acc_top5_card4', 0.05, 0, actived=False, desc='TOP5 ACC')
31
train_cost_card4_kpi = CostKpi(
D
Dang Qingqing 已提交
32
    'train_cost_card4', 0.5, 0, actived=True, desc='train cost')
33
test_acc_top1_card4_kpi = AccKpi(
R
root 已提交
34
    'test_acc_top1_card4', 0.05, 0, desc='TOP1 ACC')
35
test_acc_top5_card4_kpi = AccKpi(
D
Dang Qingqing 已提交
36
    'test_acc_top5_card4', 0.05, 0, actived=False, desc='TOP5 ACC')
37
test_cost_card4_kpi = CostKpi(
D
Dang Qingqing 已提交
38
    'test_cost_card4', 0.5, 0, actived=True, desc='train cost')
39 40
train_speed_card4_kpi = AccKpi(
    'train_speed_card4',
B
baiyfbupt 已提交
41
    0.5,
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
    0,
    actived=True,
    unit_repr='seconds/image',
    desc='train speed in four GPU card')
tracking_kpis = [
    train_acc_top1_kpi, train_acc_top5_kpi, train_cost_kpi, test_acc_top1_kpi,
    test_acc_top5_kpi, test_cost_kpi, train_speed_kpi, train_acc_top1_card4_kpi,
    train_acc_top5_card4_kpi, train_cost_card4_kpi, test_acc_top1_card4_kpi,
    test_acc_top5_card4_kpi, test_cost_card4_kpi, train_speed_card4_kpi
]


def parse_log(log):
    '''
    This method should be implemented by model developers.

    The suggestion:

    each line in the log should be key, value, for example:

    "
    train_cost\t1.0
    test_cost\t1.0
    train_cost\t1.0
    train_cost\t1.0
    train_acc\t1.2
    "
    '''
    for line in log.split('\n'):
        fs = line.strip().split('\t')
        print(fs)
        if len(fs) == 3 and fs[0] == 'kpis':
            print("-----%s" % fs)
            kpi_name = fs[1]
            kpi_value = float(fs[2])
            yield kpi_name, kpi_value


def log_to_ce(log):
    kpi_tracker = {}
    for kpi in tracking_kpis:
        kpi_tracker[kpi.name] = kpi

    for (kpi_name, kpi_value) in parse_log(log):
        print(kpi_name, kpi_value)
        kpi_tracker[kpi_name].add_record(kpi_value)
        kpi_tracker[kpi_name].persist()


if __name__ == '__main__':
    log = sys.stdin.read()
    print("*****")
B
Bai Yifan 已提交
94
    print(log)
95 96
    print("****")
    log_to_ce(log)