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
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file superneuroabm-1.1.0.tar.gz.
File metadata
- Download URL: superneuroabm-1.1.0.tar.gz
- Upload date:
- Size: 104.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
968908ca0f22d13c62608db4bda9ca7ed65d0d00a71c0f85f3f45b423494c8d2
|
|
| MD5 |
e58af0124034504e94d2126a5e5c64c1
|
|
| BLAKE2b-256 |
2420816fc463eea6a237a4c7d1c120aec0d73674e0e2e9be4e234e770051496f
|
File details
Details for the file superneuroabm-1.1.0-py3-none-any.whl.
File metadata
- Download URL: superneuroabm-1.1.0-py3-none-any.whl
- Upload date:
- Size: 68.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46b647503779a8b757291ae49938b09f13421b26684bf13d6832a4894f082433
|
|
| MD5 |
dc84ad6a4c1eb1b1040579e2648cf2b5
|
|
| BLAKE2b-256 |
94dedc2df4df053c7a4d7f215cec4cb0340b5cf2b44fb14cb7a537a38981477c
|