_ce.py 2.8 KB
Newer Older
1 2 3 4 5 6 7 8 9
####this file is only used for continuous evaluation test!

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!!!!

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