Exploring Machine Learning on an Internet of Things Edge Cluster
Overview
My proposal for the Community of practice was to explore Machine Learning (ML) on an IoT (Internet of Things) edge cluster. Meaning, in a nutshell, instead of using the power of cloud computing to train ML models we use tiny devices that consume fewer resources to do the training. The real breakthroughs in the use of and research into AI/ML were made possible by the collective resources and power of cloud computing. Before cloud computing became generally available we did not have the capacity to move forward, which is why AI/ML is a fairly recent phenomenon. Due to the limitations of using the cloud, training on the edge is being explored as a way to supercharge ML.
My experiments took me in a slightly different direction to that which I expected. It may be possible to explore my original premise in future, but the time and equipment limitations made me realize that in order to have results that were suitable to a Computer Science Tech student I had to pivot.
As I experimented with some Raspberry Pis I created some basic supporting slide decks and some code repositories, the below is a blurb on each. Note the slides were written with a target audience of Computer Science students.
General Information
I started this as part of my project and I am still working on it, hopefully it provides some clearer definitions of terminology in central place: AI & ML in plain English.
Background
The first slide deck I created was to present students with an understanding of computing on “the edge”: it gives an overview of what edge computing means, what can be done there and why we need ML for decision making.
01 lecture edge computing – template
The second slide deck presents some foundational ideas behind Machine Learning. It is an overview of the high-level concepts including contrasting training on the edge versus using a pre-trained model.
02 lecture what is Machine Learning – template
Algorithms & ML & Training
Computer Science students write algorithms beginning in their first courses throughout the whole program. The next slide deck presents the ideas they have been working with as they create their own algorithms in order to illustrate the need for ML as complexity increases and data factors increase.
03 lecture what is Machine Learning algorithm – template
The final slide deck introduces the ideas behind training ML algorithms with a simple introductory example using some common algorithms such as a very simplified Linear Regression, K nearest neighbours, and a neural network. Below you can find links to repositories where the code is available.
04 lecture training an ML algorithm – template
Try the Tensorflow Neural Network Playground
Code
As part of my exploration of this topic I worked with some code to illustrate a few of the simpler ML algorithms and their training in order to gently introduce students with a programming background to the concepts of ML . The whole repository, referred to in slide deck 04 can be found here: https://github.com/campbe13/experiment-ml-docker-py/
kNN
Scikit Learn: kNN
Using 1 csv to train, 2 gen own dataset 3 plain old python:
https://github.com/campbe13/experiment-ml-docker-py/tree/master/00temperature-example
Linear Regression
SciKit Learn: Linear regression
Using 1. Generate dataset & results to train 2. Plain old python (3 both of the prev with timing):
https://github.com/campbe13/experiment-ml-docker-py/tree/master/05algebraeic-example
Neural Net
DIY NN (using NumPy & Matplotlib for error chart):
https://github.com/campbe13/experiment-ml-docker-py/tree/master/10neural-net
Using Raspberry Pis & Edge Impulse
As mentioned, I initially wanted to do model training at the edge. I started by setting up a cluster to attempt federated learning but I was unsuccessful. Unfortunately the time and equipment limitations made me realize that in order to have results that were suitable to a Computer Science Tech student I had to pivot. That is when I turned to Edge impulse.
Here is a basis for a lab and a log of the possess used: engr log edge-impulse
Supporting the lab: instrs – lab – setup Raspberry PI also edge training data github
Summary
Any of my work posted here may be used as base material, all are licensed (except where stated otherwise). My own written work is licensed under CC BY-NC-SA 4.0. My own code is licensed under The MIT License (MIT).
As always there is more to learn and more to adjust for the CEGEP student depending on the level of the students and the course but please consider it all a work in progress! Any errors or omissions are my own.