Skip to content
Snippets Groups Projects
README.md 3.88 KiB
Newer Older
  • Learn to ignore specific revisions
  • Daniel Müller's avatar
    Daniel Müller committed
    # Raspberry Pi Setup
    
    ### This ansible Playbook does the following things:
    - Install pip3
    
    - Install jupyter-lab (version 3.2.4)
    
    Daniel Müller's avatar
    Daniel Müller committed
    - 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)
    
    Daniel Müller's avatar
    Daniel Müller committed
    - 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
    
    Daniel Müller's avatar
    Daniel Müller committed
    
    ### The project is structured as follows:
    - [local.yml](./local.yml): The main playbook file, can be seen as the entry point
      - [roles](./roles): Contains multiple roles (can be seen as small task specific playbooks). The 
        roles are called in the [local.yml](./local.yml)
        - [jupyter-lab](./roles/jupyter-lab/tasks/main.yml): Install jupyter-lab and configure it with a systemd service and autostart
        - [misc-applications](./roles/misc-applications/tasks/main.yml): Install additional extra applications
        - [ml-python-packages](./roles/ml-python-packages/tasks/main.yml): Install the machine learning python packages
    
    
    # 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:
    ```sh
    # 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
    
    Daniel Müller's avatar
    Daniel Müller committed
    ansible-pull -U https://code.fbi.h-da.de/pse-ai-at-the-edge/raspberry-pi-setup.git
    
    Daniel Müller's avatar
    Daniel Müller committed
    ```
    
    # 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.
    
    
    
    Daniel Müller's avatar
    Daniel Müller committed
    ## 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**
    
    Daniel Müller's avatar
    Daniel Müller committed
    ### 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.