HyperAI

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

vor 2 Jahren
Information
Jiaxin Sun
特色图像

Inhalte im Überblick:Es gibt drei Möglichkeiten, TVM zu installieren: Installation aus dem Quellcode, Installation mit einem Docker-Image und Installation mit NNPACK Contrib. In diesem Artikel wird die Installation über ein Docker-Image und NNPACK Contrib erläutert.

Schlüsselwörter:TVM Docker-Grundlagen-Tutorial   

Dieser Artikel wurde zuerst auf dem offiziellen WeChat-Konto HyperAI veröffentlicht.

Willkommen zurück bei TVM-Dokumentation 101. In dieser Reihe wird der tägliche TVM-Unterricht fortgesetzt.

Vorherige Ausgabe Teil 1  Wir haben erklärt, wie man TVM aus dem Quellcode installiert. In dieser Ausgabe geht es weiter mit den Vorbereitungen vor dem Erlernen von TVM.Erklärt, wie TVM über Docker-Image und NNPACK Contrib installiert wird.

 TVM-Installation Docker-Image-Installation

Entwickler können Docker-Tool-Skripte verwenden, um eine Entwicklungsumgebung zu erstellen. Dies hilft auch beim Ausführen von TVM-Demos und -Tutorials.

Erfordert Docker

https://docs.docker.com/engine/installation

Wenn Sie CUDA verwenden, benötigen Sie Nvidia-Docker.

https://github.com/NVIDIA/nvidia-docker

Holen Sie sich die TVM-Quellverteilung oder klonen Sie das GitHub-Repository, um die Hilfsskripte zu erhalten:

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

Verwenden Sie den folgenden Befehl, um das Docker-Image zu starten:

/path/to/tvm/docker/bash.sh <image-name>

Nachdem der lokale Build abgeschlossen ist, kann der Image-Name hier ein lokaler Docker-Image-Name sein, zum Beispiel:tvm.ci_cpu  .

Dieses Hilfsskript ermöglicht:

  •   Mounten Sie das aktuelle Verzeichnis in /workspace
  •   Wechseln Sie zum Benutzer, der bash.sh aufruft (damit Sie auf dem Hostsystem lesen/schreiben können).
  •   Verwenden Sie das Netzwerk des Hosts unter Linux. Da Host-Netzwerklaufwerke nicht unterstützt werden, verwenden Sie unter macOS ein Bridge-Netzwerk und geben Sie Port 8888 frei, um Jupyter Notebook zu verwenden.

Starten Sie Jupyter Notebook, indem Sie Folgendes eingeben:

jupyter notebook

Wenn beim Starten von Jupyter Notebook unter macOS ein Fehler auftritt OSError: [Errno 99] Die angeforderte Adresse kann nicht zugewiesen werdenkönnen Sie die gebundene IP-Adresse wie folgt ändern:

jupyter notebook --ip=0.0.0.0

Beachten Sie, dass Jupyter Notebook unter macOS, da wir Bridged Networking verwenden, in einem Fenster ähnlich dem folgenden angezeigt wird: http://{container_hostname}:8888/?token=…  Führen Sie es unter der URL von aus. Beim Einfügen im Browser müssen Sie Container-Hostname  Ersetzen durch lokaler Host .

Docker-Quellcode 

Docker-Quellcode anzeigen: Erstellen Sie Ihr eigenes Docker-Image.

https://github.com/apache/tvm/tree/main/docker

Führen Sie den folgenden Befehl aus, um das Docker-Image zu erstellen:

/path/to/tvm/docker/build.sh <image-name>

Sie können auch inoffizielle vorgefertigte Bilder von Drittanbietern verwenden. Hinweis: Diese Bilder dienen zum Testen und sind keine ASF-Versionen.

https://hub.docker.com/r/tlcpack

TVM-Installation: NNPACK Contrib-Installation 

NNPACK ist ein Beschleunigungspaket für neuronale Netzwerkberechnungen, das auf CPUs mit x86-64-, ARMv7- oder ARM64-Architekturen ausgeführt werden kann.Mithilfe von NNPACK können High-Level-Bibliotheken wie MXNet die Ausführung auf Computern mit Multi-Core-CPU, einschließlich Laptops und Mobilgeräten, beschleunigen.

