はじめに
tensorflow v2.3.0 の python3.7 用の pip パッケージを Raspberry Pi zero 用にクロスビルドする。公式の手順ではビルドできないので、ビルド手順を記録しておく。
環境
ビルド完了までに9時間ほどかかる。
- Ubuntu 20.04
- Core i3-4030U(1.9GHz)
- Mem 16GB
- Docker 19.03.8
ビルド
TensorFlow のソースコードのダウンロード
$ git clone https://github.com/tensorflow/tensorflow.git
$ cd tensorflow
$ git checkout v2.3.0
python3.7 用の pip パッケージを作成するための変更
python 3.7 用の Docker ファイルを使用しても、python 3.7 の pip パッケージが作成できないので、cherry-pick する。
$ git cherry-pick 4c886a5
numpy のバージョンが 1.19 だとビルドに失敗するので、バージョン指定する。
$ vim tensorflow/tools/ci_build/install/install_pip_packages_by_version.sh
"numpy" を "numpy<1.19.0" に書き換える。
pip パッケージのみビルドするためにターゲットを変更する。
共有ライブラリが必要な場合は以下の手順は不要。
$ vim tensorflow/tools/ci_build/pi/build_raspberry_pi.sh
以下を削除する。
//tensorflow:libtensorflow.so \
//tensorflow:libtensorflow_framework.so \
//tensorflow/tools/benchmark:benchmark_model \
cp bazel-bin/tensorflow/tools/benchmark/benchmark_model "${OUTDIR}"
cp bazel-bin/tensorflow/libtensorflow.so "${OUTDIR}"
cp bazel-bin/tensorflow/libtensorflow_framework.so "${OUTDIR}"
ビルド
$ CI_DOCKER_EXTRA_PARAMS="-e CI_BUILD_PYTHON=python3.7 -e CROSSTOOL_PYTHON_INCLUDE_PATH=/usr/include/python3.7" \
tensorflow/tools/ci_build/ci_build.sh PI-PYTHON37 \
tensorflow/tools/ci_build/pi/build_raspberry_pi.sh PI_ONE
...
...
...
Target //tensorflow/tools/pip_package:build_pip_package up-to-date:
bazel-bin/tensorflow/tools/pip_package/build_pip_package
INFO: Elapsed time: 31682.868s, Critical Path: 485.48s
INFO: 19137 processes: 19137 local.
INFO: Build completed successfully, 24526 total actions
INFO: Build completed successfully, 24526 total actions
Final outputs will go to output-artifacts
...
Output can be found here:
output-artifacts
output-artifacts/tensorflow-2.3.0-cp37-none-linux_armv6l.whl