HyperAI

TVM Vom Anfänger Bis Zum Meister | TVM Installieren (Teil 1)

vor 2 Jahren
Information
Jiaxin Sun
特色图像

Inhalt auf einen Blick: Es gibt drei Möglichkeiten, TVM zu installieren: Installation aus dem Quellcode, Installation mithilfe eines Docker-Images und Installation mithilfe von NNPACK Contrib. In diesem Artikel geht es darum, wie TVM über den Quellcode installiert wird.

Schlüsselwörter: TVM Schnellstart Quellcode Installation

In früheren Artikeln 《Die chinesische TVM-Website ist offiziell gestartet! Das umfassendste Nachschlagewerk zur Bereitstellung von Machine-Learning-Modellen finden Sie hierIn diesem Artikel stellen wir die wichtige Rolle von TVM vor und zeigen, wie Sie die chinesische TVM-Dokumentation verwenden, um mit der Erkundung von Compilern für maschinelles Lernen zu beginnen.

Als nächstes werden wir eine Reihe von Tutorials erstellen. In diesem Artikel wird der Lernpfad von TVM vom Einstieg bis zur Meisterschaft ausführlich erläutert, in der Hoffnung, dass jeder Entwickler ein hervorragender Compiler-Ingenieur für maschinelles Lernen werden kann!

In diesem ArtikelWir stellen den wichtigsten Schritt der „Grundsteinlegung“ vor – die Installation von TVM.

TVM kann auf drei Arten installiert werden:

  1. Von der Quelle installieren
  2. Docker-Images
  3. NNPACK Contrib-Installation

Wie im Installations-Tutorial (Teil 1) werden in diesem Artikel die Best Practices für die Installation aus dem Quellcode ausführlich erläutert. Und konfigurieren und kompilieren Sie mit maximaler Flexibilität.

Schritt-für-Schritt-Anleitung zur Installation von TVM aus der Quelle

Das Erstellen und Installieren von TVM-Paketen von 0 bis 1 auf verschiedenen Systemen besteht aus zwei Schritten:

  1. Erstellen einer gemeinsam genutzten Bibliothek aus C++-Code
  • Linux: libtvm.so
  • macOS: libtvm.dylib
  • Windows: libtvm.dll

2. Einrichten für Programmiersprachenpakete (z. B. Python-Pakete)

Um den TVM-Quellcode herunterzuladen, besuchen Sie bitte:https://tvm.apache.org/download

Entwickler: Holen Sie sich den Quellcode von GitHub

Verwenden Sie beim Klonen des Quellrepositorys von GitHub die Option --recursive, um Untermodule zu klonen.

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

Windows-Benutzer können eine Git-Shell öffnen und den folgenden Befehl eingeben:

git submodule init
git submodule update

Erstellen einer gemeinsam genutzten Bibliothek

Unser Ziel ist der Aufbau der gemeinsam genutzten Bibliothek:

  • Unter Linux
    Die Zielbibliotheken sind libtvm.so und libtvm_runtime.so
  • Unter MacOS
    Die Zielbibliotheken sind libtvm.dylib und libtvm_runtime.dylib
  • Unter Windows
    Die Zielbibliotheken sind libtvm.dll und libtvm_runtime.dll

Es ist auch möglich, nur die Laufzeitbibliothek zu erstellen:
https://tvm.hyper.ai/docs/how_to/deploy/

TVM Die Mindestanforderungen zum Erstellen der Bibliothek sind:

  • Neuester C++-Compiler mit Unterstützung für C++17
    GCC 7.1
    Clang 5.0
    Apple Clang 9.3
    Visual Studio 2019 (v16.7)
  • CMake 3.10 oder höher
  • Es wird empfohlen, die TVM-Bibliothek mit LLVM zu erstellen, um alle Funktionen zu aktivieren.
  • Um CUDA zu verwenden, stellen Sie bitte sicher, dass die CUDA-Toolkit-Version mindestens 8.0 ist.
    Hinweis: Löschen Sie nach dem Upgrade von einer alten CUDA-Version die alte Version und starten Sie neu.
  • macOS kann Homebrew installieren, um die Installation und Verwaltung von Abhängigkeiten zu erleichtern.
  • Python: Es werden die Versionen 3.7.X+ und 3.8.X+ empfohlen. Version 3.9.X+ wird noch nicht unterstützt.

