diff --git a/GPy/util/parallel.py b/GPy/util/parallel.py index 880dae58..a2211945 100644 --- a/GPy/util/parallel.py +++ b/GPy/util/parallel.py @@ -39,3 +39,22 @@ def divide_data(datanum, rank, size): size = datanum/size offset = size*rank+residue return offset, offset+size, datanum_list + +def optimize_parallel(model, optimizer=None, messages=True, max_iters=1000, outpath='.', interval=100, name=None): + from math import ceil + from datetime import datetime + import os + if name is None: name = model.name + stop = 0 + for iter in range(int(ceil(float(max_iters)/interval))): + model.optimize(optimizer=optimizer, messages= True if messages and model.mpi_comm.rank==model.mpi_root else False, max_iters=interval) + if model.mpi_comm.rank==model.mpi_root: + timenow = datetime.now() + timestr = timenow.strftime('%Y:%m:%d_%H:%M:%S') + model.save(os.path.join(outpath, name+'_'+timestr+'.h5')) + opt = model.optimization_runs[-1] + if opt.funct_eval