2020年3月20日金曜日

petalinux 2019.2とultra96v2にpytorchをインストールしたときのメモ

AIエッジコンテスト(実装コンテスト)のチュートリアル【3: Ultra96ボードのCPUで推論実行】を行うために、raspberry pi向けのビルド方法を参考にしながらpetalinuxのyocto環境にpytorchを追加していきます。
petalinuxのpythonは3.5なのでPYNQ向けにビルドされたイメージはそのままでは使えません。ros2が動く環境をベースにチュートリアル実行できるように整えていきます。

yoctoのSRC_URIで指定するgit fetcherにはいくつか暗黙の条件があることを知った。
公式ページを見るのが良い。SRCREVで指定可能なのはmasterブランチだけであった。

SRC_URI="git://;branch=<branch_name>"


色々試したけどクロスコンパイル難しすぎて断念。
設定をsetup.pyから実行されるcmakeにまかせてはいけないのか、
mobile設定を活かせばいいのかは調べきれず。
そのうち調べることにしてとりあえずはtarget環境でビルドし、
wheel化したものを使用していくことに。
petalinux環境ではpython3-wheelのレシピが無いので、最新のopenembeddedから拝借してmeta-userに配置して使用します。

ビルドしたものは以下に置いておきます。
torch-1.4.0a0+7f73f1d-cp35-cp35m-linux_aarch64.whl
torchvision-0.5.0a0+85b8fbf-cp35-cp35m-linux_aarch64.whl


target環境のビルド方法は以下の通りです。
QEMUからのネットワーク接続には以下のコマンドをホストで追加する必要があります。
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEホストのリソースが潤沢にある場合は別途搭載メモリが多い環境を作成して並列ビルドするとビルド時間短縮につながると思います。(devicetreeの変更だけで認識してくれるかと思ったけどそううまく行かなかったことは記録しておく)


実機の場合はwifiの設定が必要です。


ネットワークつながるようになったら以下の通りビルドを勧めていきます。
 ・ソースの取得
# git clone --recursive https://github.com/pytorch/pytorch
# cd pytorch
# git submodule sync
# git submodule update --init --recursive

環境変数の設定
# export NO_CUDA=1
# export NO_DISTRIBUTED=1
# export NO_MKLDNN=1 
# export BUILD_TEST=0
# export MAX_JOBS=2

・ビルドの実行
# python3 setup.py bdist_wheel

・インストールの実行
# pip3 install torch*.whl
# pip3 install torchvision*.whl

yoctoで予め含ませたいところだけどやり方が不明で断念。
C拡張部分をうまく扱わないといけなさそう。
wheelの仕様あまり理解していないから後でよく見ようとおもうけど、直接ファイル展開すれば良さそう
target環境でpipによるインストールを行うようにしている。

jupyterがemulator経由だとハングしてしまったので、以下の通り実行した。(参考)
# jupyter nbconvert --to notebook --execute demo.ipynb \
    --output mynotebook_out.ipynb --ExecutePreprocessor.timeout=2678400 \
     --allow-errors --debug

scipyが無いと言われたのでyoctoで追加する方法を調査中。

参考ページ
https://qiita.com/HirokiNakahara/items/20742dc7d2a5be209b23https://github.com/pytorch/pytorch
https://qiita.com/yyojiro/items/d91b02149aa6480ded80
https://stackoverflow.com/questions/48660051/yocto-recipe-python-whl-package/57694762#57694762
https://qiita.com/ikeyasu/items/f6216565bcfee5af96c9