Um diese Abhängigkeiten auf Linux-Betriebssystemen wie Ubuntu/Debian zu installieren, führen Sie den folgenden Befehl im Terminal aus:

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

Verwenden Sie Homebrew, um die erforderlichen Abhängigkeiten für macOS mit Intel- oder M1-Chips zu installieren. Befolgen Sie die von Homebrew angegebenen Installationsschritte, um sicherzustellen, dass diese Abhängigkeiten korrekt installiert und konfiguriert sind:

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

Verwenden Sie cmake, um die Bibliothek zu erstellen

Die TVM-Konfiguration kann durch Bearbeiten von config.cmake und/oder Übergeben von cmake-Flags in der Befehlszeile geändert werden:

  • Wenn cmake nicht installiert ist, können Sie die neueste Version von der folgenden offiziellen Website herunterladen https://cmake.org/download/
  • Erstellen Sie ein Build-Verzeichnis und kopieren Sie cmake/config.cmake dorthin
mkdir build
cp cmake/config.cmake build
  • bearbeiten build/config.cmake Benutzerdefinierte Kompilierungsoptionen
  • Für einige Versionen von Xcode für macOS müssen Sie LDFLAGS hinzufügen -lc++abi, um Linkfehler zu vermeiden
  • Wille set(USE_CUDA OFF) Wechseln zu set(USE_CUDA ON) um das CUDA-Backend zu aktivieren. Machen Sie dasselbe für andere Backends und Bibliotheken, die Sie erstellen möchten (OpenCL, RCOM, METAL, VULKAN …).
  • Um das Debuggen zu vereinfachen, verwenden Sie set(USE_GRAPH_EXECUTOR ON) Und set(USE_PROFILER ON) Aktiviert den eingebetteten Graph-Executor und die Debugfunktionen.
  • Wenn Sie IR-Debugging verwenden müssen, können Sie set(USE_RELAY_DEBUG ON), und legen Sie die Umgebungsvariable TVM_LOG_DEBUG fest.
  • TVM erfordert LLVM für CPU-Codegenerierungstools (Codegen). LLVM-Builds werden empfohlen.
  • Zum Erstellen mit LLVM ist LLVM 4.0 oder höher erforderlich. Beachten Sie, dass die Standard-LLVM-Version in apt niedriger als 4.0 sein kann.
  • Da das Erstellen von LLVM aus dem Quellcode viel Zeit in Anspruch nimmt, wird empfohlen, eine vorgefertigte Version von der LLVM-Downloadseite herunterzuladen.
    1. Entpacken Sie die Datei an einen bestimmten Ort und ändern Sie sie build/config.cmake Hinzufügen set(USE_LLVM /path/to/your/llvm/bin/llvm-config)
    2. Oder direkt einstellen set(USE_LLVM ON), verwenden Sie CMake, um nach einer verfügbaren LLVM-Version zu suchen.
  • Sie können auch die LLVM Ubuntu Daily Builds verwenden
    Beachten Sie, dass apt-package die Versionsnummer an llvm-config anhängt. Wenn Sie beispielsweise LLVM Version 10 installiert haben, setzen Sie set(USE_LLVM llvm-config-10)
  • Empfohlene Benutzereinstellungen für PyTorch set(USE_LLVM "/path/to/llvm-config --link-static") Und set(HIDE_PRIVATE_SYMBOLS ON) Dies dient dazu, potenzielle Symbolkonflikte zwischen verschiedenen Versionen von LLVM zu vermeiden, die von TVM und PyTorch verwendet werden.
  • Auf einigen unterstützten Plattformen kann der Ccache-Compiler-Wrapper dazu beitragen, die TVM-Build-Zeit zu verkürzen. So aktivieren Sie CCache in einem TVM-Build:
    1. Maskeradenmodus von Ccache. Wird normalerweise während des Ccache-Installationsprozesses aktiviert. Damit TVM Ccache in Masquerade verwenden kann, geben Sie beim Konfigurieren des Build-Systems von TVM einfach den entsprechenden C/C++-Compilerpfad an. Zum Beispiel:cmake -DCMAKE_CXX_COMPILER=/usr/lib/ccache/c++ ...
    2. Ccache als C++-Compilerpräfix von CMake. Setzen Sie beim Konfigurieren des Build-Systems von TVM die CMake-Variable CMAKE_CXX_COMPILER_LAUNCHER auf einen geeigneten Wert. Zum Beispiel:cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ...
  • Erstellen Sie TVM und zugehörige Bibliotheken:
