# this file is only used for continuous evaluation test! import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi from kpi import DurationKpi from kpi import AccKpi each_step_duration_senta_card1 = DurationKpi('each_step_duration_senta_card1', 0.01, 0, actived=False) train_loss_senta_card1 = CostKpi('train_loss_senta_card1', 0.05, 0, actived=True) train_acc_senta_card1 = AccKpi('train_acc_senta_card1', 0.02, 0, actived=True) each_step_duration_senta_card4 = DurationKpi('each_step_duration_senta_card4', 0.01, 0, actived=False) train_loss_senta_card4 = CostKpi('train_loss_senta_card4', 0.05, 0, actived=True) train_acc_senta_card4 = AccKpi('train_acc_senta_card4', 0.02, 0, actived=True) tracking_kpis = [ each_step_duration_senta_card1, train_loss_senta_card1, train_acc_senta_card1, each_step_duration_senta_card4, train_loss_senta_card4, train_acc_senta_card4, ] def parse_log(log): ''' This method should be implemented by model developers. The suggestion:
####this file is only used for continuous evaluation test! from __future__ import absolute_import from __future__ import division from __future__ import print_function 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!!!! test_acc = AccKpi('test_acc', 0.001, 0, actived=True, desc="test acc") test_cost = CostKpi('test_cost', 0.001, 0, actived=True, desc='test cost') #train_speed_kpi = DurationKpi( # 'train_speed', # 0.05, # 0, # actived=True, # unit_repr='seconds/image', # desc='train speed in one GPU card') tracking_kpis = [test_acc, test_cost] 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:
import os import sys sys.path.append(os.environ['ceroot']) from kpi import AccKpi from kpi import DurationKpi cifar10_128_AllReduce_GPU_4_Cards_train_acc_kpi = AccKpi( 'cifar10_128_AllReduce_GPU_4_Cards_train_acc', 0.03, 0, actived=True) cifar10_128_AllReduce_GPU_4_Cards_train_speed_kpi = AccKpi( 'cifar10_128_AllReduce_GPU_4_Cards_train_speed', 0.06, 0, actived=False) cifar10_128_AllReduce_4_Cards_gpu_memory_kpi = DurationKpi( 'cifar10_128_AllReduce_4_Cards_gpu_memory', 0.1, 0, actived=True) cifar10_128_Reduce_GPU_4_Cards_train_acc_kpi = AccKpi( 'cifar10_128_Reduce_GPU_4_Cards_train_acc', 0.03, 0, actived=True) cifar10_128_Reduce_GPU_4_Cards_train_speed_kpi = AccKpi( 'cifar10_128_Reduce_GPU_4_Cards_train_speed', 0.06, 0, actived=True) cifar10_128_Reduce_4_Cards_gpu_memory_kpi = DurationKpi( 'cifar10_128_Reduce_4_Cards_gpu_memory', 0.1, 0, actived=True) # Single Cards cifar10_128_GPU_1_Cards_train_acc_kpi = AccKpi( 'cifar10_128_GPU_1_Cards_train_acc', 0.03, 0, actived=True) cifar10_128_GPU_1_Cards_train_speed_kpi = AccKpi( 'cifar10_128_GPU_1_Cards_train_speed', 0.06, 0, actived=False) cifar10_128_1_Cards_gpu_memory_kpi = DurationKpi( 'cifar10_128_1_Cards_gpu_memory', 0.1, 0, actived=True) flowers_64_AllReduce_GPU_4_Cards_train_acc_kpi = AccKpi(
#!/usr/bin/env python # -*- coding:utf-8 -*- import os import sys import re sys.path.append(os.environ['ceroot']) from kpi import AccKpi test_acc_top1_kpi = AccKpi('test_acc_top1', 0.02, 0, actived=True, desc='TOP1 ACC') test_acc_top5_kpi = AccKpi('test_acc_top5', 0.02, 0, actived=True, desc='TOP5 ACC') tracking_kpis = [test_acc_top1_kpi, test_acc_top5_kpi] def parse_log(log): ''' parse log ''' pattern = r"^.*Final eval result: \['acc_top1', 'acc_top5'\]=\[(?P<test_acc_top1>0\.\d+)\s+(?P<test_acc_top5>0\.\d+)\s*\]" prog = re.compile(pattern) for line in log.split('\n'): result = prog.match(line)
import os import sys sys.path.append(os.environ['ceroot']) from kpi import AccKpi from kpi import DurationKpi cifar10_8_AllReduce_CPU_4_Cards_train_acc_kpi = AccKpi( 'cifar10_8_AllReduce_CPU_4_Cards_train_acc', 0.02, 0, actived=True) cifar10_8_AllReduce_CPU_4_Cards_train_speed_kpi = AccKpi( 'cifar10_8_AllReduce_CPU_4_Cards_train_speed', 0.06, 0, actived=True) cifar10_8_Reduce_CPU_4_Cards_train_acc_kpi = AccKpi( 'cifar10_8_Reduce_CPU_4_Cards_train_acc', 0.02, 0, actived=True) cifar10_8_Reduce_CPU_4_Cards_train_speed_kpi = AccKpi( 'cifar10_8_Reduce_CPU_4_Cards_train_speed', 0.06, 0, actived=True) cifar10_8_CPU_1_Cards_train_acc_kpi = AccKpi( 'cifar10_8_CPU_1_Cards_train_acc', 0.02, 0, actived=True) cifar10_8_CPU_1_Cards_train_speed_kpi = AccKpi( 'cifar10_8_CPU_1_Cards_train_speed', 0.06, 0, actived=True) flowers_8_AllReduce_CPU_4_Cards_train_acc_kpi = AccKpi( 'flowers_8_AllReduce_CPU_4_Cards_train_acc', 0.02, 0, actived=True) flowers_8_AllReduce_CPU_4_Cards_train_speed_kpi = AccKpi( 'flowers_8_AllReduce_CPU_4_Cards_train_speed', 0.06, 0, actived=True) flowers_8_Reduce_CPU_4_Cards_train_acc_kpi = AccKpi( 'flowers_8_Reduce_CPU_4_Cards_train_acc', 0.02, 0, actived=True) flowers_8_Reduce_CPU_4_Cards_train_speed_kpi = AccKpi(
# this file is only used for continuous evaluation test! import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi from kpi import DurationKpi from kpi import AccKpi each_pass_duration_cpu1_thread1_kpi = DurationKpi( 'each_pass_duration_cpu1_thread1', 0.08, 0, actived=True) train_loss_cpu1_thread1_kpi = CostKpi('train_loss_cpu1_thread1', 0.08, 0) train_auc_val_cpu1_thread1_kpi = AccKpi('train_auc_val_cpu1_thread1', 0.08, 0) train_batch_auc_val_cpu1_thread1_kpi = AccKpi( 'train_batch_auc_val_cpu1_thread1', 0.08, 0) each_pass_duration_cpu1_thread8_kpi = DurationKpi( 'each_pass_duration_cpu1_thread8', 0.08, 0, actived=True) train_loss_cpu1_thread8_kpi = CostKpi('train_loss_cpu1_thread8', 0.08, 0) train_auc_val_cpu1_thread8_kpi = AccKpi('train_auc_val_cpu1_thread8', 0.08, 0) train_batch_auc_val_cpu1_thread8_kpi = AccKpi( 'train_batch_auc_val_cpu1_thread8', 0.08, 0) each_pass_duration_cpu8_thread8_kpi = DurationKpi( 'each_pass_duration_cpu8_thread8', 0.08, 0, actived=True) train_loss_cpu8_thread8_kpi = CostKpi('train_loss_cpu8_thread8', 0.08, 0) train_auc_val_cpu8_thread8_kpi = AccKpi('train_auc_val_cpu8_thread8', 0.08, 0) train_batch_auc_val_cpu8_thread8_kpi = AccKpi( 'train_batch_auc_val_cpu8_thread8', 0.08, 0) tracking_kpis = [ each_pass_duration_cpu1_thread1_kpi, train_loss_cpu1_thread1_kpi,
# this file is only used for continuous evaluation test! import os import sys from kpi import CostKpi, AccKpi sys.path.append(os.environ['ceroot']) # NOTE kpi.py should shared in models in some way!!!! train_cost_kpi = CostKpi('train_cost', 0.02, 0, actived=True) test_recall_kpi = AccKpi('test_recall', 0.02, 0, actived=True) tracking_kpis = [ train_cost_kpi, test_recall_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
import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi, AccKpi, DurationKpi train_cost_kpi = CostKpi('train_cost', 0.05, 0, actived=True) train_acc_kpi = AccKpi('train_acc', 0.02, 0, actived=True) test_acc_kpi = AccKpi('test_acc', 0.05, 0, actived=True) train_speed_kpi = AccKpi('train_speed', 0.01, 0, actived=True) train_duration_kpi = DurationKpi('train_duration', 0.02, 0, actived=True) tracking_kpis = [ train_cost_kpi, train_acc_kpi, test_acc_kpi, train_speed_kpi, train_duration_kpi, ]
####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!!!! train_cost_kpi = CostKpi('train_cost', 0.02, 0, actived=True) test_acc_kpi = AccKpi('test_acc', 0.01, 0, actived=False) train_speed_kpi = DurationKpi('train_speed', 0.1, 0, actived=True, unit_repr="s/epoch") train_cost_card4_kpi = CostKpi('train_cost_card4', 0.02, 0, actived=True) test_acc_card4_kpi = AccKpi('test_acc_card4', 0.01, 0, actived=False) train_speed_card4_kpi = DurationKpi('train_speed_card4', 0.1, 0, actived=True, unit_repr="s/epoch") tracking_kpis = [ train_cost_kpi, test_acc_kpi, train_speed_kpi, train_cost_card4_kpi, test_acc_card4_kpi, train_speed_card4_kpi, ] def parse_log(log): ''' This method should be implemented by model developers. The suggestion:
import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi, DurationKpi, AccKpi p99_kpi = DurationKpi('99', 0.05, actived=True) avg_kpi = DurationKpi('avg', 0.05, actived=True) qps_kpi = AccKpi('qps', 0.05, actived=True) #ok_kpi = AccKpi('ok', 0.05, actived=True) tracking_kpis = [ p99_kpi, avg_kpi, qps_kpi, ]
####this file is only used for continuous evaluation test! import os import sys sys.path.insert(0, os.environ['ceroot']) #sys.path.append('.') from kpi import CostKpi, DurationKpi, AccKpi #### NOTE kpi.py should shared in models in some way!!!! train_cost_xnli_card1_kpi = CostKpi('train_cost_xnli_card1', 0.002, 0, actived=True) train_acc_xnli_card1_kpi = AccKpi('train_acc_xnli_card1', 0.002, 0, actived=True) train_duration_xnli_card1_kpi = DurationKpi('train_duration_xnli_card1', 0.01, 0, actived=True) train_cost_xnli_card4_kpi = CostKpi('train_cost_xnli_card4', 0.002, 0, actived=True) train_acc_xnli_card4_kpi = AccKpi('train_acc_xnli_card4', 0.02, 0, actived=True) train_duration_xnli_card4_kpi = DurationKpi('train_duration_xnli_card4', 0.03,
import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi, DurationKpi, AccKpi cifar10_128_train_acc_kpi = AccKpi('cifar10_128_train_acc', 0.05, 0) cifar10_128_train_speed_kpi = AccKpi('cifar10_128_train_speed', 0.05, 0) cifar10_128_gpu_memory_kpi = DurationKpi('cifar10_128_gpu_memory', 0.01, 0) flowers_64_train_speed_kpi = AccKpi('flowers_64_train_speed', 0.05, 0) flowers_64_gpu_memory_kpi = DurationKpi('flowers_64_gpu_memory', 0.01, 0) tracking_kpis = [ cifar10_128_train_acc_kpi, cifar10_128_train_speed_kpi, cifar10_128_gpu_memory_kpi, flowers_64_train_speed_kpi, flowers_64_gpu_memory_kpi, ]
""" continuous_evaluation.py """ import os import sys sys.path.append(os.environ['ceroot']) from kpi import AccKpi from kpi import DurationKpi train_acc_kpi = AccKpi('train_acc', 0.2, 0) pass_duration_kpi = DurationKpi('pass_duration', 0.02, 0, actived=True) tracking_kpis = [ train_acc_kpi, pass_duration_kpi, ]
import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi, DurationKpi, AccKpi train_acc_kpi = AccKpi('train_acc', 0.05) test_acc_kpi = AccKpi('test_acc', 0.05) train_duration_kpi = DurationKpi('train_duration', 0.1) tracking_kpis = [ train_acc_kpi, test_acc_kpi, train_duration_kpi, ]
# this file is only used for continuous evaluation test! import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi from kpi import DurationKpi from kpi import AccKpi each_pass_duration_cpu1_thread1_kpi = DurationKpi( 'each_pass_duration_cpu1_thread1', 0.08, 0, actived=True) train_recall_cpu1_thread1_kpi = AccKpi('train_recall_cpu1_thread1', 0.08, 0) each_pass_duration_gpu1_kpi = DurationKpi('each_pass_duration_gpu1', 0.08, 0, actived=True) train_recall_gpu1_kpi = AccKpi('train_recall_gpu1', 0.08, 0) each_pass_duration_gpu4_kpi = DurationKpi('each_pass_duration_gpu4', 0.08, 0, actived=True) train_recall_gpu4_kpi = AccKpi('train_recall_gpu4', 0.08, 0) tracking_kpis = [ each_pass_duration_cpu1_thread1_kpi, train_recall_cpu1_thread1_kpi, each_pass_duration_gpu1_kpi, train_recall_gpu1_kpi, each_pass_duration_gpu4_kpi, train_recall_gpu4_kpi, ]
####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!!!! train_acc_kpi = AccKpi('train_precision', 0.005, 0, actived=True) test_acc_kpi = CostKpi('test_precision', 0.005, 0, actived=True) train_duration_kpi = DurationKpi('train_duration', 0.05, 0, actived=True) tracking_kpis = [ train_acc_kpi, test_acc_kpi, train_duration_kpi, ] def parse_log(log): 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
import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi, DurationKpi, AccKpi p99_kpi = DurationKpi('99', 0.2, actived=True) avg_kpi = DurationKpi('avg', 0.2, actived=True) qps_kpi = AccKpi('qps', 0.2, actived=True) err_kpi = AccKpi('err', 0.2, actived=True) tracking_kpis = [ p99_kpi, avg_kpi, qps_kpi, err_kpi ]
""" continuous_evaluation.py """ import os import sys sys.path.append(os.environ['ceroot']) from kpi import AccKpi from kpi import CostKpi from kpi import DurationKpi wmb_128_train_speed_kpi = AccKpi('wmb_128_train_speed', 0.2, 0) wmb_128_gpu_memory_kpi = DurationKpi('wmb_128_gpu_memory', 0.2, 0) tracking_kpis = [ wmb_128_train_speed_kpi, wmb_128_gpu_memory_kpi, ]
""" continuous_evaluation.py """ import os import sys sys.path.append(os.environ['ceroot']) from kpi import AccKpi from kpi import CostKpi from kpi import DurationKpi imdb_32_train_speed_kpi = AccKpi('imdb_32_train_speed', 0.08, 0, actived=True) imdb_32_gpu_memory_kpi = DurationKpi('imdb_32_gpu_memory', 0.05, 0, actived=True) tracking_kpis = [ imdb_32_train_speed_kpi, imdb_32_gpu_memory_kpi, ]
from __future__ import division from __future__ import absolute_import import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi from kpi import AccKpi conv_train_cost_kpi = CostKpi('conv_train_cost', 0.02, 0, actived=True, desc='train cost') conv_train_acc_kpi = AccKpi('conv_train_acc', 0.02, 0, actived=True, desc='train acc') conv_test_cost_kpi = CostKpi('conv_test_cost', 0.02, 0, actived=True, desc='test cost') conv_test_acc_kpi = AccKpi('conv_test_acc', 0.02, 0, actived=True, desc='test acc') rnn_train_cost_kpi = CostKpi('rnn_train_cost', 0.02,
import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi, DurationKpi, AccKpi train_acc_top1_kpi = AccKpi('train_acc_top1_kpi', 0.05, 0, actived=True, desc='TOP1 ACC') train_acc_top5_kpi = AccKpi('train_acc_top5_kpi', 0.05, 0, actived=True, desc='TOP5 ACC') train_cost_kpi = CostKpi('train_cost_kpi', 0.05, 0, actived=True, desc='train cost') train_speed_kpi = AccKpi('train_speed_kpi', 0.05, 0, actived=True, unit_repr='images/s', desc='train speed in one GPU card') four_card_train_speed_kpi = AccKpi('four_card_train_speed_kpi', 0.05, 0, actived=True, unit_repr='images/s',
####this file is only used for continuous evaluation test! from __future__ import absolute_import from __future__ import division from __future__ import print_function 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!!!! train_acc = AccKpi('train_acc', 0.1, 0, actived=True, desc="train acc") train_loss = CostKpi('train_loss', 0.1, 0, actived=True, desc="train loss") tracking_kpis = [train_acc, train_loss] 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 "
""" continuous_evaluation.py """ import os import sys sys.path.append(os.environ['ceroot']) from kpi import AccKpi from kpi import DurationKpi train_acc_kpi = AccKpi('train_acc', 0.2, 0) pass_duration_kpi = DurationKpi('pass_duration', 0.02, 0, actived=True) train_acc_kpi_card4 = AccKpi('train_acc_card4', 0.2, 0) pass_duration_kpi_card4 = DurationKpi('pass_duration_card4', 0.02, 0, actived=True) tracking_kpis = [ train_acc_kpi, pass_duration_kpi, train_acc_kpi_card4, pass_duration_kpi_card4, ]
from __future__ import print_function from __future__ import division from __future__ import absolute_import import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi from kpi import AccKpi train_cost_kpi = CostKpi('train_cost', 0.02, 0, actived=True, desc='train cost') test_cost_kpi = CostKpi('test_cost', 0.02, 0, actived=True, desc='test cost') test_acc_kpi = AccKpi('test_acc', 0.02, 0, actived=True, desc='test acc') tracking_kpis = [train_cost_kpi, test_cost_kpi, test_acc_kpi] def parse_log(log): for line in log.split('\n'): fs = line.strip().split('\t') print(fs) if len(fs) == 3 and fs[0] == 'kpis': kpi_name = fs[1] kpi_value = float(fs[2]) yield kpi_name, kpi_value def log_to_ce(log): kpi_tracker = {}
####this file is only used for continuous evaluation test! from __future__ import absolute_import from __future__ import division from __future__ import print_function 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!!!! train_acc1 = AccKpi('train_acc1', 0.01, 0, actived=True, desc="train acc1") train_acc5 = AccKpi('train_acc5', 0.01, 0, actived=True, desc="train acc5") train_loss = CostKpi('train_loss', 0.01, 0, actived=True, desc="train loss") test_acc1 = AccKpi('test_acc1', 0.01, 0, actived=True, desc='test acc1') test_acc5 = AccKpi('test_acc5', 0.01, 0, actived=True, desc='test acc5') test_loss = CostKpi('test_loss', 0.01, 0, actived=True, desc='test loss') #train_speed_kpi = DurationKpi( # 'train_speed', # 0.05, # 0, # actived=True, # unit_repr='seconds/image', # desc='train speed in one GPU card') tracking_kpis = [ train_acc1, train_acc5, train_loss, test_acc1, test_acc5, test_loss ] def parse_log(log): '''
""" continuous_evaluation.py """ import os import sys sys.path.append(os.environ['ceroot']) from kpi import AccKpi from kpi import CostKpi from kpi import DurationKpi cifar10_128_train_speed_kpi = AccKpi('cifar10_128_train_speed', 0.03, 0, actived=True) cifar10_128_gpu_memory_kpi = DurationKpi('cifar10_128_gpu_memory', 0.1, 0, actived=True) flowers_32_train_speed_kpi = AccKpi('flowers_32_train_speed', 0.03, 0, actived=True) flowers_32_gpu_memory_kpi = DurationKpi('flowers_32_gpu_memory', 0.1, 0, actived=True) tracking_kpis = [ cifar10_128_train_speed_kpi, cifar10_128_gpu_memory_kpi,
import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi, DurationKpi, AccKpi train_cost_kpi = CostKpi('train_cost', 0.02, actived=True) test_acc_kpi = AccKpi('test_acc', 0.005, actived=True) train_duration_kpi = DurationKpi('train_duration', 0.02, actived=True) train_acc_kpi = AccKpi('train_acc', 0.005, actived=True) tracking_kpis = [ train_acc_kpi, train_cost_kpi, test_acc_kpi, train_duration_kpi, ]
# this file is only used for continuous evaluation test! import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi from kpi import DurationKpi from kpi import AccKpi each_pass_duration_cpu1_thread1_kpi = DurationKpi( 'each_pass_duration_cpu1_thread1', 0.08, 0, actived=True) train_acc_cpu1_thread1_kpi = AccKpi('train_acc_cpu1_thread1', 0.08, 0) each_pass_duration_gpu1_kpi = DurationKpi('each_pass_duration_gpu1', 0.08, 0, actived=True) train_acc_gpu1_kpi = AccKpi('train_acc_gpu1', 0.08, 0) each_pass_duration_gpu4_kpi = DurationKpi('each_pass_duration_gpu4', 0.08, 0, actived=True) train_acc_gpu4_kpi = AccKpi('train_acc_gpu4', 0.08, 0) tracking_kpis = [ each_pass_duration_cpu1_thread1_kpi, train_acc_cpu1_thread1_kpi, each_pass_duration_gpu1_kpi, train_acc_gpu1_kpi, each_pass_duration_gpu4_kpi, train_acc_gpu4_kpi, ]
import os import sys sys.path.append(os.environ['ceroot']) from kpi import AccKpi flowers_resnet50_dist_train_acc_kpi = AccKpi('flowers_resnet50_dist_train_acc', 0.08, 0, actived=True) flowers_resnet50_dist_train_speed_kpi = AccKpi( 'flowers_resnet50_dist_train_speed', 0.1, 0, actived=True) tracking_kpis = [ flowers_resnet50_dist_train_speed_kpi, flowers_resnet50_dist_train_acc_kpi, ]
import os import sys sys.path.append(os.environ['ceroot']) from kpi import CostKpi, DurationKpi, AccKpi train_cost_kpi = CostKpi('train_cost', 0.02, 0, actived=True) train_speed_kpi = AccKpi('train_speed', 0.02, 0, actived=True) four_card_speed_kpi = AccKpi('four_card_train_speed', 0.02, 0, actived=True) tracking_kpis = [train_cost_kpi, train_speed_kpi, four_card_speed_kpi]