OpenCL-based simulator for Nengo neural models
Project description
OpenCL-based Nengo Simulator
NengoOCL is an OpenCL-based simulator for brain models built using Nengo. It can be orders of magnitude faster than the reference simulator in nengo for large models.
Usage
To use the nengo_ocl project’s OpenCL simulator, build a Nengo model as usual, but use nengo_ocl.Simulator when creating a simulator for your model:
import numpy as np import matplotlib.pyplot as plt import nengo import nengo_ocl # define the model with nengo.Network() as model: stim = nengo.Node(np.sin) a = nengo.Ensemble(100, 1) b = nengo.Ensemble(100, 1) nengo.Connection(stim, a) nengo.Connection(a, b, function=lambda x: x**2) probe_a = nengo.Probe(a, synapse=0.01) probe_b = nengo.Probe(b, synapse=0.01) # build and run the model with nengo_ocl.Simulator(model) as sim: sim.run(10) # plot the results plt.plot(sim.trange(), sim.data[probe_a]) plt.plot(sim.trange(), sim.data[probe_b]) plt.show()
If you are running within nengo_gui make sure the PYOPENCL_CTX environment variable has been set. If this variable is not set it will open an interactive prompt which will cause nengo_gui to get stuck during build.
Dependencies and Installation
The requirements are the same as Nengo, with the additional Python packages mako and pyopencl (where the latter requires installing OpenCL).
General:
Python 2.7+ or Python 3.3+ (same as Nengo)
One or more OpenCL implementations (test with e.g. PyOpenCl)
A working installation of OpenCL is the most difficult part of installing NengoOCL. See below for more details on how to install OpenCL.
Python packages:
NumPy
nengo
mako
PyOpenCL
In the ideal case, all of the Python dependencies will be automatically installed when installing nengo_ocl with
pip install nengo-ocl
If that doesn’t work, then do a developer install to figure out what’s going wrong.
Developer Installation
First, pip install nengo. For best performance, first make sure a fast version of Numpy is installed by following the instructions in the Nengo README.
This repository can then be installed with:
git clone https://github.com/nengo/nengo-ocl.git
cd nengo-ocl
python setup.py develop --user
If you’re using a virtualenv (recommended!) then you can omit the --user flag. Check the output to make sure everything installed correctly. Some dependencies (e.g. pyopencl) may require manual installation.
Installing OpenCL
How you install OpenCL is dependent on your hardware and operating system. A good resource for various cases is found in the PyOpenCL documentation:
Below are instructions that have worked for the NengoOCL developers at one point in time.
AMD OpenCL on Debian Unstable
On Debian unstable (sid) there are packages in non-free and contrib to install AMD’s OpenCL implementation easily. Actually, the easiest thing would be to apt-get install python-pyopencl. But if you’re using a virtual environment, you can sudo apt-get install opencl-headers libboost-python-dev amd-opencl-icd amd-libopencl1 and then pip install pyopencl.
Nvidia OpenCL on Debian/Ubuntu Linux
On Debian unstable (sid) there are packages for installing the Nvidia OpenCL implementation as well.
sudo apt-get install nvidia-opencl-common nvidia-libopencl1
Ensure that the Nvidia driver version matches the OpenCL library version. You can check the Nvidia driver version by running nvidia-smi in the command line. You can find the OpenCL library version by looking at the libnvidia-opencl.so.XXX.XX file in the /usr/lib/x86_64-linux-gnu/ folder.
Intel OpenCL on Debian/Ubuntu Linux
The Intel SDK for OpenCL is no longer available. Intel OpenCL drivers can be found on Intel’s website. See the PyOpenCL wiki for instructions.
Running Tests
From the nengo-ocl source directory, run:
py.test nengo_ocl/tests --pyargs nengo -v
This will run the tests using the default context. If you wish to use another context, configure it with the PYOPENCL_CTX environment variable (run the Python command pyopencl.create_some_context() for more info).
Release History
3.0.0 (November 16, 2023)
Compatible with Nengo 3.1.0
Added
The benchmarks in the examples folder now have nicer command-line interfaces. Use the --help flag with any benchmark to learn more about the options. (#187)
The new examples/benchmark_backends.py script makes it easier to compare between different backends on any of the benchmarks. (#187)
Changed
Sparse matrix multiplication is now faster in many cases by using the ELLPACK matrix format. It uses more memory for some sparse matrices, though; for matrices where it would result in a large increase in memory usage, we fall back on the old CSR format. To force a particular format, set the NENGO_OCL_SPMV_ALGORITHM environment variable to either “ELLPACK” or “CSR”. (#188)
Made NengoOCL available under the GPLv2 license. (#191)
Removed
Dropped support for Python 3.5. (#187)
2.1.0 (Nov 23, 2020)
Compatible with Nengo 3.1.0
Added
Added remove_zero_incs and remove_unmodified_resets simplifications for the operator list. These are enabled by default, and remove unnecessary operators (e.g. that are multiplying by zero and adding that to a signal). This increases both build speed and run speed. These simplifications can be disabled by modifying nengo_ocl.operators.simplifications. (#183)
Changed
2.0.0 (Sept 4, 2020)
Compatible with Nengo 3.0.0
Added
Sparse transforms are now supported. (#176)
Added Simulator.clear_probes method to clear probe data stored in memory. (#179)
Changed
1.4.0 (July 4, 2018)
Improvements
Supports recent Nengo versions, up to 2.8.0.
Supports the new SpikingRectifiedLinear neuron type.
1.3.0 (October 6, 2017)
Improvements
Supports recent Nengo versions, up to 2.6.0.
Bugfixes
Fixed an issue in which stochastic processes would not be fully reset on simulator reset.
Fixed an issue in which building a model multiple times could result in old probe data persisting.
1.2.0 (February 23, 2017)
Improvements
Supports all Nengo versions from 2.1.2 to 2.3.1.
nengo_ocl.Simulator is no longer a subclass of nengo.Simulator, reducing the chances that Nengo OCL will be affected by changes in Nengo.
1.1.0 (November 30, 2016)
Features
Added support for RectifiedLinear and Sigmoid neuron types.
Added support for arbitrary Process subclasses. Unlike the processes that are explicitly supported like WhiteSignal, these processes may not fully utilize the OpenCL device.
Added support for applying synaptic filters to matrices, which is commonly done when probing connection weights.
Improvements
Supports all Nengo versions from 2.1.2 to 2.3.0.
The LIF model is now more accurate, and matches the implementation in Nengo (see Nengo#975).
Several operators have been optimized and should now run faster.
Bugfixes
Fixed compatibility issues with Python 3, and certain versions of NumPy and Nengo.
1.0.0 (June 6, 2016)
Release in support of Nengo 2.1.0. Since Nengo no longer supports Python 2.6, we now support Python 2.7+ and 3.3+.
Features
Added support for Process class and subclasses, new in Nengo in 2.1.0. We specifically support the WhiteNoise, WhiteSignal, and PresentInput processes. We also support the Conv2d and Pool2d processes in nengo_extras.
LinearFilter is now fully supported, allowing for general synapses.
Improvements
The Numpy simulator in this project (sim_npy) has been phased out and combined with the OCL simulator (sim_ocl). It is now called Simulator and resides in simulator.py.
Operator scheduling (i.e. the planner) is much faster. We still have only one planner (greedy_planner), which now resides in planners.py.
Many small speed improvements, including a number of cases where data was needlessly copied off the device to check sizes, dtypes, etc.
Documentation
Updated examples to use up-to-date Nengo syntax.
0.1.0 (June 8, 2015)
Initial release of Nengo OpenCL! Supports Nengo 2.0.x on Python 2.6+ and 3.3+.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for nengo_ocl-3.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ab3b96c812f07859b786f6cdb9458c885ce170f331832a84b4c11db3307f4b9 |
|
MD5 | eef03e017809661fc7bfddb5133f333f |
|
BLAKE2b-256 | 876146f2173c95ce0ecccdd52596efcd0b17bf451ee4fcf28ecf1925be917dde |