LoginSignup
6
9

More than 5 years have passed since last update.

RaspberryPI3でTensorflowのマルチノードってできるんだ

Last updated at Posted at 2016-12-11

事の発端

ディープラーニング試したいけど、実験のためだけにAWS使うのは高いしなぁ…。
おや、手元にRaspberryPIがあるぞ

RaspberryPIでTensorflow動くかな
         +
Tensolflowってマルチノードので動くかな
         ||
RaspberryPIでTensorflowのマルチノード動くんじゃね?

環境構築

samjabrahams/tensorflow-on-raspberry-pi
https://github.com/samjabrahams/tensorflow-on-raspberry-pi

Githubでパッケージと手順が公開されているので、こちらを参考に作っていきます。
現時点(2016/12/11)の最新版は0.11版です。

マルチノードで使おうとすると複数台にインストールしないといけないです。
手動で構築するのが面倒なのでAnsible使いましょう
roleは載せておくので、inventoryとplaybookは難しくないので自作してください。

role/rpi-tensorflow/tasks/main.yml

---
- name: apt-get install python-pip python-dev
  apt:
    name: "{{ item }}"
    update_cache: yes
  with_items:
    - python-pip
    - python-dev
- name: wget tensorflow package
  get_url:
    url: "https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v0.11.0/tensorflow-0.11.0-cp27-none-linux_armv7l.whl"
    dest: /opt/tensorflow-0.11.0-cp27-none-linux_armv7l.whl

- name: pip install tensorflow
  pip:
    name: "file://opt/tensorflow-0.11.0-cp27-none-linux_armv7l.whl"

Tensorflowを動かしてみましょう

分散TensorFlowでロジスティック回帰 -Distributed TensorFlow- その2
http://x1.inkenkun.com/archives/5487
こちらの方の「並列実行版ソースコード」を試してみます

psノード2台、workerノード2台で実行してみます
各ノードで以下のコマンドを実行します
ノードごとに--job_nameと--task_indexが異なりますので注意してください

raspberryPI 1号機
python trainer.py --ps_hosts=192.168.12.111:2222,192.168.12.112:2222 --worker_hosts=192.168.12.113:2222,192.168.12.114:2222 --job_name=ps --task_index=0

raspberryPI 2号機     
python trainer.py --ps_hosts=192.168.12.111:2222,192.168.12.112:2222 --worker_hosts=192.168.12.113:2222,192.168.12.114:2222 --job_name=ps --task_index=0

raspberryPI 3号機
python trainer.py --ps_hosts=192.168.12.111:2222,192.168.12.112:2222 --worker_hosts=192.168.12.113:2222,192.168.12.114:2222 --job_name=worker --task_index=0

raspberryPI 4号機
python trainer.py --ps_hosts=192.168.12.111:2222,192.168.12.112:2222 --worker_hosts=192.168.12.113:2222,192.168.12.114:2222 --job_name=worker --task_index=1

結果

raspberryPI3号機
(中略)
Step: 2402,  Epoch:  9,  Batch: 400 of 550,  Cost: 30.9763,  AvgTime: 29.30ms
Step: 2477,  Epoch:  9,  Batch: 550 of 550,  Cost: 36.5495,  AvgTime: 26.74ms
Step: 2577,  Epoch: 10,  Batch: 200 of 550,  Cost: 31.5500,  AvgTime: 34.01ms
Step: 2677,  Epoch: 10,  Batch: 400 of 550,  Cost: 36.4854,  AvgTime: 29.63ms
あれ・・・終わらない・・・。
raspberryPI4号機
(中略)
Step: 2242,  Epoch:  9,  Batch: 199 of 550,  Cost: 10.8887,  AvgTime: 62.20ms
Step: 2342,  Epoch:  9,  Batch: 399 of 550,  Cost: 44.7798,  AvgTime: 29.66ms
Step: 2517,  Epoch: 10,  Batch: 199 of 550,  Cost: 33.3699,  AvgTime: 60.06ms
Step: 2617,  Epoch: 10,  Batch: 399 of 550,  Cost: 70.1540,  AvgTime: 30.21ms
Test-Accuracy: 0.92
Total Time: 144.51s
Final Cost: 20.0725
done

workerの片方が処理終わると、もう片方は処理終わらないぞ。。。

最後に

ちょっと挙動がおかしいけど、コードそのままでraspberryPIでも動くって素晴らしい

6
9
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
6
9