読者です 読者をやめる 読者になる 読者になる

30分ぐらいで raspberry pi にtheanoを入れる

raspberry piと機械学習が気になって、とにかく、できそうなことを、さくっとやってみたメモ。

 

raspberry pi を手に入れる

アマゾンで検索すれば5000円前後で手に入る。今回は type B である。

 

手持ちのSDカードにOSを焼く

raspberry pi の推奨OS は raspbian これを以下からダウンロードする。

Downloads | Raspberry Pi

さらに、手持ちのパソコンに手持ちのSDカードを指して、fedora-arm-installerのツールを使ってOSを焼く。

Fedora ARM Installer - FedoraProject

ちなみに、僕が導入したのは2014-6-20のraspbian。焼き方はこんな感じ。

 f:id:skzy:20140826004741j:plain

 

raspberry pi のsetup

ネットワークにつないでDHCPでIP振り出してもらって、sshで接続すると、デフォルトではpi / raspberry でログインできる。このあと、

$ sudo raspi-config

とたたいて、raspbianのセットアップを行う。

やっておきたいこと:

  • Expand Filesystem ... SD cardの拡張
  • Overclock  ...  とりあえず、最初はModestぐらい?

これでreboot

 

swap領域を増やす

raspberry pi type B のメモリサイズは512MB。いまどき心もとない(十数年前が懐かしい)のだが、swapのdefaultの設定が100MBしか設定されていないみたい。これを変更する。

いったんswapプロセスをとめて

$ sudo /etc/init.d/dphys-swapfile stop

次に設定ファイル /etc/dphys-swapfile をいじる

CONF_SWAPSIZE=1000

MB単位らしいので1GBぐらいに。swapプロセス再起動。

$ sudo /etc/init.d/dphys-swapfile start

topコマンドでswapが増えているか確認しておく。

 

関連パッケージの導入

この辺あたりから怪しい。とりあえず、apt-getをupdate

$ sudo apt-get update 

theanoの最低必要パッケージ

$ sudo apt-get install  python-numpy python-scipy python-nose g++ libatlas-dev libatlas3gf-base git

本当にこいつらで大丈夫なの?と思いつつ、次へ進む。

 

theanoをgitからsetup.pyする

マニュアルではpipを使っているけれど、こちらのほうが確実っぽい。gitでtheanoのソースを持ってきて

$ git clone git://github.com/Theano/Theano.git

setup.pyする

$ cd Theano
$ python setup.py build
$ sudo python setup.py install --record setup_file.txt

uninstallするときのために、setup_file.txtにコピーしたファイルのレコードをとっておく。さて、importできるかな?

$ python
>>> import theano
~
Exception: Compilation failed (return status=1): cc1plus: error: unrecognized command line option ‘-m32’. 
~

ありゃりゃ?

どうも以下で修正されているコードが関係しているみたい。

Add ARM architecture check for Raspberry Pi · 70e761e · vdumoulin/Theano · GitHub

というわけで、環境変数を入れる。

$ export THEANO_FLAGS=gcc.cxxflags=-march=armv6j

これで再import

$ python
>>> import theano
WARNING (theano.gof.cmodule): WARNING: your Theano flags `gcc.cxxflags` specify an `-march=X` flags.
         It is better to let Theano/g++ find it automatically, but we don't do it now

なにやらwarningがでたがimportはできたみたい。めでたしめでたし。