easyvvuq.utils.db_benchmark
1import easyvvuq as uq 2import chaospy as cp 3import numpy as np 4import json 5from timeit import Timer 6 7 8def benchmark(nsamples): 9 params = { 10 "S0": {"type": "float", "default": 997}, 11 "I0": {"type": "float", "default": 3}, 12 "beta": {"type": "float", "default": 0.2}, 13 "gamma": {"type": "float", "default": 0.04, "min": 0.0, "max": 1.0}, 14 "iterations": {"type": "integer", "default": 100}, 15 "outfile": {"type": "string", "default": "output.csv"} 16 } 17 encoder = uq.encoders.GenericEncoder( 18 template_fname='tutorials/sir.template', 19 delimiter='$', 20 target_filename='input.json') 21 decoder = uq.decoders.SimpleCSV(target_filename='output.csv', output_columns=['I']) 22 actions = uq.actions.local_execute(encoder, 'sir input.json', decoder) 23 campaign = uq.Campaign(name='sir_benchmark', params=params, actions=actions) 24 vary = { 25 "beta": cp.Uniform(0.15, 0.25), 26 "gamma": cp.Normal(0.04, 0.001), 27 } 28 campaign.set_sampler(uq.sampling.RandomSampler(vary=vary)) 29 benchmark_results = {} 30 t = Timer('campaign.draw_samples(nsamples)', globals=locals()) 31 benchmark_results['draw_samples'] = t.timeit(1) 32 33 def fake_results(): 34 counter = 1 35 while True: 36 yield ('Run_{}'.format(counter), {'values': list(np.random.random(size=100))}) 37 counter += 1 38 fakes = fake_results() 39 results_ = [] 40 for _ in range(nsamples): 41 results_.append(next(fakes)) 42 t = Timer( 43 'campaign.campaign_db.store_results(campaign._active_app_name, results_)', 44 globals=locals()) 45 benchmark_results['store_results'] = t.timeit(1) 46 t = Timer('campaign.get_collation_result()', globals=locals()) 47 benchmark_results['get_collation_result'] = t.timeit(1) 48 return benchmark_results 49 50 51if __name__ == '__main__': 52 nsamples = [1000, 10000, 100000, 1000000] 53 results = {} 54 for nsamples_ in nsamples: 55 results[nsamples_] = benchmark(nsamples_) 56 print(json.dumps(results))
def
benchmark(nsamples):
9def benchmark(nsamples): 10 params = { 11 "S0": {"type": "float", "default": 997}, 12 "I0": {"type": "float", "default": 3}, 13 "beta": {"type": "float", "default": 0.2}, 14 "gamma": {"type": "float", "default": 0.04, "min": 0.0, "max": 1.0}, 15 "iterations": {"type": "integer", "default": 100}, 16 "outfile": {"type": "string", "default": "output.csv"} 17 } 18 encoder = uq.encoders.GenericEncoder( 19 template_fname='tutorials/sir.template', 20 delimiter='$', 21 target_filename='input.json') 22 decoder = uq.decoders.SimpleCSV(target_filename='output.csv', output_columns=['I']) 23 actions = uq.actions.local_execute(encoder, 'sir input.json', decoder) 24 campaign = uq.Campaign(name='sir_benchmark', params=params, actions=actions) 25 vary = { 26 "beta": cp.Uniform(0.15, 0.25), 27 "gamma": cp.Normal(0.04, 0.001), 28 } 29 campaign.set_sampler(uq.sampling.RandomSampler(vary=vary)) 30 benchmark_results = {} 31 t = Timer('campaign.draw_samples(nsamples)', globals=locals()) 32 benchmark_results['draw_samples'] = t.timeit(1) 33 34 def fake_results(): 35 counter = 1 36 while True: 37 yield ('Run_{}'.format(counter), {'values': list(np.random.random(size=100))}) 38 counter += 1 39 fakes = fake_results() 40 results_ = [] 41 for _ in range(nsamples): 42 results_.append(next(fakes)) 43 t = Timer( 44 'campaign.campaign_db.store_results(campaign._active_app_name, results_)', 45 globals=locals()) 46 benchmark_results['store_results'] = t.timeit(1) 47 t = Timer('campaign.get_collation_result()', globals=locals()) 48 benchmark_results['get_collation_result'] = t.timeit(1) 49 return benchmark_results