Raspberry Pi Setup
This ansible Playbook does the following things:
- Install pip3
- Install jupyter-lab (version 3.2.4)
- Setup a systemd service for jupyter-lab, enable it (autostart) and start it
- Jupyter-lab is served on
0.0.0.0:8888
with an empty password. This of course has security implications and should be discussed - Install the following python3 packages:
- numpy (version 1.21)
- scikit-learn, aka. sklearn (version 1.0)
- matplotlib (version 3.4)
- pandas (version 1.3)
- Pillow (version 8.4)
- seaborn (version 0.11)
- plotly (version 5.4)
- nltk (version 3.6)
- tensorflow (version 2.7.0)
- All python packages are installed into a virtual environment at
~/.ml-venv
. This also includes jupyter-lab which allows for using the default python3 kernel and still having access to all dependencies
The project is structured as follows:
-
local.yml: The main playbook file, can be seen as the entry point
-
roles: Contains multiple roles (can be seen as small task specific playbooks). The
roles are called in the local.yml
- git-clone: Clone the ai-at-the-edge repository into the notebooks directory
- jupyter-lab: Install jupyter-lab and configure it with a systemd service and autostart
- misc-applications: Install additional extra applications
- ml-python-packages: Install the machine learning python packages
- local-mdbook: Download the lastest version of the deployed mdbook documentation
-
roles: Contains multiple roles (can be seen as small task specific playbooks). The
roles are called in the local.yml
Using the ansible playbook on Raspberry Pi OS
Steps to run the ansible script on a fresh (or not fresh) installation of raspberry pi os:
# Update the APT repo sources
sudo apt update
# Install ansible and git. git is already present on the desktop os version
sudo apt install -y --no-install-recommends ansible git
# Pull and run the ansible scripts from git
ansible-pull -U https://code.fbi.h-da.de/pse-ai-at-the-edge/raspberry-pi-setup.git
Notes
Changing optional settings
There are a bunch of optional settings in the script with default values that can be changed if needed. When running the script on a normal Pi with the default user, there is no need to change any of those.
The configurable options are the following:
Variable name | Default value | Description |
---|---|---|
target_user | pi | Setup for a specified user |
jupyter_service | true | Setup a systemd service for running in the background |
jupyter_start | true | Don't start jupyterlab directly |
jupyter_autostart | true | Set the jupyterlab service to autostart |
ignore_python_version | false | Ignore the python version check (not recommended) |
ignore_architecture | false | Ignore the architecture check (not recommended) |
To change any of these values add -e "[var1]=[value1] [var2]=[value2]"
to the ansible-pull
command.
Important: To set a value to false
use -e [var]=''
and not -e [var]=false
. This is necessary due to ansible interpreting all extra-vars as strings.
Raspberry Pi OS Version and Architecture
This current version of the playbook will install a prebuilt tensorflow-2.7
wheel that only works on Python3.9
and the Aarch64
architecture.
That means for now the playbook only works on Raspberry Pi OS 11 64-bit
Updating the playbook for 32-bit Raspberry Pi OS
Besides tensorflow
all other dependencies will pretty much work regardless of architecture and python3 version. So to make this playbook work on 32-bit a decision must be made depending on the architecture. On 32-bit a different prebuilt tensorflow
wheel must be used, as well as another numpy
version. No prebuilt wheels were found yet for 32-bit in combination with python3.9
(debian / raspberry pi os 11), only for python3.7
which is not compatible with the current version of raspberry pi os.