Fork me on GitHub

General Questions

What is Neurokernel?

Neurokernel is an open software platform implemented in Python for the emulation and validation of fruit fly (Drosophila melanogaster) brain models on multiple Graphics Processing Units (GPUs).

Isn't Neurokernel just another neural circuit simulator?

In short, no!

Successfully modeling the entire brain of even a relatively "simple" organism such as the fruit fly requires an architectural framework that goes beyond general-purpose neural circuit simulators. Such a framework

  • must be directly informed by the functional organization of the fly brain,
  • must provide a high-level programming model,
  • must provide machinery needed to address the complexity of leveraging widely available commodity parallel computing resources in an efficient and scalable manner,
  • ensure that the work of multiple independent researchers focusing on different parts of the fly brain remains interoperable.

As a framework for successfully modeling the fly brain, Neurokernel must serve as an operating system kernel vis-a-vis models of the entire brain; just as an operating system must be able to allocate computational resources and serve as an extended machine that provides the services needed by software applications, so too must Neurokernel be able to allocate parallel computational resources (i.e., available GPUs) and provide the programmability (i.e., software interfaces and computational models) required by the constituent elements of a fly brain model.

Why does Neurokernel use GPUs rather than some other high-performance computing technology?

Developing a successful emulation of the fly brain is a nontrivial undertaking that requires the combined efforts of many researchers. To enable and facilitate this collaboration, a framework for developing and executing a fly brain model must make use of a hardware which is not only powerful but available to a wide range of researchers. There are a growing number of publications that demonstrate the ability of GPU-based spiking neural simulators (Nageswaran et al., 2009, Fidjeland et al., 2010, Nowotny et al., 2011, Richert et al., 2011, Minkovich et al., 2014) to achieve near-real-time performance for networks of at least of the magnitude of the Drosophila brain (if not larger) and the possibility of increasing simulator performance for such networks with the intelligent use of multiple GPUs. In light of these developments and the documented increases in the speed, parallelism, and data transfer bandwidth exhibited by recent generations of GPU technology, clusters of GPUs appear to be the most suitable hardware substrate for developing a near-real-time model of the entire fly brain at the present time (2014).

The fruit fly's brain is too simple. Isn't the mammalian/primate/human brain more interesting?

Although the brains of higher organisms can support a range of abilities that go well beyond those of a fly, the number of neurons and synapses in even "simpler" mammals such as the mouse are several orders of magnitude higher than those in the fly and will hence require proportionally more computational horsepower to attack than will be available to most researchers in the forseeable future. By contrast, near-real-time simulations of neuronal networks of the magnitude of the fly brain using simple spiking neuron models are becoming possible (see above); it therefore seems that the already-rapid improvements in GPU technology will make emulation of the entire fly brain at biological time scales using biologically realistic complex neuron and synapse models achievable in the near future.

It's worth noting that despite obvious differences in size and complexity between the fly brain and those of more complex organisms such as mammals, researchers dating back to Cajal have observed common design principles in the structure of their sensory subsystems. Moreover, a surprising number of genes and proteins expressed in the mammalian brain are also conserved in the genome of the fruit fly; this suggests that insight obtained by focusing on Drosophila will prove useful in understanding the mammalian brain.

While it is tempting to consider scaling up the design of the Neurokernel from fruit flies to mice and primates, doing so at this time would be akin to scaling up the internal architecture of a novel computer architecture to a cluster of interconnected computers while still optimizing the first computer's architecture! Given how much more complex biological systems are in comparison to existing computer architectures, Knuth's warning against premature optimization is at least as relevant to brain modeling as it is to designing a new computer architecture, operating system kernel, or network communication scheme.

The fruit fly's brain is far more complex than other model organisms. Why not focus on them instead?

Although emulation of the fly brain may superficially seem more daunting than developing models of the nervous systems of simpler organisms, there are reasons why the fly may be a preferable model organism. One major factor is the range of complex nonreactive behaviors exhibited by the fly that can be experimentally probed using a well-developed toolkit of powerful genetic techniques for manipulation of its neural circuitry. Moreover, an increasing number of powerful experimental methods have been developed for obtaining precise recordings of the fly's neuronal responses to stimuli that are not yet available for other organisms.

Neurokernel Architecture

What are local processing units (LPUs) and why are they significant?

