Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Verifying CVODE performance with upcoming 9.0 release #3274

Open
pramodk opened this issue Dec 6, 2024 · 0 comments
Open

Verifying CVODE performance with upcoming 9.0 release #3274

pramodk opened this issue Dec 6, 2024 · 0 comments
Labels

Comments

@pramodk
Copy link
Member

pramodk commented Dec 6, 2024

Context

I am copying this ticket from one of the BBP internal ticket. As this example depends on BBP internal circuit & configurations, unfortunately it's a bit difficult to provide it as a complete reproducer. But I thought it would be good to copy whatever is available as we are going to loose access to BBP infrastructure soon.

Overview of the issue

This is what Andras provided:

Similar to this: https://github.com/neuronsimulator/nrn/issues/2787 I've also experienced a drop in performance of NEURON 9.0 compared to NEURON 8.2.4 when simulating a single cell using CVode.

My setup is in bluecellulab, but I've put together a minimal example that can be run in neurodamus with the latest module. It's a long simulation (22.5 minutes of biological time) with sparse events: there are 2 * 60 EPSPs (evoked by spike replay) and 75 spikes (evoked by current injection).

I've put it here:
/gpfs/bbp.cscs.ch/project/proj96/home/ecker/simulations/BBPBGLIB-1172

With CVode in blucellulab it took:
33 mins. in NEURON 9.0
20 mins. in NEURON 8.2.4

Although improved, the second number still seems weird, considering that it's just a single cell and I was hoping that CVode will require less compute time than biological time... Giuseppe claims that he ran the same sims <2-3 mins. with NEURON 7.

(With fixed dt, it takes ~5h with NEURON 9.0.)

See attached exported ticket.
[#BBPBGLIB-1172] NEURON (and CVode) performance drop.pdf

Example

The example BBPBGLIB-1172/bluecellulab/runsim.py mentioned in the ticket uses BBP's sonata circuit. But copying the example here for reference:

import os
import time
from libsonata import SpikeReader
from bluepysnap import Simulation
import bluecellulab

bluecellulab.set_verbose(2)
bluecellulab.neuron.h.cvode.atolscale("v", .1)
BASE_DIR = "/gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/andras/BBPBGLIB-1172"


def main(node_pop="S1nonbarrel_neurons", fastforward=750000.):
    # Get necessary params
    sim_config = os.path.join(BASE_DIR, "bluecellulab", "simulation_config.json")
    sim = Simulation(sim_config)
    t_end = sim.config["run"]["tstop"]
    pre_gid, post_gid = sim.node_sets.content["precell"]["node_id"][0], sim.node_sets.content["postcell"]["node_id"][0]
    pre_spikes = SpikeReader(os.path.join(BASE_DIR, "prespikes.h5"))[node_pop].get_dict()["timestamps"]
    # Instantiate postcell in `bluecellulab`
    sim = bluecellulab.CircuitSimulation(sim_config)
    sim.instantiate_gids([(node_pop, post_gid)], add_synapses=True, add_minis=False, add_pulse_stimuli=True,
                         intersect_pre_gids=[(node_pop, pre_gid)],
                         pre_spike_trains={(node_pop, pre_gid): pre_spikes})
    cell = sim.cells[(node_pop, post_gid)]
    for sec in cell.somatic + cell.axonal:
        sec.uninsert("SK_E2")  # fix AHP during high freq. firing, by removing big K+ channel
    # Run sim to fastforward point and move all synases to stable states (to solve fewer eqs.)
    start_time = time.time()
    sim.run(fastforward, cvode=True)
    for syn_id, synapse in cell.synapses.items():
        if synapse.hsynapse.rho_GB >= 0.5:
            synapse.hsynapse.rho_GB = 1.
            synapse.hsynapse.Use = synapse.hsynapse.Use_p
            synapse.hsynapse.gmax_AMPA = synapse.hsynapse.gmax_p_AMPA
        else:
            synapse.hsynapse.rho_GB = 0.
            synapse.hsynapse.Use = synapse.hsynapse.Use_d
            synapse.hsynapse.gmax_AMPA = synapse.hsynapse.gmax_d_AMPA
    # Complete run
    bluecellulab.neuron.h.cvode_active(1)
    bluecellulab.neuron.h.continuerun(t_end)
    print("Elapsed time: %s" % time.strftime("%H:%M:%S", time.gmtime(time.time() - start_time)))


if __name__ == "__main__":
    main()

Expected result/behavior

Performance between v8.0 and 9.0 should be same.

BBPBGLIB-1172.tgz

@pramodk pramodk added the bug label Dec 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant