aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2019-04-06-tensorflow-on-a-raspberry-pi-zero-w-is-a-bad-idea.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/posts/2019-04-06-tensorflow-on-a-raspberry-pi-zero-w-is-a-bad-idea.md')
-rw-r--r--content/posts/2019-04-06-tensorflow-on-a-raspberry-pi-zero-w-is-a-bad-idea.md105
1 files changed, 105 insertions, 0 deletions
diff --git a/content/posts/2019-04-06-tensorflow-on-a-raspberry-pi-zero-w-is-a-bad-idea.md b/content/posts/2019-04-06-tensorflow-on-a-raspberry-pi-zero-w-is-a-bad-idea.md
new file mode 100644
index 0000000..14cba0f
--- /dev/null
+++ b/content/posts/2019-04-06-tensorflow-on-a-raspberry-pi-zero-w-is-a-bad-idea.md
@@ -0,0 +1,105 @@
+---
+date: "2019-04-06T10:22:40Z"
+title: TensorFlow on a Raspberry Pi Zero is a Bad Idea
+---
+
+A recent question from the [Something Awful Forums][saf]:
+
+ Can I run TensorFlow on a Raspberry Pi Zero?
+
+The answer? You can, but it's a bad idea.
+
+The [Raspberry Pi Zero][pizerow] is a single core [ARMv6][], with no
+[NEON][]. Which means it's slow:
+
+| System | Package | Install Time | Test Time |
+| ------ | ------- | ------------:| ----------:|
+| [Raspberry Pi Zero W][pizerow] | [Virtualenv/Pip][tf-pip] | >1 hour | 40 seconds |
+| [Raspberry Pi 3 Model B+][pi3bp] | [Virtualenv/Pip][tf-pip] | 10 minutes | 10 seconds |
+| [AMD ThreadRipper 1950X][cpu] ([KVM][] VM, 8 cores) | [Docker image][tf-img] | **2 minutes** | **1.8 seconds** |
+
+**Details**
+
+Below are the steps I took to install [TensorFlow][] on a
+[Raspberry Pi Zero W][pizerow]. Note: you **have** to use
+[Virtualenv][] to install [TensorFlow][] in [Raspbian][]. If you try
+to install [TensorFlow][] directly with [Pip][], the installation will
+bomb out with an error.
+
+Raspberry Pi Installation Steps:
+```
+# install system pip, numpy dependencies, and virtualenv
+sudo apt-get install python3-pip python3-dev libatlas-base-dev virtualenv
+
+# at this point i tried to install tensorflow directly via pip, which does NOT work
+# sudo pip3 install --upgrade tensorflow
+
+# created virtualenv environment instead
+virtualenv --system-site-packages -p python3 ./venv
+
+# activate virtual environment "venv"
+# note: after this command your shell prompt will be prefixed with "(venv) "
+source ./venv/bin/activate
+
+# install tensorflow (i also installed keras here, because I use it for other stuff)
+# note: this step takes a comically long time (>1 hour)
+pip install tensorflow keras
+```
+
+Test Results ([Raspberry Pi Zero W][pizerow]):
+
+```
+(venv) pabs@zero:~> time python -c "import tensorflow as tf;
+ tf.enable_eager_execution();
+ print(tf.reduce_sum(tf.random_normal([1000, 1000])))"
+...
+tf.Tensor(1533.9042, shape=(), dtype=float32)
+
+real 0m40.802s
+user 0m38.283s
+sys 0m1.150s
+```
+
+Test Results ([Raspberry Pi 3 Model B+][pi3bp]):
+
+```
+(venv) pabs@peach:~> time python -c "import tensorflow as tf;
+ tf.enable_eager_execution();
+ print(tf.reduce_sum(tf.random_normal([1000, 1000])))"
+...
+tf.Tensor(800.62, shape=(), dtype=float32)
+
+real 0m9.408s
+user 0m9.227s
+sys 0m0.360s
+```
+
+Test Results ([AMD ThreadRipper 1950X][cpu], 8 core [KVM][] VM, [Docker image][tf-img]):
+
+```
+pabs@hive:~> time docker run --rm -it tensorflow/tensorflow:latest-py3 python3 -c \
+ "import tensorflow as tf; tf.enable_eager_execution();
+ print(tf.reduce_sum(tf.random_normal([1000, 1000])))"
+...
+tf.Tensor(-173.73222, shape=(), dtype=float32)
+
+real 0m1.745s
+user 0m0.032s
+sys 0m0.016s
+```
+
+[pip]: https://pip.pypa.io/en/stable/installing/ "Python package manager"
+[virtualenv]: https://virtualenv.pypa.io/en/stable/ "Tool to create isolated Python environments"
+[pizerow]: https://www.raspberrypi.org/products/raspberry-pi-zero-w/ "Raspberry Pi Zero W"
+[pi3bp]: https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/ "Raspberry Pi 3 Model B+"
+[cpu]: https://www.amd.com/en/products/cpu/amd-ryzen-threadripper-1950x "AMD Ryzen ThreadRipper 1950x"
+[saf]: https://forums.somethingawful.com/ "Something Awful Forums"
+[kvm]: https://www.linux-kvm.org/ "Linux Kernel Virtual Machine"
+[docker]: https://www.docker.com/ "Docker"
+[tensorflow]: https://www.tenssorflow.org/ "TensorFlow machine learning framework"
+[tf-img]: https://hub.docker.com/r/tensorflow/tensorflow/ "TensorFlow Docker image"
+[tf-pip]: https://www.tensorflow.org/install/pip "Install TensorFlow using Virtualenv and Pip"
+[simd]: https://en.wikipedia.org/wiki/SIMD "Single Instruction, Multiple Data"
+[raspbian]: https://www.raspberrypi.org/downloads/raspbian/ "Raspbian"
+[armv6]: https://en.wikipedia.org/wiki/ARM_architecture
+[neon]: https://en.wikipedia.org/wiki/ARM_architecture#Advanced_SIMD_(NEON) "ARM SIMD instruction set"