Da TVM bereits über eine nativ abgestimmte Planung verfügt, wird NNPACK hauptsächlich zu Referenz- und Vergleichszwecken verwendet. Für den allgemeinen Gebrauch ist die nativ abgestimmte TVM-Implementierung besser.

TVM unterstützt NNPACK für die Vorwärtsausbreitung in Faltungs-, Max-Pooling- und vollständig verbundenen Schichten (nur Inferenz).In diesem Dokument bieten wir einen allgemeinen Überblick über die Verwendung von NNPACK mit TVM.

Zustand 

Die zugrunde liegende Implementierung von NNPACK verwendet verschiedene Beschleunigungsmethoden, darunter FFT und Winograd.Diese Algorithmen funktionieren mit bestimmten Batchgrößen, Kernelgrößen und Schrittweiteneinstellungen besser als andere, sodass je nach Kontext möglicherweise nicht alle Convolutional-, Max-Pooling- oder vollständig verbundenen Schichten von NNPACK unterstützt werden.

NNPACK wird derzeit nur unter Linux und OS X unterstützt, nicht jedoch unter Windows.

NNPACK erstellen/installieren 

Wenn das trainierte Modell einige Bedingungen für die Verwendung von NNPACK erfüllt, können Sie ein TVM erstellen, das NNPACK unterstützt.

Befolgen Sie diese einfachen Schritte: Erstellen Sie die gemeinsam genutzte NNPACK-Bibliothek mit dem folgenden Befehl. TVM wird NNPACK dynamisch verknüpfen.

HINWEIS: Die folgenden NNPACK-Installationsanweisungen wurden auf Ubuntu 16.04 getestet.

Ninja bauen 

NNPACK erfordert eine aktuelle Version von Ninja. Also müssen wir Ninja aus der Quelle installieren.

git clone git://github.com/ninja-build/ninja.git
cd ninja
./configure.py --bootstrap

Legen Sie die Umgebungsvariable PATH fest, um Bash mitzuteilen, wo die ausführbare Ninja-Datei zu finden ist. Angenommen, wir haben Ninja in unserem Home-Verzeichnis ~ geklont. Dann können wir die folgende Zeile in ~/.bashrc hinzufügen.

export PATH="${PATH}:~/ninja"

NNPACK erstellen 

CMAKE neue Version von NNPACK separat herunterladen Peach und andere Abhängigkeiten

https://github.com/Maratyszcza/PeachPy

HINWEIS: Zumindest unter OS X überschreibt die Ausführung der folgenden Ninja-Installation die in /usr/local/lib installierte Googletest-Bibliothek. Wenn Sie Googletest erneut erstellen, um Ihre Kopie von nnpack zu ersetzen, übergeben Sie unbedingt -DBUILD_SHARED_LIBS=ON an cmake.

git clone --recursive https://github.com/Maratyszcza/NNPACK.git
cd NNPACK

# 在 CFLAG 和 CXXFLAG 中添加 PIC 选项以构建 NNPACK 共享库
sed -i "s|gnu99|gnu99 -fPIC|g" CMakeLists.txt
sed -i "s|gnu++11|gnu++11 -fPIC|g" CMakeLists.txt
mkdir build
cd build

# 生成 ninja 构建规则并在配置中添加共享库
cmake -G Ninja -D BUILD_SHARED_LIBS=ON ..
ninja
sudo ninja install

# 在你的 ldconfig 中添加 NNPACK 的 lib 文件夹
echo "/usr/local/lib" > /etc/ld.so.conf.d/nnpack.conf
sudo ldconfig

Erstellen von TVM mit NNPACK-Unterstützung

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

* existieren config.cmake  Mittlere Einstellungen setze(USE_NNPACK EIN)  .

* Wille NNPACK_PATH  Eingestellt auf $(IHR_NNPACK_INSTALLATIONSPFAD)  Verwenden Sie nach der Konfiguration make, um TVM zu erstellen

make

Melden Sie sich bei tvm.hyper.ai an, um das Originaldokument anzuzeigen. Hyper AI wird das chinesische TVM-Tutorial auch in Zukunft aktualisieren, also bleiben Sie dran~

-- über--