SuperNeuroABM
SuperNeuroABM is a GPU-based multi-agent simulation framework for neuromorphic computing. Built on top of SAGESim, it enables fast and scalable simulation of spiking neural networks on both NVIDIA and AMD GPUs.
Key Features
- GPU Acceleration: Leverages CUDA (NVIDIA) or ROCm (AMD) for high-performance simulation
- Scalable: From single GPU to multi-GPU HPC clusters via MPI
- Flexible Neuron Models: LIF, adaptive-threshold LIF, higher-order LIF, and Izhikevich somas; single-exponential and weighted synapses
- STDP Support: Built-in pair-wise, bounded, quantized and memristive spike-timing-dependent plasticity, plus user-registered learning rules
- Train/Eval Switch:
model.train()/model.eval()andset_learning_enabled()toggle plasticity globally or per synapse - Named Parameters:
get_hyperparameters()/set_hyperparameters()(and their learning counterparts) address parameters by name rather than by position - Bulk and Distributed Construction: build a whole network in one call with
create_from_lists(), or have each MPI rank build only its own partition withload_post_owned()/load_from_adjacency()— no global graph is ever materialized - Network Generation: Brunel balanced random networks via
brunel_partition()withtopology="global" | "bounded" | "torus2d" | "torus3d", plus a spatially embedded economical small-world variant inspatial_smallworld_partition()(superneuroabm/brunel.py)
Requirements
- Python 3.11+
- NVIDIA GPU with CUDA drivers or AMD GPU with ROCm
- MPI implementation (OpenMPI, MPICH, Cray MPICH, ...) for multi-GPU execution
Validated stack: ROCm 7.2.0 with CuPy 14.0.1 on AMD MI250X (see SAGESim's
docs/frontier_setup_rocm720_cupy1401.md).
Installation
Your system might require specific steps to install mpi4py and/or cupy depending on your hardware. In that case, use your system's recommended instructions to install these dependencies first.
pip install superneuroabm
This pulls in sagesim==0.7.0.
Quick Start
from superneuroabm.model import NeuromorphicModel
model = NeuromorphicModel()
# Two LIF somas
pre = model.create_soma(breed="lif_soma", config_name="config_0")
post = model.create_soma(breed="lif_soma", config_name="config_0")
# External drive into `pre` (pre_soma_id=-1 means "external input"), and pre -> post
drive = model.create_synapse(
breed="single_exp_synapse", pre_soma_id=-1, post_soma_id=pre, config_name="config_0"
)
model.create_synapse(
breed="single_exp_synapse", pre_soma_id=pre, post_soma_id=post, config_name="config_0"
)
# Compile step functions and allocate GPU buffers
model.setup()
for tick in (2, 20, 40):
model.add_spike(synapse_id=drive, tick=tick, value=1)
model.simulate(ticks=200)
print("pre spikes:", model.get_spike_times(soma_id=pre))
print("post spikes:", model.get_spike_times(soma_id=post))
Breed and config names come from superneuroabm/component_base_config.yaml; pass your own YAML
with NeuromorphicModel(user_config=...) to override or add parameter sets.
Tutorials
| notebook | what it covers |
|---|---|
tutorials/00_simple_heterogenous_network.ipynb |
building a heterogeneous network by hand, injecting spikes, reading spike times and internal state histories |
tutorials/01_superneuroabm_digits.ipynb |
a two-layer feedforward SNN on the sklearn 8x8 digits, trained with semi-supervised bounded STDP and evaluated with spike-count readout |
Tutorial 01 brings its own components — tutorials/user_customized_lif.py
and tutorials/user_customized_stdp.py — registered on the
model at runtime, with no changes to the installed package. See
docs/CUSTOM_COMPONENTS.md for the full pattern.
Runnable scripts live in examples/, including a Brunel network generator and a
Masquelier 2008 STDP replication.
Unit Tests
python -m pytest tests/
The MPI consistency test compares multi-rank spike times against the single-rank baseline and needs more than one GPU:
srun -A <account> -q debug -N1 -n2 -c7 --gpu-bind=closest \
python -m pytest tests/test_mpi_comparison.py
Performance
Measured on Frontier (OLCF), one MPI rank per MI250X GCD, using a Brunel network on a periodic 3D lattice with a bounded connection radius:
- Weak scaling — at 12,500 neurons per GPU held constant, per-step parallel efficiency stays within 99–100 % from 64 to 2048 GPUs (a 32x span) at in-degrees K = 1000, 2000 and 4000. The largest point is 25.6 M neurons on 2048 GPUs.
- Strong scaling — a fixed 204,800-neuron problem reaches 13.4x speedup in wall time on 64x the GPUs (16 to 2048).
Methodology, the complete measured record, and the caveats are in
scaling_analysis/paper_figures/README.md; the design
discussion behind the wiring convention is in docs/BRUNEL_SCALING.md.
Reproduce with scaling_analysis/weak_3d_chunk.sh and scaling_analysis/strong_3d_chunk.sh.
Documentation
docs/FUNCTIONALITY_GUIDE.md |
the API surface, end to end |
docs/CUSTOM_COMPONENTS.md |
bringing your own soma, synapse and learning rule |
docs/DATA_FORMAT.md |
how agent properties are laid out |
docs/DISTRIBUTED_SIMULATION.md |
running across ranks |
docs/PARTITION_LOADING.md |
distributed construction from partition files |
docs/SINGLE_GPU_NETWORK_CONSTRUCTION.md |
bulk construction on one GPU |
docs/BRUNEL_SCALING.md |
Brunel network generation and the scaling study |
docs/SPIKE_RECORDING_NOTES.md |
what is recorded, and when |
docs/CPU_GPU_DATA_FLOW.md, docs/CPU_GPU_SYNC_DESIGN_NOTES.md |
host/device transfer and synchronization design |
Publications
License
BSD-3-Clause License - Oak Ridge National Laboratory
Metadata
Release files for superneuroabm 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| superneuroabm-1.1.0.tar.gz | 104.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| superneuroabm-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 173.5 kB
Release files / superneuroabm-1.1.0.tar.gz
| Download URL | superneuroabm-1.1.0.tar.gz |
|---|---|
| Size | 104.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
968908ca0f22d13c62608db4bda9ca7ed65d0d00a71c0f85f3f45b423494c8d2
|
|
BLAKE2b-256 checksum How to use checksums |
2420816fc463eea6a237a4c7d1c120aec0d73674e0e2e9be4e234e770051496f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / superneuroabm-1.1.0-py3-none-any.whl
| Download URL | superneuroabm-1.1.0-py3-none-any.whl |
|---|---|
| Size | 68.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
46b647503779a8b757291ae49938b09f13421b26684bf13d6832a4894f082433
|
|
BLAKE2b-256 checksum How to use checksums |
94dedc2df4df053c7a4d7f215cec4cb0340b5cf2b44fb14cb7a537a38981477c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|