cd build
cmake ..
make -j4

Sie können Ninja verwenden, um den Build zu beschleunigen

cd build
cmake .. -G Ninja
ninja

Es gibt auch ein Makefile im Stammverzeichnis von TVM, das mehrere Schritte automatisch ausführen kann: Erstellen Sie ein Build-Verzeichnis und ändern Sie die Standardeinstellung config.cmake Kopieren Sie es in das Build-Verzeichnis, führen Sie cmake aus und führen Sie make aus.

Das Build-Verzeichnis kann über Umgebungsvariablen festgelegt werden TVM_BUILD_PATH angeben. Wenn TVM_BUILD_PATH Ohne Einstellung geht das Makefile davon aus, dass das Build-Verzeichnis in TVM verwendet werden soll. Verlassen Sie sich auf TVM_BUILD_PATH Der angegebene Pfad kann ein absoluter Pfad oder ein Pfad relativ zum TVM-Stammverzeichnis sein. Wenn TVM_BUILD_PATH Wenn eine durch Leerzeichen getrennte Liste von Pfaden festgelegt ist, werden alle aufgelisteten Pfade erstellt.

Wenn Sie ein anderes Build-Verzeichnis verwenden, sollten Sie die Umgebungsvariable TVM_LIBRARY_PATH zur Laufzeit so einstellen, dass sie auf das kompilierte libtvm.so Und libtvm_runtime.so Standort. Wenn nicht festgelegt, sucht TVM nach Standorten relativ zum TVM-Python-Modul. Und TVM_BUILD_PATH Im Gegensatz zu muss dies ein absoluter Pfad sein.

# 在 "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

Wenn alles gut geht, können wir die Installation der Python-Pakete überprüfen.

Erstellen mit Conda-Umgebung

Conda kann verwendet werden, um die zum Ausführen von TVM erforderlichen Abhängigkeiten zu erhalten. Wenn Conda nicht installiert ist, lesen Sie bitte Conda-Installationshandbuch um Miniconda oder Anaconda zu installieren. Führen Sie den folgenden Befehl in Ihrer Conda-Umgebung aus:

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

Der obige Befehl installiert alle erforderlichen Build-Abhängigkeiten wie CMake und LLVM. Als Nächstes können Sie den Standard-Build-Prozess aus dem vorherigen Abschnitt ausführen.

Um kompilierte Binärdateien außerhalb einer Conda-Umgebung zu verwenden, können Sie LLVM auf den statischen Link-Modus einstellen. set(USE_LLVM "llvm-config --link-static"). Auf diese Weise ist die generierte Bibliothek nicht von den dynamischen LLVM-Bibliotheken in der Conda-Umgebung abhängig.

Oben wird gezeigt, wie Sie Conda verwenden, um die erforderlichen Abhängigkeiten zum Erstellen von libtvm bereitzustellen. Wenn Sie Conda bereits als Paketmanager verwenden und TVM direkt als Conda-Paket erstellen und installieren möchten, können Sie die folgenden Anweisungen befolgen:

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

Erstellen unter Windows

TVM unterstützt das Erstellen mit CMake über MSVC. Ein Visual Studio-Compiler ist erforderlich. Die Mindestversion von VS ist Visual Studio Enterprise 2019

