Lava
Lava Architecture
Key attributes
Why do we need Lava?
Lava’s foundational concepts
1. Processes
2. Behavioral implementations via ProcessModels
3. Composability and connectivity
4. Cross-platform execution
Lava software stack
Getting Started with Lava
Installing Lava
1. System Requirements
2. Getting Started
2.1 Cloning Lava and Running from Source
2.2 [Alternative] Installing Lava from Binaries
3. Running Lava on Intel Loihi
4. Lava Developer Guide
5. Tutorials
How to learn more?
Walk through Lava
1. Usage of the Process Library
Processes
Ports and connections
Variables
Record internal Vars over time
Execution
Retrieve recorded data
Summary
Learn more about
2. Create a custom Process
Create a new ProcessModel
Use the custom SpikeGenerator
Execute and plot
Summary
Learn more about
How to learn more?
Processes
Recommended tutorials before starting:
What is a
Process
?
How to build a
Process
?
Overall architecture
AbstractProcess
: Defining
Vars
,
Ports
, and the API
ProcessModel
: Defining the behavior of a
Process
Instantiating the
Process
Interacting with
Processes
Accessing
Vars
Using custom APIs
Executing a
Process
Update
Vars
How to learn more?
ProcessModels
Recommended tutorials before starting:
Create a LIF
Process
Create a Python
LeafProcessModel
that implements the LIF
Process
Setup
Defining a
PyLifModel
for LIF
Compile and run
PyLifModel
Selecting 1
ProcessModel
: More on
LeafProcessModel
attributes and relations
How to learn more?
Execution
Recommended tutorials before starting:
Configuring and starting execution
Run conditions
Run configurations
Running multiple
Processes
Pausing, resuming, and stopping execution
Manual compilation and execution
How to learn more?
Connect processes
Recommended tutorials before starting:
Building a network of
Processes
Create a connection
Possible connections
There are some things to consider though:
Connect multiple
InPorts
from a single
OutPort
Connecting multiple
InPorts
to a single
OutPort
How to learn more?
Hierarchical
Processes
and
SubProcessModels
Recommended tutorials before starting:
Create LIF and Dense
Processes
and
ProcessModels
Create a Dense connection
Process
Create a Python Dense connection
ProcessModel
implementing the Loihi Sync Protocol and requiring a CPU compute resource
Create a LIF neuron
Process
Create a Python LIF neuron
ProcessModel
implementing the Loihi Sync Protocol and requiring a CPU compute resource
Create a DenseLayer Hierarchical
Process
that encompasses Dense and LIF
Process
behavior
Create a
SubProcessModel
that implements the DenseLayer
Process
using Dense and LIF child
Processes
Run the DenseLayer
Process
Run Connected DenseLayer
Processes
How to learn more?
Remote Memory Access
Recommended tutorials before starting:
Create a minimal
Process
and
ProcessModel
with a
RefPort
Create a Python Process Model implementing the Loihi Sync Protocol and requiring a CPU compute resource
Run the
Processes
Implicit and explicit VarPorts
Options to connect RefPorts and VarPorts
How to learn more?
MNIST Digit Classification with Lava
This tutorial assumes that you:
This tutorial gives a bird’s-eye view of
Our MNIST Classifier
General Imports
Lava Processes
ProcessModels for Python execution
Connecting Processes
Execution and results
How to learn more?
Follow the links below for deep-dive tutorials on the concepts in this tutorial:
Excitatory-Inhibitory Neural Network with Lava
This tutorial assumes that you:
This tutorial gives a high level view of
E/I Network
General imports
E/I Network Lava Process
ProcessModels for Python execution
Rate neurons
Defining the parameters for the network
Execution and Results
Visualizing the activity
Further analysis
Controlling the network
LIF Neurons
Execution and Results
Visualizing the activity
Controlling the network
DIfferent recurrent activation regimes
Running a ProcessModel bit-accurate with Loihi
Execution of bit accurate model
Follow the links below for deep-dive tutorials on the concepts in this tutorial:
Spike-timing Dependent Plasticity (STDP)
This tutorial assumes that you:
STDP from Lavas Process Library
The plastic connection Process
Plot spike trains
Plot traces
Plot STDP learning window and weight changes
Custom Learning Rules
This tutorial assumes that you:
2. Loihi’s learning engine
Epoch-based updates
Synaptic variables
Learning rules
Dependencies
Scaling factors
Factors
Traces
Example: Basic pair-based STDP
Instantiating LearningRule
The plastic connection Process
Plot spike trains
Plot traces
Plot STDP learning window and weight changes
Follow the links below for deep-dive tutorials on the concepts in this tutorial:
Three Factor Learning with Lava
This tutorial assumes that you:
Defining three-factor learning rule interfaces in Lava
Reward-modulated Spike-Timing Dependent Plasticity (R-STDP) learning rule
Defining a simple learning network with localized reward signals
Initialize network parameters and weights
Generate binary input and graded reward spikes
Initialize Network Processes
Connect Network Processes
Create monitors to observe the weight and trace dynamics during learning
Run the network
Visualize the learning results
Plot eligibility trace dynamics
Plot reward trace dynamics
Advanced Topic: Implementing custom learning rule interfaces
How to learn more?
Follow the links below for deep-dive tutorials on the concepts in this tutorial:
Algorithms and Application Libraries
Deep Learning
Introduction
Lava-DL Workflow
Getting Started
SLAYER 2.0
Example Code
Bootstrap
Example Code
Network Exchange (NetX) Library
Example Code
Detailed Description
Lava-DL SLAYER
Lava-DL Bootstrap
Lava-DL NetX
Dynamic Neural Fields
Introduction
What is lava-dnf?
Key features
Example
Neuromorphic Constrained Optimization Library
About the Project
Taxonomy of Optimization Problems
OptimizationSolver and OptimizationProblem Classes
Tutorials
Quadratic Programming
Quadratic Uncosntrained Binary Optimization
Examples
Solving QP problems
Solving QUBO
Getting Started
Requirements
Installation
[Alternative] Installing Lava via Conda
Developer Guide
Lava’s Origins
Contact Information
Development Roadmap
Initial Release
How to contribute to Lava
Open an Issue
Pull Request Checklist
Open a Pull Request
Coding Conventions
Code Requirements
Guidelines
Docstring Format
Contributors
Contributor
Committer
List of lava-nc/lava Project Committers
List of lava-nc/lava-dnf Project Committers
List of lava-nc/lava-optimization Project Committers
List of lava-nc/lava-dl Project Committers
Committer Promotion
Repository Structure
lava-nc/lava
lava-nc/lava-dnf
lava-nc/lava-dl
lava-nc/lava-optimization
lava-nc/lava-docs
Code of Conduct
Licenses
Lava API Documentation
Lava
Magma
lava.magma.compiler
lava.magma.core
lava.magma.runtime
Lava process library
lava.proc.conv
lava.proc.dense
lava.proc.io
lava.proc.learning_rules
lava.proc.lif
lava.proc.monitor
lava.proc.receiver
lava.proc.sdn
lava.proc.spiker
Lava Utils
lava.utils.dataloader
lava.utils.float2fixed
lava.utils.profiler
lava.utils.system
lava.utils.validator
lava.utils.visualizer
lava.utils.weightutils
Lava - Deep Learning
SLAYER
Neuron
Synapse
Spike
Axon
Dendrite
Blocks
Loss
Classifier
Input/Output
Auto
Utilities
Indices and tables
Bootstrap (ANN-SNN training)
Blocks
ANN Statistics Sampler
Routine
Indices and tables
Lava-DL NetX
Blocks
HDF5
Utils
Indices and tables
Lava - Dynamic Neural Fields
lava.lib.dnf.connect
lava.lib.dnf.connect.connect
lava.lib.dnf.connect.exceptions
lava.lib.dnf.kernels
lava.lib.dnf.kernels.kernels
lava.lib.dnf.operations
lava.lib.dnf.operations.enums
lava.lib.dnf.operations.exceptions
lava.lib.dnf.operations.operations
lava.lib.dnf.operations.shape_handlers
lava.lib.dnf.inputs
lava.lib.dnf.inputs.gauss_pattern
lava.lib.dnf.inputs.rate_code_spike_gen
lava.lib.dnf.utils
lava.lib.dnf.utils.convenience
lava.lib.dnf.utils.math
lava.lib.dnf.utils.plotting
lava.lib.dnf.utils.validation
Lava - Optimization
lava.lib.optimization.problems
lava.lib.optimization.problems.bayesian
lava.lib.optimization.problems.coefficients
lava.lib.optimization.problems.constraints
lava.lib.optimization.problems.cost
lava.lib.optimization.problems.problems
lava.lib.optimization.problems.variables
lava.lib.optimization.solvers
lava.lib.optimization.solvers.bayesian
lava.lib.optimization.solvers.generic
lava.lib.optimization.solvers.qp
lava.lib.optimization.utils
lava.lib.optimization.utils.generators
lava.lib.optimization.utils.solver_tuner
Lava
Lava API Documentation
Lava - Optimization
lava.lib.optimization.solvers
lava.lib.optimization.solvers.generic
lava.lib.optimization.solvers.generic.monitoring_processes
View page source
lava.lib.optimization.solvers.generic.monitoring_processes
lava.lib.optimization.solvers.generic.monitoring_processes.solution_readout
lava.lib.optimization.solvers.generic.monitoring_processes.solution_readout.models
lava.lib.optimization.solvers.generic.monitoring_processes.solution_readout.process