初心者から熟練者までの TVM のインストール (パート 1)

特色图像

内容の概要: TVM には、ソース コードからのインストール、Docker イメージを使用したインストール、および NNPACK Contrib インストールの 3 つのインストール方法があります。この記事では、ソース コードを使用して TVM をインストールする方法に焦点を当てます。

キーワード: TVM クイック スタート ソース コードのインストール

以前の記事で 「TVM中国局が正式に開局します!」最も完成度の高い機械学習モデル導入の「参考書」はこちらでは、TVM 全体の重要な役割と、TVM の中国語ドキュメントを利用して機械学習コンパイラーの探索を開始する方法を紹介しました。

次に、一連のチュートリアルを作成します。 TVM の入門から習熟までの学習経路を詳しく説明し、すべての開発者が優れた機械学習コンパイル エンジニアになれることを願っています。

この記事では、「基礎を築く」重要なステップである TVM のインストールを紹介します。

TVM のインストールは 3 つの方法で実行できます。

  1. ソースからインストールする
  2. Dockerイメージ
  3. NNPACK Contrib のインストール

TVM インストール チュートリアルのパート 1 として、この記事ではソース コードからインストールするためのベスト プラクティスについて詳しく説明します。 また、柔軟な構成とコンパイルを最大限に活用できます。

TVM をソースからインストールする方法に関する詳しい手順

TVM パッケージを 0 から 1 までビルドしてさまざまなシステムにインストールするには、次の 2 つの手順が必要です。

  1. C++ コードから共有ライブラリを構築する
  • Linux: libtvm.so
  • macOS: libtvm.dylib
  • Windows: libtvm.dll

2. プログラミング言語パッケージ (Python パッケージなど) をセットアップします。

TVM ソース コードをダウンロードするには、次のサイトにアクセスしてください。https://tvm.apache.org/download

開発者: GitHub からソース コードを取得する

GitHub からソース リポジトリのクローンを作成するには、-recursive オプションを使用してサブモジュールのクローンを作成します。

git clone --recursive https://github.com/apache/tvm tvm

Windows ユーザーは、Git シェルを開いて次のコマンドを入力できます。

git submodule init
git submodule update

共有ライブラリを構築する

私たちの目標は、共有ライブラリを構築することです。

  • Linux 上で
    ターゲット ライブラリは libtvm.so と libtvm_runtime.so です。
  • macOS 上
    ターゲットライブラリはlibtvm.dylibとlibtvm_runtime.dylibです。
  • Windowsの場合
    ターゲットライブラリはlibtvm.dllとlibtvm_runtime.dllです。

ランタイム ライブラリのみをビルドすることも可能です。
https://tvm.hyper.ai/docs/how_to/deploy/

TVM ライブラリの最小ビルド要件は次のとおりです。

  • C++17をサポートする最新のC++コンパイラ
    GCC 7.1
    クラン 5.0
    アップルクラング 9.3
    Visual Studio 2019 (v16.7)
  • CMake 3.10以降
  • すべての機能を有効にするために、LLVM を使用して TVM ライブラリを構築することをお勧めします。
  • CUDA を使用する場合は、CUDA ツールキットのバージョンが少なくとも 8.0 であることを確認してください。
    注: 古いバージョンの CUDA をアップグレードした後は、古いバージョンを削除して再起動してください。
  • Homebrew を macOS にインストールすると、依存関係のインストールと管理が容易になります。
  • Python: バージョン 3.7.X+ を使用することをお勧めします。3.9.X+ はまだサポートされていません。

Ubuntu/Debian などの Linux オペレーティング システムで、これらの依存環境をインストールするには、ターミナルで次のコマンドを実行してください。

sudo apt-get update
sudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev

Homebrew を使用して、Intel または M1 チップを搭載した macOS に必要な依存関係をインストールします。これらの依存関係が正しくインストールされ、構成されていることを確認するには、Homebrew によって指定されたインストール手順に従う必要があります。

brew install gcc git cmake
brew install llvm
brew install python@3.8

cmakeを使用してライブラリを構築する

TVM の構成は、config.cmake を編集するか、コマンド ラインで cmake フラグを渡すことによって変更できます。

  • cmake がインストールされていない場合は、次の公式 Web サイトにアクセスして最新バージョンをダウンロードできます。 https://cmake.org/download/
  • ビルド ディレクトリを作成し、そこに cmake/config.cmake をコピーします。
