5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ARM64用深層学習ライブラリdnnl_aarch64をqemuを使って動かす

Last updated at Posted at 2019-12-13

はじめに

ARM64用深層学習ライブラリは、(ARM SVE対応している)Qemu 3.1.0以降を使えば、x86_64上でも動作させることができる。ここでは、インストール手順を記載する。なお、Ubuntu 18.04環境で構築した。本来は、Qemu 3.1.0環境構築手順も必要である。(文末に手順を記載した。しかし、それなしでもSVE命令なしならQemu2.1である程度動く。)

今回構築するのは以下の環境である。(上から順に記載する。)

  • ARM64バイナリ(testsやexamplesなど)
  • Qemuエミュレータ(3.1以降を推奨)
  • ubuntu 18.04 x86_64環境

環境設定

パッケージを入れる。README.mdに記載している通りの作業である。ARM SVE命令を利用することを考えると、Qemu 3.1.0を入れたほうが良い。

docker pull ubuntu:18.04
apt update
apt install git
apt install cmake

ARM用のパッケージのインストールは以下である。

apt install binutils-aarch64-linux-gnu
apt install cpp-8-aarch64-linux-gnu
apt install g++-8-aarch64-linux-gnu
apt install gcc-8-aarch64-linux-gnu
apt install gcc-8-aarch64-linux-gnu-base:amd64
apt install pkg-config-aarch64-linux-gnu
apt install qemu
apt install qemu-block-extra:amd64
apt install qemu-system-arm
apt install qemu-system-common
apt install qemu-system-data
apt install qemu-system-gui
apt install qemu-user
apt install qemu-user-static
apt install qemu-utils

次に、dnnl_aarch64/tools/replace.shの記載手順通り行う。

export CC=/usr/bin/aarch64-linux-gnu-gcc-8
export CXX=/usr/bin/aarch64-linux-gnu-g++-8
export LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib
git clone https://github.com/fujitsu/dnnl_aarch64
cd dnnl_aarch64/mkl-dnn
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
../../tools/replace.sh
make -j28

シェアードライブラリパスの修正が必要であるので、以下のリンクコマンドを実行する

ln -s /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib/

プログラム実行

コマンドを実行する。

cd dnnl_aarch64/mkl-dnn/build/tests/gtests
qemu-aarch64 ./test_reorder

実行結果は以下の通りである。(全部で169件のテストなので末端のみを記載する。)

[----------] 4 tests from TestReorder/reorder_simple_test_s8_s8
[ RUN      ] TestReorder/reorder_simple_test_s8_s8.TestsReorder/0
[       OK ] TestReorder/reorder_simple_test_s8_s8.TestsReorder/0 (212 ms)
[ RUN      ] TestReorder/reorder_simple_test_s8_s8.TestsReorder/1
[       OK ] TestReorder/reorder_simple_test_s8_s8.TestsReorder/1 (216 ms)
[ RUN      ] TestReorder/reorder_simple_test_s8_s8.TestsReorder/2
[       OK ] TestReorder/reorder_simple_test_s8_s8.TestsReorder/2 (486 ms)
[ RUN      ] TestReorder/reorder_simple_test_s8_s8.TestsReorder/3
[       OK ] TestReorder/reorder_simple_test_s8_s8.TestsReorder/3 (491 ms)
[----------] 4 tests from TestReorder/reorder_simple_test_s8_s8 (1405 ms total)

[----------] Global test environment tear-down
[==========] 169 tests from 12 test cases ran. (38438 ms total)
[  PASSED  ] 169 tests.

実行時の環境変数について

環境変数でdnnl_aarch64の設定を変更できる。例えば、以下の変数ではログレベルを設定できる。1以外の設定もあるので、詳細は参考資料を参照のこと

export MKLDNN_VERBOSE=1

注意事項

  • JIT対応について
    • dnnl_aarch64には、xbyak_aarch64が同梱されているが、reorder(並べ替え)しかJIT化されていないとある(README.mdより)。
  • Qemuについて
    • Ubuntu 18.04環境では、デフォルトパッケージはQemu 2.1なので、そのまま動かすと命令セットが足らずコアダンプするときがある。このため、Qemu 3.1以降の環境を作ったほうが良い。SVE等の命令に対応していないQemuの場合、以下のようなメッセージを出力して止まる
qemu: uncaught target signal 4 (Illegal instruction) - core dumped
Illegal instruction (core dumped)
  • クロスコンパイル環境について
    • Ubuntuでは、クロスコンパイル環境がパッケージで提供されている。なお、CentOSでは、クロスコンパイル環境がパッケージで提供されているようには見えなかったので、対応していない。
  • コンパイラについて
    • sve命令を生成するには、gcc-8以降かつsveのフラグ-march\=armv8.2-a+sveを設定する必要がある。
    • Ubuntu 18.04環境のデフォルトコンパイラは、gcc-7である。SVE命令のバイナリを生成するためには、gcc-8が必須である。
    • CentOS8では、デフォルトコンパイラは、gcc-8でありこの点の考慮は不要である。
  • 他環境について
    • Ubuntu 18.04環境で、現在は動かしている。Google Colab環境を試したが、(ARMの)ライブラリの依存関係が解決できず実行できるバイナリが生成できなかった。

補足

Qemuのコンパイル

Ubuntu 18.04でのコンパイル手順は、以下の通り
パッケージの設定は以下の通りである。なお、aarch64のクロスコンパイルをするためには、上記のパッケージのインストール後に行う必要がある。

apt install python3
apt install glib2.0-dev
apt install libpixman-1-dev

ビルド手順は以下の通りである。

mkdir build
cd build
../configure
make

以下のようにして実行する。また、実行時にLD_LIBRARY_PATH(上記)が適切に設定されている必要がある。

./aarch64-linux-user/qemu-aarch64 xxxxx

バイナリ操作ツール

上記Ubuntu 18.04では、クロスコンパイルツールを入れた環境だと、以下のように見ることができる。
なお、binutilsの版数は、2.30である。

/usr/bin/aarch64-linux-gnu-objdump -D xxxx

参考資料

5
1
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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?