Description • Motivation • User-Experience • Installation-Steps • TODO •
This is a basic guide for configuring the Nvidia Jetson Nano for running the GENN Potjan's et al cortical model of ~40,000 neurons , this model was implemented by Knight et al in Cpp/CUDA.
Motivation
The nvidia Jetson nano is a cheap ($249 AUD) development board that comes with a modest Nvidia GPU. Although the Maxwell GPU only has ~100's of CUDA cores, the Jetson nano enables people to develop and test GPU compliant code on affordable local resource. Additionally the Jetson Nano may consume significantly less electricity than large workstations.
Neuromorphic hardware is theoretically a great platform for simulating cortical models but it is currently not available to hobbiests. Access to Neuromorphic hardware requires a formal application, however the Nvidia Jetson Nano is an affordable product available at a small cost. A model of cortex developed by Knight was implemented using Cpp/CUDA technologies on GPU hardware, this model has been re-designed to run at an increasing large scale and only the smaller version of the model has been tested here.
User Experience
These steps ran surprisingly smoothly for me but note I deliberately worked from a fresh jetpack install and I declined package updates. From my experience Jetson CUDA environments and dependencies can deteriate very rapidly if you try to install various different packages and make too many environmnental changes. Its almost worth having a seperate SD card for different projects.
Step 1.
Acquire an Nvidia Jetson Nano (developer) there are two memory options buy the one with the greatest amount of memory (4GB).
Step 2.
Download and install the Balena Etcher tool suitable for your operating system. Flash the latest Jetpack to the SD Card this guide will only work for >=Jetpack 4.6, and has only been tested for Jetpack 4.6 Use Etcher to flash the jetpack-4.6
Step 3.
Insert the flashed image into the Jetson, log in to the Jetson. Lucky for you I think:
- Git is already installed with Jetpack 4.6
- CUDA Toolkit is already installed when on Jetpack 4.6 However, you may be prompted to agree to the licence when you first log in to the Jetson.
Step 1.
The rest is modified from the instructions for installing genn. For future reference make a note to inform your compiler where CUDA lives.
In the terminal run:
echo "export CUDA_PATH=/usr/local/cuda" >> ~/.bashrc
echo "export PATH=$PATH:$CUDA_PATH/bin" >> ~/.bashrc
Step 2.
Install the GENN source code Now run:cd $HOME
mkdir git
cd git
git clone https://github.com/genn-team/genn # obtain the genn source code
cd genn # enter the directory of the genn code
echo "export PATH=$PATH:/home/git/genn/bin" >> ~/.bashrc
source ~/.bashrc
Step 3.
Use GENN to compile the Potjans model If you are still in the genn directory:cd /userproject/PotjansMicrocircuit_project
make #compiles the Potjans model
Step 4.
Run the model This final step runs the compiled binary of the Potjans model, you can configure the model itself too, before compiling it../generate_run test
The model runs and spike times are recorded to disk. The model executes in a timely fashion.
If everything went to plan you should see print statements like the following:
Total neurons=38582, total synapses=74715499
Simulation:1.71324 seconds
Record:0.0336334s
All of these bash commands help you to read out GPU activity while the model is being run.
watch -n0.1 nvidia-smi
nvidia-smi -cp
nvidia-smi -q -g 0 -d UTILIZATION -l
Alternatively you could Use the tool jtop
and or tegrastats
(built in) to profile the Jetson's GPU and to confirm that the GPU is experiencing full utilization.
- Showed that a GENN model can run on Nvidia Jetson Nano.
- Visualize model output in Julia and upload data and code to this repository.
- Re-wire cortical model to fit V1, attach NMNIST input data to LGN/thalamus
- Try the larger version of Potjans/Knight even though it is predicted to cause a memory exhaustion failure.