mkdir build
cp cmake/config.cmake build
  • 編集 build/config.cmake カスタムコンパイルオプション
  • macOS 上の Xcode の一部のバージョンでは、LDFLAGS に追加する必要があります。 -lc++abiリンクエラーを避けるために
  • 意思 set(USE_CUDA OFF) に変更します set(USE_CUDA ON) CUDA バックエンドを有効にします。構築する他のバックエンドとライブラリ (OpenCL、RCOM、METAL、VULKAN...) についても同じことを行います。
  • デバッグを容易にするために、必ず使用してください set(USE_GRAPH_EXECUTOR ON) そして set(USE_PROFILER ON) 埋め込みグラフ エグゼキュータとデバッグ機能を有効にします。
  • IR デバッグを使用する必要がある場合は、次のように設定できます。 set(USE_RELAY_DEBUG ON)、同時に環境変数 TVM_LOG_DEBUG を設定します。
  • TVM には、CPU コード生成ツール (Codegen) 用の LLVM が必要です。 LLVM でビルドすることをお勧めします。
  • LLVM を使用してビルドするには、LLVM 4.0 以降が必要です。 apt のデフォルトの LLVM バージョンは 4.0 より低い可能性があることに注意してください。
  • LLVM はソースからビルドするのに時間がかかるため、LLVM ダウンロード ページからビルド済みバージョンをダウンロードすることをお勧めします。
    1. 特定の場所に解凍して変更する build/config.cmake 追加する set(USE_LLVM /path/to/your/llvm/bin/llvm-config)
    2. または直接設定します set(USE_LLVM ON)、CMake を使用して、利用可能な LLVM バージョンを検索します。
  • LLVM Ubuntu デイリー ビルドを使用することもできます
    apt-package はバージョン番号を llvm-config に追加することに注意してください。たとえば、LLVM バージョン 10 がインストールされている場合は、次のように設定します。 set(USE_LLVM llvm-config-10)
  • PyTorch のユーザー推奨設定 set(USE_LLVM "/path/to/llvm-config --link-static") そして set(HIDE_PRIVATE_SYMBOLS ON) TVM と PyTorch で使用される LLVM の異なるバージョンの間で潜在的なシンボルの競合を回避するため。
  • サポートされている一部のプラットフォームでは、Ccache コンパイラ ラッパーを使用すると、TVM のビルド時間を短縮できます。 TVM ビルドで CCache を有効にする方法は次のとおりです。
    1. Ccache のマスカレード モード。通常、Ccache のインストール中に有効になります。 TVM がマスカレードで Ccache を使用できるようにするには、TVM のビルド システムを構成するときに適切な C/C++ コンパイラ パスを指定するだけです。例えば:cmake -DCMAKE_CXX_COMPILER=/usr/lib/ccache/c++ ...
    2. Ccache は、CMake の C++ コンパイラ プレフィックスとして機能します。 TVM のビルド システムを構成するときは、CMake 変数 CMAKE_CXX_COMPILER_LAUNCHER を適切な値に設定します。例えば:cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ...
  • TVM および関連ライブラリを構築します。
cd build
cmake ..
make -j4

Ninja を使用するとビルドを高速化できます

cd build
cmake .. -G Ninja
ninja

TVM のルート ディレクトリには Makefile もあり、次のいくつかの手順を自動的に完了できます。 ビルドディレクトリを作成してデフォルトを変更する config.cmake ビルド ディレクトリにコピーし、cmake を実行して、make を実行します。

ビルドディレクトリは環境変数を使用して設定できます TVM_BUILD_PATH 指定すること。もし TVM_BUILD_PATH 設定しない場合、Makefile は TVM 内のビルド ディレクトリが使用されると想定します。による TVM_BUILD_PATH 指定したパスは、絶対パスまたは TVM ルート ディレクトリを基準とした相対パスです。もし TVM_BUILD_PATH スペースで区切られたパスのリストに設定すると、リストされたすべてのパスが作成されます。

別のビルド ディレクトリを使用する場合は、コンパイル済みディレクトリを指すように環境変数 TVM_LIBRARY_PATH を実行時に設定する必要があります。 libtvm.so そして libtvm_runtime.so 位置。設定されていない場合、TVM は TVM Python モジュールに関連する場所を検索します。そして TVM_BUILD_PATH 異なります。これは絶対パスである必要があります。

# 在 "build" 目录下构建
make

# 替代位置,"build_debug"
TVM_BUILD_PATH=build_debug make

# 同时构建 "build_release" 和 "build_debug"
TVM_BUILD_PATH="build_debug build_release" make

# 使用调试构建
TVM_LIBRARY_PATH=~/tvm/build_debug python3

すべてがうまくいけば、Python パッケージのインストールを確認できます。

Conda環境を使ってビルドする

Conda を使用すると、TVM の実行に必要な依存関係を取得できます。 Conda がインストールされていない場合は、以下を参照してください。 Conda インストール ガイド Miniconda または Anaconda をインストールします。 Conda 環境で次のコマンドを実行します。

# 用 yaml 指定的依赖创建 Conda 环境
conda env create --file conda/build-environment.yaml
# 激活所创建的环境
conda activate tvm-build

上記のコマンドは、CMake や LLVM などの必要なビルド依存関係をすべてインストールします。 次に、前のセクションの標準ビルド プロセスを実行できます。

