2019年6月20日木曜日

Raspberry Pi 3 で Yocto (AArch64 TensorFlow Weston)

YoctoでRaspberry Pi 3 Aarch64にTensorFlowを組み込んでみる。
OpenEmbedded Layer にmeta-tensorflowのレシピが登録されていたことを発見したのが理由。

手順としては公式に記載のとおりなのだが、自分の環境ではリソースが足りないため少しレシピを変えた。
→TensorFlowのビルド(Bazel)が2つ同時(tensorflowとtensorflow-native)に走るため、メモリが足りなくなってしまう(おそらく、64Gとか必要なのかもしれない?)

手を加えたレシピは以下で公開。
https://github.com/NobuoTsukamoto/meta-tensorflow
手を加えたのは、
  • tensorflowとtensorflow-nativeが同時に走らないように、DEPENDを設定。
  • Bazelのビルドオプションにlocal_resourcesフラグをつけて、CPU/MEMのリソースを設定。

準備


TensorFlowをビルドするにはホストマシンに、追加でlibatomicをビルド環境にインストールする(自分の環境はFedora 30)。

$ sudo dnf install libatomic


ダウンロード・レイヤーの追加


master環境を引っ張ってくる。

$ git clone git://git.yoctoproject.org/poky.git
$ cd poky/
$ git clone git://git.openembedded.org/meta-openembedded
$ git clone git://git.yoctoproject.org/meta-raspberrypi
$ git clone https://github.com/NobuoTsukamoto/meta-tensorflow.git
$ cd ../
$ source poky/oe-init-build-env rpi-build
$ bitbake-layers add-layer ../poky/meta-openembedded/meta-oe/
$ bitbake-layers add-layer ../poky/meta-openembedded/meta-multimedia/
$ bitbake-layers add-layer ../poky/meta-openembedded/meta-python/
$ bitbake-layers add-layer ../poky/meta-openembedded/meta-networking/
$ bitbake-layers add-layer ../poky/meta-raspberrypi/
$ bitbake-layers add-layer ../poky/meta-tensorflow/

Bitbake


conf/local.confに以下を追加する。
(AArch64ビルドの指定と、TensorFlowの追加)

MACHINE ?= "raspberrypi3-64"
IMAGE_INSTALL_append = " tensorflow"

あとは、bitbakeコマンドでビルド

Build Configuration:
BB_VERSION           = "1.43.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "fedora-30"
TARGET_SYS           = "aarch64-poky-linux"
MACHINE              = "raspberrypi3-64"
DISTRO               = "poky"
DISTRO_VERSION       = "2.7+snapshot-20190618"
TUNE_FEATURES        = "aarch64 cortexa53 crc"
TARGET_FPU           = ""
meta                 
meta-poky            
meta-yocto-bsp       = "master:27d60c5a812774f0e5c43161e5b514c4aebdf301"
meta-oe              
meta-multimedia      
meta-python          
meta-networking      = "master:3b245e4fe85be62c309650e84d1aaacbcb0d5505"
meta-raspberrypi     = "master:40283f583b57d67798135ed4a94cb8b5288ea965"
meta-tensorflow      = "master:94dff656415a534cdfa899cca9e87bc01fe15341"

そういえば、TUNE_FEATURESが昔は"aarch64"だけだった気がする。

SDカード書き込みと起動確認


いつものようにSDカードに書き込みして起動。Python3からTensorFlowがimportできるか確認。

やった〜

0 件のコメント:

コメントを投稿