def compute_se_cpp(job): # setup input for the script data = job.statepoint() rep = SphericalExpansion(**data['representation']) data['calculator'] = rep.hypers tojson(job.fn(group['fn_in']), data) # look at memory footprint p = Popen([ group['executable'][data['nl_type']], job.fn(group['fn_in']), job.fn(group['fn_out']) ], stdout=PIPE, stderr=PIPE) max_mem = memory_usage(p, interval=0.1, max_usage=True) # look at timings p = Popen([ group['executable'][data['nl_type']], job.fn(group['fn_in']), job.fn(group['fn_out']) ], stdout=PIPE, stderr=PIPE) if p.stderr.read(): print(p.stderr.read()) data = fromjson(job.fn(group['fn_out'])) data = data['results'] data['mem_max'] = max_mem data['mem_unit'] = 'MiB' tojson(job.fn(group['fn_res']), data)
def compute_si_cpp(job): # setup input for the script data = job.statepoint() np.random.seed(data['seed']) if data['representation']['coefficient_subselection'] is not None: rpr = deepcopy(data['representation']) rpr.pop('coefficient_subselection') rep = SphericalInvariants(**rpr) rep,n_feat = get_randomly_sparsified_soap(data, rep) else: n_feat = None rep = SphericalInvariants(**data['representation']) data['calculator'] = rep.hypers tojson(job.fn(group['fn_in']), data) # look at memory footprint p = Popen([group['executable'][data['nl_type']], job.fn(group['fn_in']), job.fn(group['fn_out'])], stdout=PIPE, stderr=PIPE) max_mem = memory_usage(p, interval=0.1, max_usage=True) # look at timings p = Popen([group['executable'][data['nl_type']], job.fn(group['fn_in']), job.fn(group['fn_out'])], stdout=PIPE, stderr=PIPE) if p.stderr.read(): print(p.stderr.read()) data = fromjson(job.fn(group['fn_out'])) data = data['results'] data['n_features'] = n_feat data['mem_max'] = max_mem data['mem_unit'] = 'MiB' tojson(job.fn(group['fn_res']), data)
def compute_feature_selection(job): sp = _decode(job.statepoint()) st, lg = job.sp.start_structure, job.sp.n_structures frames = fromfile(job.sp.filename)[st:st + lg] soap = SphericalInvariants(**sp['representation']) managers = soap.transform(frames) compressor = RandomFilter(soap, **sp['feature_subselection']) feature_subselection = compressor.select_and_filter(managers) # if sp['feature_subselection']['Nselect'] is None: # feature_subselection['coefficient_subselection'] = None tojson(job.fn(group['feature_fn']), feature_subselection)
def compute_nl_cpp(job): # setup input for the script data = job.statepoint() tojson(job.fn(group['fn_in']), data) # look at timings p = Popen([group['executable'], job.fn(group['fn_in']), job.fn(group['fn_out'])], stdout=PIPE, stderr=PIPE) if p.stderr.read(): print(p.stderr.read()) data = fromjson(job.fn(group['fn_out'])) data = data['results'] tojson(job.fn(group['fn_res']), data)
def run(job, N_ITERATION, max_mem): data = job.statepoint() data['N_ITERATIONS'] = N_ITERATION tojson(job.fn(group['fn_in']), data) p = Popen( [group['executable'], job.fn(group['fn_in']), job.fn(group['fn_out'])], stdout=PIPE, stderr=PIPE) # if p.stderr.read(): print(p.stderr.read()) data = fromjson(job.fn(group['fn_out'])) data = data['results'] data['mem_max'] = max_mem data['mem_unit'] = 'MiB' tojson(job.fn(group['fn_res']), data) # job.document.elapsed_mean < 3*job.document.elapsed_std return data['elapsed_mean'] > 4 * data['elapsed_std']
def compute_ri_cpp(job): # setup input for the script data = job.statepoint() rep = SphericalExpansion(**data['representation']) data['calculator'] = rep.hypers tojson(job.fn(group['fn_in']), data) # look at memory footprint p = Popen( [group['executable'], job.fn(group['fn_in']), job.fn(group['fn_out'])], stdout=PIPE, stderr=PIPE) max_mem = memory_usage(p, interval=0.001, max_usage=True) # look at timings carry_on = True N_ITERATIONS = [ int(data['N_ITERATIONS'] * (1 + f)) for f in [0., 0.5, 1, 2, 3, 5, 10, 20, 30, 50, 100] ] for N_ITERATION in N_ITERATIONS: if run(job, N_ITERATION, max_mem): break
def compute_benchmark(job): from rascal.models.krr import compute_sparse_kernel_gradients sp = _decode(job.statepoint()) st, lg = job.sp.start_structure, job.sp.n_structures frames = fromfile(job.sp.filename)[st:st + lg] model = load_obj(job.fn(group['model_fn'])) soap = model.get_representation_calculator() grads_timing = job.sp.grads_timing hypers = soap._get_init_params() hypers['compute_gradients'] = grads_timing soap = SphericalInvariants(**hypers) rc = sp['representation']['interaction_cutoff'] nl_options = [ dict(name='centers', args=[]), dict(name='neighbourlist', args=dict(cutoff=rc)), # dict(name='halflist', args=dict()), dict(name="centercontribution", args=dict()), dict(name='strict', args=dict(cutoff=rc)) ] kernel = Kernel(soap, **sp['kernel']) N_ITERATIONS = sp['N_ITERATIONS'] if grads_timing: tags = ['NL', 'rep with grad', 'pred energy', 'pred forces'] else: tags = ['NL', 'rep', 'pred energy'] timers = {k: Timer(tag=k, logger=None) for k in tags} if job.sp.name != 'qm9': frames = [ make_supercell(frames[0], job.sp.n_replication * np.eye(3), wrap=True, tol=1e-11) ] else: frames = frames[:100] if grads_timing: for ii in range(N_ITERATIONS): with timers['NL']: managers = AtomsList(frames, nl_options) sleep(0.1) with timers['rep with grad']: managers = soap.transform(managers) sleep(0.1) Y0 = model._get_property_baseline(managers) with timers['pred energy']: KNM = kernel(managers, model.X_train, (False, False)) Y0 + np.dot(KNM, model.weights).reshape((-1)) sleep(0.1) with timers['pred forces']: rep = soap._representation forces = -compute_sparse_kernel_gradients( rep, model.kernel._kernel, managers.managers, model.X_train._sparse_points, model.weights.reshape( (1, -1))) sleep(0.1) managers, KNM = [], [] del managers, KNM sleep(0.3) else: for ii in range(N_ITERATIONS): with timers['NL']: managers = AtomsList(frames, nl_options) sleep(0.1) with timers['rep']: managers = soap.transform(managers) sleep(0.1) Y0 = model._get_property_baseline(managers) with timers['pred energy']: KNM = kernel(managers, model.X_train, (False, False)) Y0 + np.dot(KNM, model.weights).reshape((-1)) sleep(0.1) managers, KNM = [], [] del managers, KNM sleep(0.3) n_atoms = 0 for frame in frames: n_atoms += len(frame) timings = [] for tag in tags: data = timers[tag].dumps() data.update({'name': job.sp.name, 'n_atoms': n_atoms}) timings.append(data) tojson(job.fn(group['benchmark_fn']), timings)