HyperAI

TVM Du Débutant Au Maître | Installer TVM (Partie 1)

il y a 2 ans
Information
Jiaxin Sun
特色图像

Aperçu du contenu : Il existe trois façons d'installer TVM : l'installation à partir du code source, l'installation à l'aide de l'image Docker et l'installation à l'aide de NNPACK Contrib. Cet article se concentre sur la façon d'installer TVM via le code source.

Mots clés : TVM, démarrage rapide, installation du code source

Dans les articles précédents Le site Web chinois de TVM est officiellement lancé ! L'ouvrage de référence le plus complet sur le déploiement de modèles d'apprentissage automatique est iciDans cet article, nous avons présenté le rôle important de TVM et comment utiliser la documentation chinoise de TVM pour commencer à explorer les compilateurs d'apprentissage automatique.

Ensuite, nous allons former une série de tutoriels. Cet article explique en détail le parcours d'apprentissage de TVM de l'entrée à la maîtrise, en espérant que chaque développeur puisse devenir un excellent ingénieur compilateur d'apprentissage automatique !

Dans cet article,Nous présenterons l'étape clé de « poser les fondations » : l'installation du TVM.

TVM peut être installé de trois manières :

  1. Installer à partir de la source
  2. Images Docker
  3. Installation de NNPACK Contrib

En tant que tutoriel d'installation (partie 1), cet article expliquera en détail les meilleures pratiques pour l'installation à partir du code source. Et configurez et compilez avec une flexibilité maximale.

Instructions étape par étape pour installer TVM à partir de la source

La création et l'installation des packages TVM de 0 à 1 sur différents systèmes se composent de deux étapes :

  1. Création d'une bibliothèque partagée à partir de code C++
  • Linux : libtvm.so
  • macOS : libtvm.dylib
  • Windows : libtvm.dll

2. Configuration des packages de langage de programmation (tels que les packages Python)

Pour télécharger le code source de TVM, veuillez visiter :https://tvm.apache.org/download

Développeurs : obtenez le code source sur GitHub

Lors du clonage du référentiel source à partir de GitHub, utilisez l'option --recursive pour cloner les sous-modules.

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

Les utilisateurs Windows peuvent ouvrir un shell Git et entrer la commande suivante :

git submodule init
git submodule update

Construire une bibliothèque partagée

Notre objectif est de construire la bibliothèque partagée :

  • Sous Linux
    Les bibliothèques cibles sont libtvm.so et libtvm_runtime.so
  • Sur macOS
    Les bibliothèques cibles sont libtvm.dylib et libtvm_runtime.dylib
  • Sous Windows
    Les bibliothèques cibles sont libtvm.dll et libtvm_runtime.dll

Il est également possible de construire uniquement la bibliothèque d'exécution :
https://tvm.hyper.ai/docs/how_to/deploy/

TVM Les exigences minimales pour construire la bibliothèque sont :

  • Dernier compilateur C++ prenant en charge C++17
    GCC 7.1
    Clang 5.0
    Apple Clang 9.3
    Visual Studio 2019 (v16.7)
  • CMake 3.10 ou supérieur
  • Il est recommandé de créer la bibliothèque TVM avec LLVM pour activer toutes les fonctionnalités.
  • Pour utiliser CUDA, assurez-vous que la version de la boîte à outils CUDA est au moins 8.0.
    Remarque : après la mise à niveau à partir d'une ancienne version de CUDA, veuillez supprimer l'ancienne version et redémarrer.
  • macOS peut installer Homebrew pour faciliter l'installation et la gestion des dépendances.
  • Python : les versions 3.7.X+ et 3.8.X+ sont recommandées. La version 3.9.X+ n'est pas encore prise en charge.

Pour installer ces dépendances sur les systèmes d'exploitation Linux tels que Ubuntu/Debian, exécutez la commande suivante dans le terminal :

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

Utilisez Homebrew pour installer les dépendances requises pour macOS avec des puces Intel ou M1. Suivez les étapes d'installation spécifiées par Homebrew pour vous assurer que ces dépendances sont correctement installées et configurées :

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

Utilisez cmake pour créer la bibliothèque

La configuration de TVM peut être modifiée en éditant config.cmake et/ou en passant les indicateurs cmake sur la ligne de commande :

  • Si cmake n'est pas installé, vous pouvez visiter le site officiel suivant pour télécharger la dernière version https://cmake.org/download/
  • Créez un répertoire de build et copiez-y cmake/config.cmake
