Main Content

ARM Compute Library を使用する深層学習コードのクロスコンパイル

MATLAB® セッションをホストするコンピューターで、深層学習ソース コードを生成してコンパイルし、ターゲットの ARM® ハードウェア デバイスで実行するライブラリまたは実行可能ファイルを作成できます。あるプラットフォームでソース コードをコンパイルして別のプラットフォーム用のバイナリ コードを作成することを "クロスコンパイル" といいます。このワークフローは、Linux® ホスト プラットフォームと、armv7 (32 ビット) または armv8 (64 ビット) ARM アーキテクチャを備えるターゲット デバイスでのみサポートされます。

このワークフローを使用して、ハードウェア サポート パッケージのない ARM デバイスに深層学習コードを展開します。

メモ

このヘルプ トピックの例で使用する ARM Compute Library のバージョンは、コード生成でサポートされている最新バージョンではない可能性があります。サポートされているライブラリのバージョンと、環境変数の設定に関する詳細については、深層学習に MATLAB Coder を使用するための前提条件を参照してください。

前提条件

クロスコンパイル ワークフローに固有の前提条件は次のとおりです。一般的な前提条件については、深層学習に MATLAB Coder を使用するための前提条件を参照してください。

  • ターゲット デバイスには armv7 (32 ビット) または armv8 (64 ビット) ARM アーキテクチャが必要です。デバイスのアーキテクチャを確認するには、デバイスのターミナルで次のコマンドを実行します。

    arch
  • ホスト コンピューターに Linaro AArch32 または AArch64 ツールチェーンがインストールされていなければなりません。

    • armv7 ターゲットの場合は、ホストに GNU/GCC g++-arm-linux-gnueabihf ツールチェーンをインストールします。

    • armv8 ターゲットの場合は、ホストに GNU/GCC g++-aarch64-linux-gnu ツールチェーンをインストールします。

    たとえば、ホストに Linaro AArch64 ツールチェーンをインストールするには、ターミナルで次のコマンドを実行します。

    sudo apt-get install g++-aarch64-linux-gnu
  • MATLAB コマンド ラインで、環境変数 LINARO_TOOLCHAIN_AARCH32 または LINARO_TOOLCHAIN_AARCH64 をツールチェーン バイナリのパスに設定します。パスは MATLAB セッションごとに 1 回設定しなければなりません。

    ツールチェーンがホストの場所 /usr/bin にインストールされているとします。

    • armv7 ターゲットの場合は、次のコマンドを実行します。

      setenv('LINARO_TOOLCHAIN_AARCH32', '/usr/bin')
    • armv8 ターゲットの場合は、次のコマンドを実行します。

      setenv('LINARO_TOOLCHAIN_AARCH64', '/usr/bin')
  • ホストで ARM Compute Library をクロスコンパイルします。

    • ARM Compute Library の Git™ リポジトリのクローンを作成し、必要なバージョンをチェックアウトします。たとえば、v19.05 をチェックアウトするには、ホストのターミナルで次のコマンドを実行します。

      git clone https://github.com/Arm-software/ComputeLibrary.git
      cd ComputeLibrary
      git tag -l
      git checkout v19.05
    • ホストに scons をインストールします。たとえば、ホストのターミナルで次のコマンドを実行します。

      sudo apt-get install scons
    • scons を使用してホストで ARM Compute Library をクロスコンパイルします。たとえば、ライブラリを armv8 アーキテクチャで実行するようにビルドするには、ホストのターミナルで次のコマンドを実行します。

      scons Werror=0 -j8 debug=0 neon=1 opencl=0 os=linux arch=arm64-v8a openmp=1 cppthreads=1 examples=0 asserts=0 build=cross_compile
    • MATLAB コマンド ラインで、環境変数 ARM_COMPUTELIB を ARM Compute Library のパスに設定します。パスは MATLAB セッションごとに 1 回設定しなければなりません。

      ARM Compute Library が場所 /home/$(USER)/Desktop/ComputeLibrary にインストールされているとします。MATLAB コマンド ラインで、次のコマンドを実行します。

      setenv('ARM_COMPUTELIB','/home/$(USER)/Desktop/ComputeLibrary')
    • libarm_compute.so などのライブラリ ファイルを含むフォルダーは lib という名前にしなければなりません。フォルダーの名前が build である場合は、名前を lib に変更します。

深層学習コードの生成と展開

ホスト コンピューターで深層学習コードをクロスコンパイルしてターゲット ARM ハードウェアに展開するには、2 つのワークフローが考えられます。2 つのワークフローの概要を示します。両方のワークフローを示す例については、ARM Neon ターゲット用の深層学習コードのクロス コンパイルを参照してください。

  • ホスト コンピューターで、深層学習コードのスタティック ライブラリまたはダイナミック ライブラリを生成します。次の手順に従います。

    • ホストで、codegen コマンドを使用して深層学習コードを生成およびビルドし、スタティック ライブラリまたはダイナミック ライブラリを作成します。

    • 生成されたライブラリ、ARM Compute Library ファイル、makefile、その他のサポート ファイルをターゲット ハードウェアにコピーします。

    • コピーした makefile をターゲットでコンパイルして実行可能ファイルを作成します。

    • ターゲット ハードウェアで生成された実行可能ファイルを実行します。

  • ホスト コンピューターで、深層学習コードの実行可能ファイルを生成します。次の手順に従います。

    • ホストで、codegen コマンドを使用して深層学習コードを生成およびビルドし、実行可能ファイルを作成します。

    • 生成された実行可能ファイル、ARM Compute Library ファイル、その他のサポート ファイルをターゲット ハードウェアにコピーします。

    • ターゲット ハードウェアで実行可能ファイルを実行します。

参考

関連するトピック