2020年11月19日木曜日

tensorflow for apple M1

新Macbook の Apple M1 は tensorflow でもちゃんと爆速らしい!!
今までCPUしか使っていなかったのがGPU にも対応するようです。

https://blog.tensorflow.org/2020/11/accelerating-tensorflow-performance-on-mac.html

Appleたら秘密裏に開発を進めてたのね。教えてくれればいいのに〜。
(発表時のプレゼンは tensorflow モデルを CoreML モデルに変換したら早いよ、とかいう営業トークと思ってました。ごめんなさい。)
まだソースは公開されていないけれどそのうち tensorflow github 本線にも統合予定の模様。
https://github.com/apple/tensorflow_macos

Nvidia CUDA 以外でもまともにハードウェアアクセラレーションが気軽に使えるようになる予感が... 待て!しかして希望せよ!そして買え!

これはもう新 Macbook Pro 買うしかないでしょ!
(機械学習トレーニングは長時間計算パワーがいるので冷却ファンは必須。メモリは当然16GBで)

2019年8月18日日曜日

How to run puppetter on arm64 linux.

This is how to run puppetter on arm64 linux (Termux arch linux).

1. Install chromium.
> pacman -S chromium

2. Install chromium's dependencies.
> pacman -S <chromium depend libraries>

3. Install puppetter from npm.
> npm install puppetter

4. Use arm64 chromium for puppetter.
puppetter on npm have only x86_64 chrome binary.
So, make symblic link and use arm64 chromium.

> cd node_modules/puppeteer/.local-chromium/linux-674921/chrome-linux/
> ln -s /usr/bin/chromium ./chrome

How to run tfjs-node on arm64 linux.

This is how to run tensorflow.js for node.js on arm64 linux (termux arch linux).

1. Do node-pre-gyp on arm64 linux.

> npm install @tensowflow/tfjs-node
> cd node_modules/\@tensorflow/tfjs-node
> npx node-pre-gyp -v rebuild

2. Use arm64 libtensorflow.so.
You have to build it your self.

> cd /usr/local/lib
> ln -s libtensorflow.so libtensorflow.so.1

2018年5月6日日曜日

Build tensorflow on ArchLinux ARM on Android

[Abstruct]
-Creating tensorflow development environment in order to develop Deep Learning anytime, anywhere.
-Build tensorflow on Arch Linux (TermuxArch) on Android.
-Run mnist_cnn on keras with tensorflow backend as benchmarking.

[Conclusion]
-Benchmarking score is better than I expected.
The score is close to a little old note PC. and better than mxnet and CNTK in my environment.
-It takes very very long time to build the tensorflow. So, please be careful to configure before building.

[Summary]
-Install Termux.
-Install TermuxArch (Arch Linux).
-Build and Install bazel.
-Build and Install tensorflow.
-Run Keras(tensorflow backend) benchmark.

[Details]
-Install Termux and TermuxArch by referring to first half of the follow URL.
http://oregaji.blogspot.jp/2018/04/how-to-create-keras-development.html

-Install oracle jdk8 and bazel 0.12 by referring to the follow "Build bazel on Arch Linux on Android".
http://oregaji.blogspot.com/2018/04/build-bazel-on-archlinux-arm-on-android.html

-Prepare to install tensorflow by referring "Installing TensorFlow from Sources".
https://www.tensorflow.org/install/install_sources
-git checkout latest r1.8 branch.
> git checkout r1.8

- **IMPORTANT** Modify third_party/png.BUILD. Add line
copts = ["-DPNG_ARM_NEON_OPT=0"],
Refer to the follow issue.
https://github.com/tensorflow/tensorflow/issues/18643#issuecomment-385234577
(Without this modification, Building tensorflow will fail at last.)
- Run configure.
> ./configure
Answer jemalloc=n, mpi=n.

-Build tensorflow.
> bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package --jobs 4
(It takes about 2 days. Plase be patient. Set Termux Notification Menu to "acquire wake lock".)

-Build python pip package.
> bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

-Do pip install.
> pip install /tmp/tensorflow_pkg/tensorflow-1.8.0-cp36-cp36m-linux_aarch64.whl
(tensorflow needs grpcio package. It takes about half day to build grpcio. Please be patient.)

If it succeeds, it's done!

-Run mnist_cnn on Keras with tensorflow backend.
-Install keras.
> pip install keras
-Change keras backend totensorflow.
Change ~/.keras/keras.json:
  "backend": "tensorflow",
-Run mnist_cnn example on keras.
> git clone https://github.com/keras-team/keras.git
> cd keras/example
> python mnist_cnn.py

-Benchmark results:
mnist_cnn.py of keras example
  tensorflow backend: 4min/epoch
  mxnet backend: 33min/epoch
  CNTK backend: 24min/epoch

tensorflow backend is very fast!
Is any acceleration working on aarch64!?
If you know something about this, Please tell me.

This learning speed is slower than desktop PC with GPU.
But it is faster than I expected.
This mobile deep learning development environment is very useful for me!

2018年5月3日木曜日

android上でtensorflowをビルドする方法

[概要]
-android上でtensorflowの開発環境を構築します。
-性能評価のためkeras mnist_cnnを実行します。

[結論]
-スマホなのにベンチマーク結果が予想外に良い(少し古いノートPC並み)結果で驚き。最初はどうせ遅いだろうと思っていたが結構使えるんじゃないという感じ。
-ビルドには無茶苦茶時間がかかるので最初の設定には気をつけて。

