Lava 0.5.0
The release of Lava v0.5.0 includes major updates to the Lava Deep Learning (Lava-DL) and Lava Optimization (Lava-Optim) libraries and offers the first update to the core Lava framework following the first release of the Lava extension for Loihi in July 2022.
- Lava offers a new learning API on CPU based on the Loihi on-chip learning engine. In addition, various functional and performance issues have been fixed since the last release.
- Several high-level application tutorials on QUBO (maximum independent set), deep learning (PilotNet, Oxford Radcliffe spike training), 2-factor STDP-based learning, and design of an E/I network model as well as a comprehensive API reference documentation make this version more accessible to new and experienced users.
New Features and Improvements
- Added support for convolutional neural networks (lava-nc PR #344, lava-loihi PR #343).
- Added NcL2ModelConv ProcessModel supporting Loihi 2 convolutional connection sharing (lava-loihi PR #343).
- Added NcL1ModelConvAsSparse ProcessModel supporting convolutional connections on implemented as sparse connections (Compatible with both Loihi 1 and Loihi 2).
- Added ability to represent convolution inferred connection to represent shared connection to and from Loihi 2 convolution synapse (lava-loihi PR #343).
- Added Convolution Manager to manage the resource allocation for utilizing Loihi 2 convolution feature (lava-loihi PR #343).
- Added convolution connection strategy to partition convolution layers to Loihi2 neurocores (lava-loihi PR #343).
- Added support for convolution spike generation (lava-loihi PR #343).
- Added support for Convolution specific varmodels (ConvNeuronVarModel and ConvInVarModel) for interacting with the Loihi 2 convolution configured neuron as well as Loihi 2 convolution input from a C process.
- Added embedded IO processes and C-models to bridge the interaction between Python and Loihi 2 processes in the form of spikes as well as state read/write including convolution specific support. (lava-nc PR #344, lava-loihi PR #343)
- Added support for compressed message passing from Python to Loihi 2 using Loihi 2’s embedded processors (lava-nc PR #344, lava-loihi PR #343).
- Added support for resource cost sharing between Loihi 2 to allow for flexible memory allocation in neurocore (lava-loihi PR #343).
- Added support for sharing axon instructions for output spike generation from a Loihi 2 neurocore (lava-loihi PR #287).
- Added support for learning in simulation (CPU) according to Loihi’s learning engine (PR #332):
- STDPLoihi class is a 2-Factor STDP learning algorithm added to the Lava Process Library based on the Loihi learning engine.
- LoihiLearningRule class provides the ability to create custom learning rules based on the Loihi learning engine.
- Implemented a LearningDense Process which takes the same arguments as Dense, plus an optional LearningRule argument to enable learning in its ProcessModels.
- Implemented floating-point and bit-approximate PyLoihi ProcessModel, named PyLearningDenseModelFloat and PyLearningDenseModelBitApproximate, respectively.
- Also implemented bit-accurate PyLoihi ProcessModel named PyLearningDenseModelBitAcc.
- Added a tutorial to show the usage of STDPLoihi and how to create custom learning rules.
Bug Fixes and Other Changes
- The fixed-point PyProcessModel of the Dense Process now has the same behavior as the NcProcessModel for Loihi 2 (PR #328)
- The Dense NcProcModel now correctly represents purely inhibitory weight matrices on Loihi 2 (PR #376).
- The neuron current overflow behavior of the fixed point LIF model was fixed so that neuron current wraps to opposite side of integer range rather than to 0. (PR #364)
Breaking Changes
- Function signatures of node allocate() methods in Net-API have been updated to use explicit arguments. In addition, some function argument names have been changed to abstract away Loihi register details.
- Removed bit-level parameters and Vars from Dense Process API.
Known Issues
- Only one instance of a Process targeting an embedded processor (using CProcessModel) can currently be created. Creating multiple instances in a network, results in an error. As a workaround, the behavior of multiple Processes can be fused into a single CProcessModel.
- Direct channel connections between Processes using a PyProcessModel and NcProcessModel are not supported.
- Channel communication between PyProcessModels is slow.
- The Lava Compiler is still inefficient and in need of improvement to performance and memory utilization.
- Virtual ports are only supported between Processes using PyProcModels, and between Processes using NcProcModels. Virtual ports are not supported when Processes with CProcModels are involved or between pairs of Processes that have different types of ProcModels. In addition, VirtualPorts do not support concatenation yet.
- Joining and forking of virtual ports is not supported.
- The Monitor Process does currently only support probing of a single Var per Process implemented via a PyProcessModel. The Monitor Process does currently not support probing of Vars mapped to NeuroCores.
- Some modules, classes, or functions lack proper docustrings and type annotations. Please raise an issue on the GitHub issue tracker in such a case.
- Learning API does not support 3-Factor learning rules yet.
Thanks to our Contributors
- Alejandro Garcia Gener (@alexggener)
- @fangwei123456
- Julia A (@JuliaA369)
- Maryam Parsa
- @Michaeljurado24
- Intel Corporation: All contributing members of the Intel Neuromorphic Computing Lab
What's Changed
- Update RELEASE.md by @mgkwill in #270
- Add C Builder Index to the channel name to make it unique in case of … by @joyeshmishra in #271
- Changes in DiGraphBase class to enable recurrence by @srrisbud in #273
- Fix for dangling ports by @bamsumit in #274
- Unique process models in process models discovery by @bamsumit in #277
- Added a compilation order heuristic for compiling C before Nc processes by @srrisbud in #275
- Process module search fix by @bamsumit in #285
- Fix default sync domain not splitting processes according to the Node by @ysingh7 in #286
- Add type to isinstance call by @mgkwill in #287
- Add intel numpy to conda install instructions by @mgkwill in #298
- Modified mapper to handle disconnected lif components connected to sa… by @ysingh7 in #294
- Bump nbconvert from 6.5.0 to 6.5.1 by @dependabot in #317
- Make Pre Post Functions execution on board by @joyeshmishra in #323
- Doc/auto api by @weidel-p in #318
- changed heading to improve rendering website by @weidel-p in #338
- Input compression features for large dimension inputs and infrastructure for convolution feature by @bamsumit in #344
- Stochastic Constraint Integrate and Fire (SCIF) neuron model for constraint satisfaction problems by @srrisbud in #335
- Update tutorials to newest version by @weidel-p in #340
- Transfer dev deps to dev section: Update pyproject.toml by @mgkwill in #355
- Ability to get/set synaptic weights by @srrisbud in #359
- Fixed pt lif precision by @ackurth-nc in #330
- Use poetry 1.1.15 explicitly by @srrisbud in #365
- Dev/learning rc 0.5 by @weidel-p in #332
- SCIF neuron model: Minor fixes by @srrisbud in #367
- Ei network tutorial by @ackurth-nc in #309
- Fix issue 334 by @PhilippPlank in #364
- Add Missing Variables in Conv Model by @SveaMeyer13 in #354
- Weight bit-accuracy of Dense (Python vs. Loihi 2) by @mathisrichter in #328
- Public processes for optimization solver by @phstratmann in #374
- Fixing Dense inhibitory sign_mode by @mathisrichter in #376
- Eliminate design issues in learning-related code by @mathisrichter in #371
- Enable Requesting Pause from Host. by @GaboFGuerra in #373
- Update poetry version in CI by @mgkwill in #380
- Enable exception proc_map, working with dataclasses, etc. by @GaboFGuerra in #372
- Expose noise amplitude for SCIF by @GaboFGuerra in #383
- Update ReadGate API according to NC model. by @GaboFGuerra in #384
- Add output messages for ReadGate's send_req_pause port. by @GaboFGuerra in #385
- Version 0.5.0 by @mgkwill in #375
New Contributors
- @dependabot made their first contribution in #317
- @weidel-p made their first contribution in #318
- @ackurth-nc made their first contribution in #330
- @SveaMeyer13 made their first contribution in #354
- @phstratmann made their first contribution in #374
- @GaboFGuerra made their first contribution in #373
Full Changelog: v0.4.0...v0.5.0