TL;DR
公式から Raspbian 向けに TensorFlow のバイナリが提供された らしいので、試しに家の Raspberry pi にインストールしてみたよ。
Installing TensorFlow on Raspbian | TensorFlow の手順通り、 pip
ですんなり入ったけど import tensorflow
したらなんか RuntimeWarning を吐いたのが気分わるかったよ。
なんだか悔しかったので venv
を使って RuntimeWarning を吐かない環境を作ってみたよ。
背景
もともと TensorFlow を含む ML には興味があったのですが、 Clustering や Container 周りの技術や CI/CD Pipeline にも興味があったり、 Smart Speaker の調査をしていたりで ML には全く手を付けることができていませんでした。
そんな中、 TensorFlow 1.9 Officially Supports the Raspberry Pi という話を見かけ、それなら家で眠ってる Raspberry pi を使えばサクッと試せそうだなーと思ったのが発端です。
前提条件
利用環境
- Raspberry pi 3 Model B (プラスではない方...)
- Raspbian GNU/Linux 9.4 (stretch)
- Python 3.5 (もともと入っているバージョン)
- Python 3.4 (本稿のセットアップ手順で導入する)
※ Python 2.7 はpip install tensorflow
実行時にMemoryError
とか言われたので早々に止めました。私の環境の問題?
対象となる読者
- Raspberry pi 上で Python 3 系を使って TensorFlow を触ってみようとしている人
- 問題なさそうな RuntimeWarning でも気になって仕方がない人
- でも TensorFlow を自分で時間をかけて(24時間くらい?)までコンパイルしたくない人
結論
Python 3.4 をインストールして venv
で環境を分けたらうまいこと RuntimeWarning が出なくなりました。
RuntimeWarning が表示されないセットアップ手順
$ sudo apt update
$ sudo apt install libatlas-base-dev
$ sudo apt install python3.4
$ mkdir ~/venv
$ cd ~/venv/
$ python3.4 -m venv tensorflow_py34 --without-pip
$ source tensorflow_py34/bin/activate
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py
$ pip install numpy\<1.15
$ pip install tensorflow
以上。
RuntimeWarning が表示されないことを確認
$ source ~/venv/tensorflow_py34/bin/activate
$ python
Python 3.4.4 (default, Apr 17 2016, 16:02:33)
[GCC 5.3.1 20160409] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
試しに import
してみます。
>>> import tensorflow as tf
>>>
RuntimeWarning が表示されなくなりました!
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
b'Hello, TensorFlow!'
>>>
もちろんこの通り Hello world も問題ありません。
RuntimeWarning が表示されるセットアップ手順(公式の手順)
まずは Installing TensorFlow on Raspbian | TensorFlow の通りにインストールしてみます。
libatlas-base-dev
をインストールします。
$ sudo apt update
$ sudo apt install libatlas-base-dev
そして tensorflow
を pip3
でインストールします。
$ pip3 install tensorflow
何事もなくインストールできるのですが、実際に import
してみると。。。
$ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: compiletime version 3.4 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.5
return f(*args, **kwds)
/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: builtins.type size changed, may indicate binary incompatibility. Expected 432, got 412
return f(*args, **kwds)
/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 56, got 52
return f(*args, **kwds)
>>>
と、 RuntimeWarning
が3つ表示されてしまいます。
どうも Python 3.4 でコンパイルされていたり builtins
, numpy
モジュール辺りで気に入らないところがあるようです。
ただ、これで動かないのかというとそういうわけでもなさそうで、とりあえず Hello world は下記の通りしっかり動作します。
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
b'Hello, TensorFlow!'
>>>
というわけで、 RuntimeWarning が気になる人は RuntimeWarning が表示されないセットアップ手順 を試してみましょう!
最後に
そもそも RuntimeWarning が出力される原因は、 TensorFlow 1.9 の要件に
- Raspberry Pi devices running Raspbian 9.0 or higher
- Python 2.7
- Python 3.4+
とあることから、配布されているバイナリは少し古いバージョンでビルドされているのではないかと思うのですよね。
そのうち Raspbian 9.4 + Python 3.5 でもきれいに入るようになると思いますが、それまでのワークアラウンドという事で。
おしまい。