mkdir build
cp cmake/config.cmake build
  • modifier build/config.cmake Options de compilation personnalisées
  • Pour certaines versions de Xcode pour macOS, vous devez ajouter LDFLAGS -lc++abi, afin d'éviter les erreurs de lien
  • Volonté set(USE_CUDA OFF) Changer pour set(USE_CUDA ON) pour activer le backend CUDA. Faites de même pour les autres backends et bibliothèques que vous souhaitez construire (OpenCL, RCOM, METAL, VULKAN...).
  • Pour un débogage plus facile, assurez-vous d'utiliser set(USE_GRAPH_EXECUTOR ON) et set(USE_PROFILER ON) Active l'exécuteur graphique intégré et les capacités de débogage.
  • Si vous devez utiliser le débogage IR, vous pouvez définir set(USE_RELAY_DEBUG ON), et définissez la variable d'environnement TVM_LOG_DEBUG.
  • TVM nécessite LLVM pour les outils de génération de code CPU (Codegen). Il est recommandé de construire avec LLVM.
  • La construction avec LLVM nécessite LLVM 4.0 ou supérieur. Notez que la version LLVM par défaut dans apt peut être inférieure à 4.0.
  • Étant donné que la création de LLVM à partir de la source prend beaucoup de temps, il est recommandé de télécharger une version pré-compilée à partir de la page de téléchargement de LLVM.
    1. Décompressez vers un emplacement spécifique et modifiez build/config.cmake Pour ajouter set(USE_LLVM /path/to/your/llvm/bin/llvm-config)
    2. Ou définir directement set(USE_LLVM ON), utilisez CMake pour rechercher une version LLVM disponible.
  • Vous pouvez également utiliser les versions quotidiennes LLVM Ubuntu
    Notez qu'apt-package ajoutera le numéro de version à llvm-config. Par exemple, si vous avez installé la version 10 de LLVM, définissez set(USE_LLVM llvm-config-10)
  • Paramètres recommandés par l'utilisateur de PyTorch set(USE_LLVM "/path/to/llvm-config --link-static") et set(HIDE_PRIVATE_SYMBOLS ON) Ceci permet d'éviter les conflits de symboles potentiels entre les différentes versions de LLVM utilisées par TVM et PyTorch.
  • Sur certaines plates-formes prises en charge, le wrapper du compilateur Ccache peut aider à réduire le temps de construction de TVM. Les méthodes pour activer CCache dans la version TVM incluent :
    1. Mode Mascarade de Ccache. Normalement activé pendant le processus d'installation de Ccache. Pour permettre à TVM d'utiliser Ccache dans le masquerade, spécifiez simplement le chemin du compilateur C/C++ approprié lors de la configuration du système de construction de TVM. Par exemple:cmake -DCMAKE_CXX_COMPILER=/usr/lib/ccache/c++ ...
    2. Ccache comme préfixe du compilateur C++ de CMake. Lors de la configuration du système de construction de TVM, définissez la variable CMake CMAKE_CXX_COMPILER_LAUNCHER sur une valeur appropriée. Par exemple:cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ...
  • Créer TVM et les bibliothèques associées :
cd build
cmake ..
make -j4

Vous pouvez utiliser Ninja pour accélérer la construction

cd build
cmake .. -G Ninja
ninja

Il existe également un Makefile dans le répertoire racine de TVM, qui peut effectuer automatiquement plusieurs étapes : Créez un répertoire de build et modifiez la valeur par défaut config.cmake Copiez-le dans le répertoire de construction, exécutez cmake et exécutez make.

Le répertoire de construction peut être défini à l'aide de variables d'environnement TVM_BUILD_PATH à préciser. si TVM_BUILD_PATH Sans paramètre, le Makefile supposera que le répertoire de construction dans TVM doit être utilisé. Dépendre de TVM_BUILD_PATH Le chemin spécifié peut être un chemin absolu ou un chemin relatif au répertoire racine TVM. si TVM_BUILD_PATH Si défini sur une liste de chemins délimitée par des espaces, tous les chemins répertoriés seront créés.

Si vous utilisez un autre répertoire de construction, vous devez définir la variable d'environnement TVM_LIBRARY_PATH lors de l'exécution pour pointer vers le répertoire compilé. libtvm.so et libtvm_runtime.so emplacement. Si ce paramètre n'est pas défini, TVM recherchera des emplacements relatifs au module Python TVM. et TVM_BUILD_PATH Contrairement à , cela doit être un chemin absolu.

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

Si tout se passe bien, nous pouvons vérifier l’installation des packages Python.

Construire avec l'environnement Conda

