예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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']
예제 #6
0
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
예제 #7
0
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)