Skip to content

Lava 0.5.0

Compare
Choose a tag to compare
@mgkwill mgkwill released this 29 Sep 00:51
· 193 commits to main since this release
a26416b

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

  • Intel Corporation: All contributing members of the Intel Neuromorphic Computing Lab

What's Changed

New Contributors

Full Changelog: v0.4.0...v0.5.0