Hinweis: Vollständige Testdetails für GitHub Actions finden Sie im Windows 2019 Runner:

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

Es wird offiziell empfohlen, zum Erstellen die Conda-Umgebung zu verwenden, um die erforderlichen Abhängigkeiten zu erhalten und die TVM-Build-Umgebung zu aktivieren.

Führen Sie die folgende Befehlszeile aus:

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

Der obige Befehl generiert die Lösungsdateien im Build-Verzeichnis. Führen Sie dann Folgendes aus:

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

Aufbau der ROCm-Unterstützung

Derzeit wird ROCm nur unter Linux unterstützt, daher werden alle Tutorials auf Linux-Basis geschrieben.

  • Setzen Sie set(USE_ROCM ON) und setzen Sie ROCM_PATH auf den richtigen Pfad.
  • Sie müssen zuerst die HIP-Laufzeit von ROCm installieren. Stellen Sie sicher, dass ROCm auf Ihrem System installiert ist.
  • Installieren Sie die neueste stabile Version von LLVM (v6.0.1) sowie LLD und stellen Sie sicher, dass ld.lld über die Befehlszeile verfügbar ist.

Installation des Python-Pakets

TVM-Paket

In diesem Abschnitt wird die Verwendung virtueller Umgebungen und Paketmanager wie virtualenv oder conda zum Verwalten von Python-Paketen und -Abhängigkeiten vorgestellt.
Das Python-Paket befindet sich in tvm/python. Es gibt zwei Installationsmethoden:

  • Methode 1

Diese Methode eignet sich für Entwickler, die den Code ändern können.

Legen Sie die Umgebungsvariable PYTHONPATH fest, um Python mitzuteilen, wo diese Bibliothek zu finden ist. Nehmen wir zum Beispiel an, wir haben /path/to/tvm Das Verzeichnis hat tvm geklont, wir können ~/.bashrc Fügen Sie den folgenden Code hinzu: Dadurch können Sie Code abrufen und das Projekt neu erstellen, ohne das Setup erneut aufrufen zu müssen, und die Änderungen werden sofort übernommen.

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

Installieren Sie die Python-Bindungen von TVM über setup.py:

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

Python-Abhängigkeiten

Beachten Sie, dass Sie bei der Installation in einer verwalteten lokalen Umgebung, wie z. B. virtualenv, dann ist kein Bedarf --user Logo.

  • Notwendige Abhängigkeiten:
pip3 install --user numpy decorator attrs
  • Verwenden des RPC Trackers
pip3 install --user tornado
  • Verwenden des Autotuning-Moduls
pip3 install --user tornado psutil xgboost cloudpickle

Hinweis: Installieren Sie auf einem Mac mit M1-Chip xgboost / scipy Möglicherweise treten dabei einige Probleme auf. Für Scipy und xgboost müssen zusätzliche Abhängigkeiten wie Openblas installiert werden. Führen Sie die folgende Befehlszeile aus, um scipy und xgboost sowie die erforderlichen Abhängigkeiten und Konfigurationen zu installieren:

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-Bibliothek installieren

NNPACK Contrib-Installation, Ansicht
https://tvm.hyper.ai/docs/install/nnpack

Aktivieren von C++-Tests

Sie können Google Test verwenden, um C++-Tests in TVM durchzuführen. Am einfachsten lässt sich Google Test installieren, indem Sie es aus der Quelle installieren:

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

Nach erfolgreicher Installation können Sie ./tests/scripts/task_cpp_unittest.sh zum Erstellen und Starten der C++-Tests oder direkt mit make cpptest Bauen.

Das ist alles für dieses Tutorial – Teil 1 der TVM-Installation.In Teil 2 werden wir zwei weitere TVM-Installationsmethoden erläutern: die Installation des Docker-Images und die Installation von NNPACK Contrib.

Willkommen an alle, weiterhin aufmerksam zu sein tvm.hyper.ai, erfahren Sie mehr über die besten Entwicklungen bei TVM Chinese!

-- über--