NeMo is a neuromorphic hardware simulation leveraging the extremely fast and slim ROSS engine. Simulation of various neuromorphic hardware is supported.
- Distributed simulation - Using MPI, NeMo will run on large-scale compute clusters
- Capable of simulating large scale hardware
- Using ROSS, NeMo was able to scale a simulation of millions of neurons across over 65,000 processors
- NEW: New neuron models can be added to the simulation by subclassing the base neuron model.
- Hardware configurations, models, and input spikes are generic JSON files.
- Preliminary neuromorphic process scheduling support
- Features
- Requirements & Building
- Usage and Examples
- Configuration File Documentation
- Neuromorphic OS Development
- Test Data
- Development
- References
In order to build NeMo you will need:
- An installed MPI implementation for your system. OpenMPI and MPICH are good options. In general, any MPI compatible with ROSS will work.
- A mostly C++ 14 compatible compiler
- Tested with GCC
$\geq 7$ , Clang, and IBM XLC++ 14
- Tested with GCC
- CMake
$\geq 3.10$ - But current dev branch is using CMake 3.15
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release ..
make nemo2
← makes the primary program.
Tests can be made using make tests
.
This will create binaries in bin/
and ./
directory and libraries in
lib/
directory. Tests are built under the tests
folder. An example
configuration file is copied to the <BUILD FOLDER>/config
from the
example config folder.
A future release will include a smaller test application!
More detailed install instructions are coming in the Wiki
To run
./nemo2 --cfg:<PATH_TO_CONFIG_FILE.json>
mpirun -np XX ./nemo2 --cfg:<PATH_TO_CONFIG_FILE.JSON> --synch=[2|3|5]
There are many configuration tweaks for the ROSS simulation as well as other config options for NeMo·2. To get a list of options run:
./nemo2 --help
Most of
note:
Some helpful config options are:
JSON Setting | Details
Setting | Details |
---|---|
GLOBAL_DEBUG, | Global Debug - True prints out a lot of info |
ns_cores_per_chip | How many neurosynaptic cores exist per chip? |
total_chips | Total number of chips in the simulation |
do_neuro_os | Activate neuromorphic OS |
sched_type | Scheduling algorithm |
save_nos_stats | Save neuromorphic operating system stats |
save_all_spikese | Save all output spike files |
save_membrane_pots | Save per-event membrane potentials |
neurons_per_core | Neurons per neurosynaptic core |
output_spike_file | Where to save output spike files |
output_nos_stat_file | Where to save neuromorphic OS files |
output_membrane_pot_file | Where to save membrane potential record |
MODELS | |
id | Model ID. Must be in sequence and unique (0,1...) |
needed_cores | NS cores needed by model. 0 indicates the model file will set this |
model_file_path": "./models/cifar_100_model | Path to the JSON model file |
spike_file_path": "./cifar_100_spike | Path to the spike JSON (messagepack supported as well) file |
requested_time, | Time requested for the model. 0 indicates forever (queue up all input spikes) |
benchmark_model_name": | If this is a benchmark model, specifiy it here. File paths are ignored in this case. |
Defaults for this file look like:
{
"nemo_global": {
"GLOBAL_DEBUG": true,
"ns_cores_per_chip": 32,
"total_chips": 2,
"do_neuro_os": false,
"sched_type": "FCFS",
"save_nos_stats": true,
"save_all_spikes": false,
"save_membrane_pots": false,
"neurons_per_core": 256,
"output_spike_file": "./model_output.csv",
"output_nos_stat_file" : "./output_nos_stat_file.csv",
"output_membrane_pot_file": "./output_membrane_pot.csv",
"core_type_ids": [
0,
1
]
},
"models":[
"MODELS GO HERE"
]
}
}
Currently under development - Neuro OS features the ability to run spike based neuron process scheduling. More to come.
A few demo models are available. We are finding a hosting provider to
store them, as a model file in
Under massive development.
Check out the original NeMo simulating many millions of neurons on a BlueGeneQ!