Conda peut être utilisé pour obtenir les dépendances nécessaires à l'exécution de TVM. Si Conda n'est pas installé, veuillez vous référer à Guide d'installation de Conda pour installer Miniconda ou Anaconda. Exécutez la commande suivante dans votre environnement Conda :

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

La commande ci-dessus installera toutes les dépendances de build nécessaires telles que CMake et LLVM. Ensuite, vous pouvez exécuter le processus de construction standard de la section précédente.

Pour utiliser des binaires compilés en dehors d'un environnement Conda, vous pouvez définir LLVM sur le mode de liaison statique. set(USE_LLVM "llvm-config --link-static"). De cette façon, la bibliothèque générée ne dépendra pas des bibliothèques LLVM dynamiques dans l'environnement Conda.

Ce qui précède montre comment utiliser Conda pour fournir les dépendances nécessaires à la création de libtvm. Si vous utilisez déjà Conda comme gestionnaire de paquets et que vous souhaitez créer et installer TVM directement en tant que paquet Conda, vous pouvez suivre les instructions ci-dessous :

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

Construire sur Windows

TVM prend en charge la construction avec CMake via MSVC. Un compilateur Visual Studio est requis. La version minimale de VS est Visual Studio Enterprise 2019

Remarque : pour obtenir tous les détails des tests pour GitHub Actions, visitez Windows 2019 Runner :

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

Il est officiellement recommandé d'utiliser l'environnement Conda pour la construction afin d'obtenir les dépendances nécessaires et d'activer l'environnement tvm-build.

Exécutez la ligne de commande suivante :

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

La commande ci-dessus génère les fichiers de solution dans le répertoire de construction. Ensuite, exécutez :

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

Création d'un support ROCm

Actuellement, ROCm n'est pris en charge que sous Linux, donc tous les tutoriels sont écrits avec Linux comme base.

  • Définissez set(USE_ROCM ON) et définissez ROCM_PATH sur le chemin correct.
  • Vous devez d’abord installer le runtime HIP à partir de ROCm. Assurez-vous que ROCm est installé sur votre système.
  • Installez la dernière version stable de LLVM (v6.0.1), ainsi que LLD, et assurez-vous que ld.lld est disponible à partir de la ligne de commande.

Installation du package Python

Forfait TVM

Cette section présente comment utiliser les environnements virtuels et les gestionnaires de packages tels que virtualenv ou conda pour gérer les packages et les dépendances Python.
Le package Python se trouve dans tvm/python. Il existe deux méthodes d'installation :

  • Méthode 1

Cette méthode convient aux développeurs susceptibles de modifier le code.

Définissez la variable d’environnement PYTHONPATH pour indiquer à Python où trouver cette bibliothèque. Par exemple, supposons que nous ayons /path/to/tvm Le répertoire a été cloné par tvm, nous pouvons ~/.bashrc Ajoutez le code suivant à : Cela vous permet d'extraire du code et de reconstruire le projet sans avoir à appeler à nouveau la configuration, et les modifications seront reflétées immédiatement.

export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
  • Méthode 2

Installez les liaisons Python de TVM via setup.py :

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

Dépendances Python

Notez que si vous souhaitez installer dans un environnement local géré, tel que virtualenv, alors pas besoin --user Logo.

  • Dépendances nécessaires :
pip3 install --user numpy decorator attrs
  • Utilisation de RPC Tracker
pip3 install --user tornado
  • Utilisation du module de réglage automatique
pip3 install --user tornado psutil xgboost cloudpickle

Remarque : sur un Mac équipé d’une puce M1, installez xgboost / scipy Vous pourriez rencontrer quelques problèmes. Scipy et xgboost nécessitent l'installation de dépendances supplémentaires telles qu'openblas. Exécutez la ligne de commande suivante pour installer scipy et xgboost ainsi que les dépendances et la configuration requises :

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

Installer la bibliothèque Contrib

Installation de NNPACK Contrib, vue
https://tvm.hyper.ai/docs/install/nnpack

Activer les tests C++

Google Test peut être utilisé pour piloter des tests C++ dans TVM. Le moyen le plus simple d'installer Google Test est de l'installer à partir de la source :

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

Après une installation réussie, vous pouvez utiliser ./tests/scripts/task_cpp_unittest.sh pour construire et lancer les tests C++, ou directement avec make cpptest Construire.

C’est tout pour ce tutoriel – Partie 1 de l’installation de TVM.Dans la partie 2, nous continuerons à expliquer deux autres méthodes d'installation de TVM : l'installation de l'image Docker et l'installation de NNPACK Contrib.

Bienvenue à tous pour continuer à prêter attention tvm.hyper.ai, découvrez les meilleurs développements de TVM chinois !

-- sur--