Conda 環境の外部でコンパイルされたバイナリを使用すると、LLVM が静的リンク モードに設定されます set(USE_LLVM "llvm-config --link-static")。このようにして、生成されたライブラリは、Conda 環境の動的 LLVM ライブラリに依存しません。

上記は、Conda を使用して libtvm を構築するために必要な依存関係を提供する方法を示しています。すでに Conda をパッケージ マネージャーとして使用していて、TVM を Conda パッケージとして直接ビルドしてインストールしたい場合は、以下の手順に従うことができます。

conda build --output-folder=conda/pkg  conda/recipe
# 在启用 CUDA 的情况下运行 conda/build_cuda.sh 来构建
conda install tvm -c ./conda/pkg

Windows 上で構築する

TVM は MSVC 経由での CMake によるビルドをサポートしています。 Visual Studio コンパイラが必要です。 VS の最小バージョンは Visual Studio Enterprise 2019 です

注: GitHub Actions の完全なテストの詳細を確認するには、Windows 2019 Runner にアクセスしてください。

https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md

必要な依存関係を取得し、tvm-build 環境をアクティブ化するには、ビルドに Conda 環境を使用することが公式に推奨されています。

次のコマンドラインを実行します。

mkdir build
cd build
cmake -A x64 -Thost=x64 ..
cd ..

上記のコマンドにより、ビルド ディレクトリにソリューション ファイルが生成されました。次に、次を実行します。

cmake --build build --config Release -- /m

ROCm サポートの構築

現在、ROCm は Linux でのみサポートされているため、すべてのチュートリアルは Linux を念頭に置いて作成されています。

  • set(USE_ROCM ON) を設定し、ROCM_PATH を正しいパスに設定します。
  • 最初に ROCm から HIP ランタイムをインストールする必要があります。 ROCm がインストール システムにインストールされていることを確認してください。
  • LLVM (v6.0.1) と LLD の最新の安定バージョンをインストールし、ld.lld がコマンド ラインから利用できることを確認します。

Python パッケージのインストール

TVMパッケージ

このセクションでは、仮想環境と、virtualenv や conda などのパッケージ マネージャーを使用して、Python パッケージと依存関係を管理する方法を紹介します。
Python パッケージは tvm/python にあります。インストール方法は 2 つあります。

  • 方法 1

この方法は、コードを変更する可能性のある開発者に適しています。

環境変数 PYTHONPATH を設定して、このライブラリの場所を Python に指示します。たとえば、私たちがいると仮定します。 /path/to/tvm tvm はディレクトリ内に複製されます。 ~/.bashrc 次のコードを追加します。これにより、setup を再度呼び出すことなく、コードをプルしてプロジェクトを再構築できるようになり、これらの変更はすぐに反映されます。

export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
  • 方法 2

setup.py を介して TVM の Python バインディングをインストールします。

# 为当前用户安装 TVM 软件包
# 注意:如果你通过 homebrew 安装了 Python,那么在安装过程中就不需要 --user
#        它将被自动安装到你的用户目录下。
#        在这种情况下,提供 --user 标志可能会在安装时引发错误。
export MACOSX_DEPLOYMENT_TARGET=10.9  # 这是 mac 所需要的,以避免与 libstdc++ 的符号冲突
cd python; python setup.py install --user; cd ..

Python の依存関係

管理されたローカル環境にインストールする場合は注意してください。 virtualenvなら必要ない --user ロゴ。

  • 必要な依存関係:
pip3 install --user numpy decorator attrs
  • RPC トラッカーの使用
pip3 install --user tornado
  • オートチューニングモジュールを使用する
pip3 install --user tornado psutil xgboost cloudpickle

注: M1 チップを搭載した Mac では、 xgboost / scipy いくつかの問題が発生する可能性があります。 scipy と xgboost は、openblas などの追加の依存関係をインストールする必要があります。次のコマンド ラインを実行して、scipy と xgboost、および必要な依存関係と構成をインストールします。

brew install openblas gfortran

pip install pybind11 cython pythran

export OPENBLAS=/opt/homebrew/opt/openblas/lib/

pip install scipy --no-use-pep517

pip install xgboost

Contrib ライブラリをインストールする

NNPACK Contrib のインストール、表示
https://tvm.hyper.ai/docs/install/nnpack

C++ テストを有効にする

Google Test を使用すると、TVM で C++ テストを実行できます。 GTest をインストールする最も簡単な方法は、ソースからインストールすることです。

git clone https://github.com/google/googletest
cd googletest
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install

インストールが成功したら、使用できるようになります ./tests/scripts/task_cpp_unittest.sh C++ テストを構築して起動するか、直接使用します。 make cpptest 建てる。

このチュートリアル – TVM インストールのパート 1 はこれで終わりです。パート 2 では、他の 2 つの TVM インストール方法、Docker イメージのインストールと NNPACK Contrib のインストールについて引き続き説明します。

皆様、引き続き注目してください tvm.hyper.ai、TVM中国語の最高の進歩を理解してください!

- 以上 -