[要約]
-Termuxをインストール
-TermuxArch (Arch Linux)をインストール
-bazelをビルドしてインストール
-tensorflowをビルドしてインストール
-Keras(tensorflow backend)でベンチマークを実施

[詳細]
-下記URLの前半を参考にTermux, TermuxArchをインストールする。
http://oregaji.blogspot.jp/2018/04/androidkeras2018415.html

-下記「android上でbazelをビルドする方法 」に従いjdk8, bazelをインストール。今回は現時点最新の0.12を使用。
http://oregaji.blogspot.jp/2018/04/androidbazel.html

-"Installing TensorFlow from Sources"を参考にtensorflowのインストール準備をしておく。
https://www.tensorflow.org/install/install_sources
-今回は現時点最新のr1.8を使用。
> git checkout r1.8

- **重要** third_party/png.BUILD を修正して
copts = ["-DPNG_ARM_NEON_OPT=0"],
を追加する。
下記のissueを参照のこと。
https://github.com/tensorflow/tensorflow/issues/18643#issuecomment-385234577
(これをやっておかないとビルドの最後で失敗するので注意)
- ./configure を実行
jemalloc=n, mpi=nにとりあえずしておく。

-ビルドする。
> bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package --jobs 4
(jobsは4くらいまでにしておかないと、リソース不足で止まる。jobs 4でも止まる時にはjobs 2とかにしておく。)         
(ビルドは2日くらいかかる勢いなのでひたすら待つ。Termuxは通知メニューでacquire wake lockしておき止まらないようにしておく。)

-pythonのpipパッケージを作る
> bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

-pipインストールする
> pip install /tmp/tensorflow_pkg/tensorflow-1.8.0-cp36-cp36m-linux_aarch64.whl
(tensorflowが依存するパッケージもインストールされる。中でもgprcioはビルドインストールに一晩くらいかかる、のでひたすら待つ。)

成功したら完了。

-Keras(tensorflow backend)でベンチマーク(mnist_cnn)を実施
-kerasをインストール
> pip install keras
-kerasバックエンドをtensorflowに変更
~/.keras/keras.jsonを
  "backend": "tensorflow",
に修正する。
-kerasのmnist_cnnサンプルを実行する
> git clone https://github.com/keras-team/keras.git
> cd keras/example
> python mnist_cnn.py

-ベンチマーク結果
mnist_cnnで1 epochあたり実測230秒台!!
比較すると、
  tensorflowバックエンド: 4分/epoch
  mxnetバックエンド: 33分/epoch
  CNTKバックエンド: 24分/epoch
となり、tensorflowは爆速!!aarch64では何かアクセラレーションが効いているの!?
知っている人がいたら教えて下さい。
デスクトップPCのGPU版に比べれば遅いけれど、スマホでここまで速度が出るとは思っていなかったので正直驚きです。

2018年4月25日水曜日

Build Bazel on ArchLinux ARM on android

[Abstract]
Building bazel on ArchLinux (TermuxArch) on android

[Details]
-Install Oracle jdk 8.
(openjdk8 via pacman is too old.)
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

> pacman -S zip
(Important: zip command is used in the end of building. Without zip, build is end with error.)

Get bazel-*-dist.zip (bazel-0.12.0-dist.zip)
https://github.com/bazelbuild/bazel/releases

Modify script/bootstrap/compile.sh and add java heap memory.
run "${JAVAC}" -verbose -J-Xms1024m -J-Xmx1024m -classpath ...

Set jobs to 1.
> export EXTRA_BAZEL_ARGS='--jobs 1'
(If jobs is not 1, illegal seek error will happen and build fail.)

On top directory, run the follow command. And wait for hours.
> ./compile.sh

If build succed, copy bazel binary.
> cp output/bazel /usr/local/bin/

Complete.

(所感: bazelのビルドは失敗すると最初からやり直しで数時間コース。デフォルトではログも出ない、illegal seekなど罠も多く、いったい何回試行錯誤したことか!ちなみにjdk9でもまだうまくいきません。)

(次回: おまちかね、tensorflowのビルド!そこにはさらなる罠が!?)

android上でbazelをビルドする方法

[概要l
android上のArchLinux (TermuxArch)でbazelをビルドする方法

[詳細]
-Oracle jdk 8をインストールする。
(pacmanのopenjdk8は古すぎるため)
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

> pacman -S zip
(これ重要。ビルドの最後の最後でzipが無いとエラーで最初からやり直し。)

bazel-*-dist.zipを取ってくる。(bazel-0.12.0-dist.zipで確認)
https://github.com/bazelbuild/bazel/releases

script/bootstrap/compile.sh を修正しjavaのヒープメモリを増やしておく。
run "${JAVAC}" -verbose -J-Xms1024m -J-Xmx1024m -classpath ...

環境変数でジョブ数を1に制限。
> export EXTRA_BAZEL_ARGS='--jobs 1'
(増やすとillegal seekエラーが出てビルドに失敗する。)

トップディレクトリで
> ./compile.sh
を実行。数時間待つ。

ビルドに成功したら。コピーする。
> cp output/bazel /usr/local/bin/

完了。

(所感: bazelのビルドは失敗すると最初からやり直しで数時間コース。デフォルトではログも出ない、illegal seekなど罠も多く、いったい何回試行錯誤したことか!ちなみにjdk9でもまだうまくいきません。)

(次回: おまちかね、tensorflowのビルド!そこにはさらなる罠が!?)