Determining how the brain's highly complex structure implements specific functions requires its decomposition into functional modules whose input-output relationships can be individually analyzed and whose interactions can be explained in terms of the groups of synaptic connections that exist between them. Analysis of the fruit fly connectome has revealed that its brain can be decomposed into fewer than 50 distinct neural circuits, most of which correspond to anatomically distinct regions in its brain. These regions, or neuropils, include sensory processing structures such as the olfactory system's antennal lobe and the vision system's lamina and medulla, as well as higher level structures such as the protocerebral bridge that receive input from sensory modules. We refer to most of these modules as local processing units (LPUs) because they are characterized by unique populations of local neurons whose processes are restricted to each LPU. The fly brain also comprises modules known as hubs that contain no local neurons; they appear to serve as communication relays between different LPUs. In contrast to a purely anatomical subdivision, the decomposition of the brain into LPUs and hubs casts the problem of reverse engineering the brain as one of discovering the processing performed by each individual LPU and determining how specific patterns of axonal connectivity integrate them into functional subsystems.

What's the difference between synaptic and axonal connectivity patterns?

An LPU comprises two populations of neurons, i.e., its local neurons (which project exclusively to other neurons comprised by the LPU), and its projection neurons (which may also project to neurons in other LPUs). Additionally, all synaptic connections defined between an incoming axon and neurons within an LPU are deemed to be part of the LPU. Axonal connectivity patterns between LPUs refer to the existence of axons that project from one LPU to the input ports of another.

Using Neurokernel

How do I download and install it?

See the installation instructions here.

Are there any examples of how to use Neurokernel?

Yes! Take a look in the examples folder and the corresponding IPython notebooks. These examples include partial models of the fly's olfactory and vision systems that are based upon actual fly connectome data.

What neuron and synapse models does Neurokernel support?

Neurokernel currently provides sample implementations of a select number of neural component models and compatible synapse models; these include a spiking neuron model (Leaky Integrate-and-Fire), a graded potential neuron model (Morris-Lecar configured to not emit spikes)), alpha function synapses, and a conductance-based synaptic model. These components can be immediately configured via configuration files (see below). We expect to extend this set of primitives with additional components required by future LPU models.

Can Neurokernel load LPU models specified using formats such as NeuroML?

Neurokernel does not yet support NeuroML, but it can load LPU models specified in GEXF, a widely supported graph storage format that is compatible with a range of Python packages and tool formats.

Can Neurokernel's performance be improved?


The design of traditional neuronal network simulations has been driven mostly by a desire to optimize performance. This is natural because many of the modeling parameters in these simulations (i.e., neuron and synapse models, etc.) are assumed to remain fixed throughout model execution. While constant parameters will continue to figure in neural models, there is a need to place greater emphasis on programmability and validation of the I/O function of neural circuits in order to both enable computational neuroscientists to build upon the work of their peers and facilitate the improvement of fly brain models in light of new biological data.

Focusing on programmability before performance can be understood as analogous to engineering complex systems such as the Linux kernel. Although the initial implementation of Linux provided similar performance to other operating systems available at the time, Linus Torvald's decisions to target a specific platform (i.e., commodity x86 computers) and enforce a specific development methodology (i.e., by means of a free software license) were instrumental in enabling the development of the kernel into a near-ubiquitous basis for high-performance operating systems.

I want to set up a GPU cluster for multi-user Neurokernel hacking!

Check out these notes.

I have a question not addressed in this FAQ!

Join the project mailing list or forum and fire away! If you encounter a bug, we encourage you to submit it via the project issue tracker.

How to Participate in Neurokernel Development

What is an RFC and why are they important to Neurokernel's development?

First employed in the development of the Internet (see RFC 2026) and used more recently in the development of the Python programming language (in the guise of Python Enhancement Proposals (PEPs)), RFCs are design proposals of a complex system's major components that are made available to the system's developers and other interested parties in order to elicit feedback (or "comments"). Once published, an RFC may be superseded by a newer RFC that incorporates modifications made in response to feedback. This process enables RFCs to both serve as authoritative specifications of a system's design (if deemed acceptable) and an archive of that system's design development. All published Neurokernel RFCs are publicly available on the project website.

Submitted RFCs must either be explicitly placed in the public domain or released under the Open Publication License.

Can I submit an RFC? How do I go about it?

Yes! Contact the Neurokernel developers via the project mailing list to have your RFC reviewed and uploaded to the Neurokernel site.

I'm interested in modeling a certain LPU. Has it already been modeled?

A list of the LPUs and hubs in the fly brain with links to currently implemented models is available on the project wiki.

I've written a new Neurokernel-based LPU model. How can I share it?

Submit the model as a pull request on GitHub and write an RFC describing details of the model.

I want to propose a Great New Feature for Neurokernel. How can I do so?

Feel free to moot your idea on the project mailing list. If the feature is nontrivial and cannot be described briefly, writing an RFC that clearly delineates the proposal would be very helpful.

I've written some new code for Neurokernel. How can I have it incorporated into the project's code base?

Submit your new code as a pull request or (if the code is relatively brief) an enhancement issue. Note that Neurokernel is developed under the open-source BSD license; all code contributed to the project must be released under copyright terms that are compatible with this license. Please consult with a competent legal authority if you are uncertain about the compatibility of your code's license.