5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspbian に公式対応した TensorFlow を入れてみたら警告が出たのでどうにかしてみたって話

Last updated at Posted at 2018-08-11

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

そして tensorflowpip3 でインストールします。

$ 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 でもきれいに入るようになると思いますが、それまでのワークアラウンドという事で。

おしまい。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?