Neuroballad is a high level API for simulation of biological neural networks on GPU's, built to facilitate development of circuit-level implementations. Written in Python and on top of Neurokernel/Neurodriver, Neuroballad focuses on user experience and attempts to minimize the time required to execute a desired circuit design.
Neuroballad is in its early stages of development at this time and therefore its use in most circumstances is not recommended.
Neuroballad is built on and requires a working Neurokernel/Neurodriver installation. For simplicity, we will focus on a Conda-based installation procedure here; other installation methods can be found on the Neurokernel page. To start with Neurokernel, first, add the neurokernel channel to your ~/.condarc file:
channels:
- https://conda.binstar.org/neurokernel/channel/ubuntu1404
- defaults
Afterwards, you can install Neurokernel and Neurodriver as follows:
conda create -n NK neurokernel_deps
source activate NK
# Remember to edit the following line depending on your CUDA version
conda install pycuda=2015.1.3=np110py27_cuda75_0
cd ~
git clone https://github.com/neurokernel/neurokernel.git
cd ~/neurokernel
python setup.py develop
cd ~
git clone https://github.com/neurokernel/neurodriver
cd ~/neurodriver
python setup.py develop
Finally, install Neuroballad:
cd ~
git clone https://github.com/FlyBrainLab/neuroballad
cd ~/neuroballad
python setup.py develop
It is easy to start working with Neuroballad; the following example utilizes three Hodgkin-Huxley neurons connected circularly via alpha synapses:
# Import Neuroballad
from neuroballad import *
# Create a circuit
C = Circuit()
# Create three neurons
C.add([0, 2, 4], HodgkinHuxley())
# Create three synapses
C.add([1, 3, 5], AlphaSynapse())
# Join the nodes together, using an edge list notation
# (i.e. [0,1] implies a directed edge from node 0 to node 1)
C.join([[0,1],[1,2],[2,3],[3,4],[4,5],[5,0]])
# Create a current input for node 0 from t=0.20s to t=0.40s with an amplitude of 40mA.
C_in_a = InIStep(0, 40., 0.20, 0.40)
# Create inputs, similarly, for nodes 2 and 4.
C_in_b = InIStep(2, 40., 0.40, 0.60)
C_in_c = InIStep(4, 40., 0.60, 0.80)
# Use the three inputs and simulate the circuit for a second, in 1e-4s time steps.
C.sim(1., 1e-4, [C_in_a, C_in_b, C_in_c])
Neuroballad includes a number of additional methods for easily dealing with larger systems, the details of which you can find in the documentation.