NengoLoihi¶
A backend for running Nengo models on Intel’s Loihi architecture.
To use the backend, simply replace:
nengo.Simulator(model)
with:
nengo_loihi.Simulator(model)
Release history¶
1.1.0 (January 25, 2022)¶
Compatible with Nengo 3.1.0 - 3.2.0
Compatible with NxSDK 0.9.0 - 1.0.0
Added
- Added support for NxSDK 1.0.0. (#317) 
- Added - Simulator.clear_probesto clear probe histories. This can help reduce memory usage during long runs, by running for a segment of the full run time, recording the relevant outputs, calling- clear_probes, and resuming the run. (#303)
- Added support for - padding='same'on- nengo.Convolutiontransforms. (#297)
- Added support for - nengo.transforms.ConvolutionTranspose. (#300)
- Blockand- Compartmentnow have- .discretize_infoattributes that store parameters used for discretizing that block and compartment. (#309)
- Modelnow has a- connection_decode_neuronsattribute that maps- Connectionobjects that require decode neurons to the corresponding- Ensembleobjects implementing them. (#309)
- Added the - GreedyInterchipallocator, which reduces inter-chip communication, speeding up networks with high traffic between chips. (#309)
- Added the - PartitionInterchipallocator, which reduces inter-chip communication with better partitioning than- GreedyInterchip. Requires the- nxmetispackage. (#309)
Changed
- Build errors specify the associated objects, making them easier to debug. (#289) 
- Deobfuscated NxSDK API calls. (#320) 
- The builder now respects the precision.bits attribute in - nengorcfiles, allowing for reduced-precision builds to save memory. (#309)
- The new - GreedyInterchipallocator is now the default allocator. (#309)
- NeuronOutputNoiseclasses and NengoDL builders for- LoihiLIFand- LoihiSpikingRectifiedLinearhave been moved to NengoExtras. (#325)
- Examples have been moved to NengoExamples. (#325) 
Fixed
- Fixed several issues to ensure that memory is freed when a - Simulatoris deleted. (#312)
- Fixed probe filters such that multiple - Simulator.runcalls now results in the same probe data as a single call of equivalent length. (#271, #303)
- Convolution with 1 x 1 kernels now works as expected. (#297) 
- Fixed a bug preventing targeting Loihi even if NxSDK is installed. (#300) 
- Fixed how - DecodeNeuronshandles- dt != 0.001. (#309)
1.0.0 (January 20, 2021)¶
Compatible with Nengo 3.1.0
Compatible with NxSDK 0.9.0 - 0.9.9
Added
- Added Legendre Memory Unit example. (#267) 
- Added a - timersattribute to- Simulatorthat tracks the wall time taken by various parts of the model, including build time and run time. (#260)
- Added the - pop_typeconfiguration option to the- Connectionconfig. See nengo_loihi.add_params for details. (#261)
- Added the - block_shapeconfiguration option to the- Ensembleconfig, and added the- nengo_loihi.BlockShapeclass to set that option. See nengo_loihi.add_params for details. (#264)
- Added the - Greedyallocator, which uses all cores on one chip before proceeding to the next chip.- Greedyis now the default allocator. (#266)
- Added the - n_chipsparameter to- HardwareInterfacefor specifying the number of chips on the board. (#266)
- Added - Model.utilization_summaryto provide a summary of how much of the various resources of each block are utilized. (#279)
- Added some new documentation focused on mapping large models onto Loihi. (#279) 
- Added a new example showing how to map larger convolutional networks to Loihi (applied to CIFAR-10 dataset). (#282) 
- Added a Keras example showing how to directly convert a Keras convolutional network to run on Loihi using the NengoDL Keras Converter. (#281) 
- Added support for NxSDK 0.9.8 and 0.9.9. (#296) 
- Added support for the - nengo.RegularSpikingneuron type, when using- LIFRateor- RectifiedLinearas the base type (these are equivalent to- LIFand- SpikingRectifiedLinear, respectively). (#296)
- Added - nengo_loihi.dvs.DVSFileChipProcess, for getting input from a pre-recorded DVS file and sending it to the Loihi board. (#306)
Changed
- We improved performance when - precompute=Falsethrough better spike packing, larger packets, and communicating to the host over a socket. (#260)
- The - precomputeargument of- Simulatornow defaults to- Noneand will be automatically set to- Trueif the model can be precomputed. (#260)
- Added the - add_to_containerargument to- DecodeNeurons.get_ensemble, which makes it easier to add a decode neurons ensemble to a network. (#260)
- Convolutiontransforms with- channels_last=Truenow work with outputs up to 1024 neurons. (#261)
- The - Probehas been renamed to- LoihiProbeto mirror the- LoihiBlockand- LoihiInputclasses, which are conceptually very similar. It has also been moved from- nengo_loihi.blockto- nengo_loihi.probe. (#264)
- We now raise a more informative error if connecting to Loihi hardware fails. (#264) 
- It is now possible to build models with larger ensembles because the builder can now split large Loihi blocks into smaller ones. (#264) 
- Modules for discretizing and validating models have been moved to the - builderdirectory. (#264)
- It is now possible to use multi-chip allocators with all models, including those that cannot be precomputed. (#266) 
- Allocators like - RoundRobinno longer accept the- n_chipsparameter. Instead, the- __call__method accepts- n_chips. (#266)
- NengoLoihi now supports NxSDK version 0.9.5.rc1. (#272) 
- NengoLoihi now supports Nengo version 3.1. Support for Nengo 3.0 has been dropped. (#296) 
- Minimum NengoDL version is now 3.4.0. (#296) 
Removed
- Removed the - OneToOneallocator, which only worked for one chip. The- Greedyallocator is identical for models that fit on one chip. (#266)
Fixed
- We no longer create a spike generator if we are communicating through Snips. (#260) 
- Fixed an issue in which ignored axons were still having an effect in convolutional networks where not all input pixels are used in the output. (#261) 
- Fixed an issue that prevented population spikes to be sent to the chip when - precompute=True. (#261)
- Fixed a bug preventing making sparse connections to an ensemble. (#245, #246) 
- We now ignore TensorFlow and NengoDL if an incompatible version is installed rather than exiting with an exception. (#264) 
- We now shut down the connection to the board more reliably, which should reduce the number of cases in which a model hangs indefinitely. (#266) 
- LoihiLIFneurons now round- tau_rcto mimic the discretization that occurs on Loihi, for more accurate simulation in Nengo (this was already done in the rate equation and NengoDL implementation of this neuron). (#275)
- LoihiLIFand- LoihiSpikingRectifiedLinearnow add the appropriate NengoDL builders when instantiated, so they work properly if used in NengoDL without making a NengoLoihi simulator. (#248, #275)
- Fixed bug when probing sliced objects. (#284) 
- Fixed bug when connecting to a single neuron ensemble with a single scalar weight. (#287) 
- Added an error if more than 32 “populations” (e.g. convolutional filters) are used with - pop_type=16axons, since this is not yet supported by NxSDK. (#286)
0.10.0 (November 25, 2019)¶
Compatible with Nengo 3.0.0
Compatible with NxSDK 0.8.7 - 0.9.0
Changed
- Nengo Loihi now requires NxSDK version 0.8.7 and supports NxSDK version 0.9.0. (#255) 
0.9.0 (November 20, 2019)¶
Compatible with Nengo 3.0.0
Compatible with NxSDK 0.8.5
Added
- It is now possible to slice the - preneurons in a neuron->neuron connection. (#226)
- Connections now support - Sparsetransforms. (#240)
- A more informative error message is raised if any encoders contain NaNs. (#251) 
Changed
- Connections from neurons with scalar transforms are now sparse internally. This allows much larger neuron->neuron connections with scalar transforms. (#226) 
- The - scipypackage is now required to run Nengo Loihi. (#240)
- Increased minimum NengoDL version to 3.0 (and this transitively increases the minimum TensorFlow version to 2.0). (#259) 
- Nengo Loihi is now compatible with Nengo version 3.0.0. (#259) 
Fixed
0.8.0 (June 23, 2019)¶
Compatible with Nengo 2.8.0
Compatible with NxSDK 0.8.5
Changed
- Nengo Loihi now requires NxSDK version 0.8.5. (#225) 
0.7.0 (June 21, 2019)¶
Compatible with Nengo 2.8.0
Compatible with NxSDK 0.8.0 - 0.8.1
Added
- Added - RoundRobinallocator, which allows networks to be run across multiple chips (multi-chip) by assigning each ensemble to a different chip in a round-robin format. This allocator can be selected using the- hardware_optionsargument when creating- nengo_loihi.Simulator. (#197)
- Added support for - Ensemble.neurons -> Ensembleconnections. (#156)
Changed
- Switched to nengo-bones templating system for TravisCI config/scripts. (#204) 
- It is no longer possible to pass - network=Noneto- Simulator. Previously this was possible, but unlikely to work as expected. (#202)
- Better error messages are raised when attempting to simulate networks in which certain objects participating in a learning rule are on-chip. (#202, #208, #209) 
- Nengo Loihi now requires at least NxSDK version 0.8.0. (#218) 
- The default intercept range set by - nengo_loihi.set_defaults()is now (-1, 0.5), instead of (-0.5, 0.5). (#126)
- Obfuscated non-public information related to Intel’s NxSDK. (#228) 
Fixed
- The splitting and passthrough removal procedures were significantly refactored, which fixed an issue in which networks could be modified in the splitting process. (#202, #211) 
- It is now possible to make connections and probes with object slices (e.g., - nengo.Probe(my_ensemble[0])). (#202, #205, #206)
- We no longer disable the Nengo decoder cache for all models. (#202, #207) 
- Transforms to on-chip neurons are now applied on-chip, which avoids scaling issues and large off-chip transforms. (#126) 
0.6.0 (February 22, 2019)¶
Compatible with NxSDK 0.7.0 - 0.8.0
Changed
- New Nengo transforms are supported, including - nengo.Convolution. Many of the classes previously in- conv.pyhave been moved to Nengo as part of this transition. The MNIST convnet example demonstrates the new syntax. (#142)
- Emulator now fails for any cx_base < 0, except -1 which indicates an unused axon. (#185) 
- Noise now works correctly with small exponents on both the chip and emulator. Previously, the emulator did not allow very small exponents, and such exponents produced noise with the wrong magnitude on the chip. (#185) 
- Models trained using NengoDL use tuning curves more similar to those of neuron on the chip, improving the accuracy of these model. (#140) 
Removed
- Removed the - NIFand- NIFRateneuron types. These types were only used for encoding node values in spikes to send to the chip, which can be done just as well with- nengo.SpikingRectifiedLinearneurons. (#185)
- Removed the unused/untested - Synapse.set_diagonal_weights. (#185)
Fixed
0.5.0 (February 12, 2019)¶
Compatible with NxSDK 0.7.0 - 0.8.0
Added
- Allow - LIF.min_voltageto have effect. The exact minimum voltage on the chip is highly affected by discritization (since the chip only allows minimum voltages in powers of two), but this will at least provide something in the ballpark. (#169)
- Population spikes can now be used to send information more efficiently to the chip. Population spikes are necessary for larger models like those using CIFAR-10 data. (#161) 
Changed
- PES learning in Nengo Loihi more closely matches learning in core Nengo. (#139) 
- Learning in the emulator more closely matches learning on hardware. (#139) 
- The neurons used to transmit decoded values on-chip can be configured. By default, we use ten pairs of heterogeneous neurons per dimension. (#132) 
- Internal classes and functions have been reorganized and refactored. See the pull request for more details. (#159) 
- Simulator now gives a warning if the user requests a progress bar, instead of an error. This avoids potential problems in - nengo_guiand elsewhere. (#187)
- Nengo Loihi now supports NxSDK version 0.8.0. Versions 0.7.0 and 0.7.5 are still supported. (#188) 
Fixed
- We integrate current (U) and voltage (V) more accurately now by accounting for rounding during the decay process. This integral is used when discretizing weights and firing thresholds. This change significantly improves accuracy for many networks, but in particular dynamical systems like integrators. (#124, #114) 
- Ensure things in the build and execution happen in a consistent order from one build/run to the next (by using - OrderedDict, which is deterministic, instead of- dict, which is not). This makes debugging easier and seeding consistent. (#151)
- Probes that use snips on the chip (when running with - precompute=False) now deal with negative values correctly. (#169, #141)
- Filtering for probes on the chip is guaranteed to use floating-point now (so that the filtered output is correct, even if the underlying values are integers). (#169, #141) 
- Neuron (spike) probes can now be filtered with - synapseobjects. (#182, #183)
0.4.0 (December 6, 2018)¶
Compatible with NxSDK 0.7.0
Added
- Added version tracking to documentation. 
Changed
- An error is now raised if a learning rule is applied to a non-decoded connection. (#103) 
- Switched documentation to new nengo-sphinx-theme. (#143) 
Fixed
0.3.0 (September 28, 2018)¶
Compatible with NxSDK 0.7.0
Added
- Models can now use the - nengo.SpikingRectifiedLinearneuron model on both the emulator and hardware backends.
- Models can now run with different - dtvalues (the default is 0.001, or 1 millisecond).
- Added support for Distributions on Connection transforms. 
Changed
- Now compatible with NxSDK 0.7. We are currently not supporting older versions of NxSDK, but may in the future. 
- Models will not be precomputed by default. To precompute models, you must explicitly pass - precompute=Trueto- nengo_loihi.Simulator.
- Models that do not run any objects on Loihi will raise an error. 
- Ensemble intercept values are capped to 0.95 to fix issues with the current discretization method. 
Fixed
- Tuning curves now take into account the Loihi discretization, improving accuracy on most models. 
- PES learning can now be done with multidimensional error signals. 
- Manually reset spike probes when Simulator is initialized. 
- Several fixes to filtering and connecting between objects on and off chip. 
0.2.0 (August 27, 2018)¶
First public alpha release of Nengo Loihi! If you have any questions, please ask on our forum and if you run into any issues let us know.
0.1.0 (July 4, 2018)¶
Pre-alpha release of Nengo Loihi for testing at the 2018 Telluride neuromorphic engineering conference. Thanks to all participants who tried out this early version of Nengo Loihi and provided feedback.