Partager via


Configurer CNTK sur Linux

configuration de build et de test de production CNTK

CNTK peut être exécuté avec succès dans de nombreuses configurations Linux, mais si vous souhaitez éviter les éventuels problèmes de compatibilité, vous pouvez vous familiariser avec CNTK configuration de build et de test de production où nous listons toutes les versions de composant de dépendance et de composant que nous utilisons.

CNTK en tant que conteneur Docker

Avant de continuer, vous pouvez envisager de déployer CNTK en tant que conteneur Docker. Lisez la section correspondante.

Limitations et précautions actuelles

Lisez attentivement cette section avant de poursuivre la configuration de votre système. Les informations ci-dessous peuvent vous faire gagner beaucoup de temps dans le débogage des erreurs de build.

Notes

Cette page part du principe que vous essayez de générer la branche principale de CNTK.

Emplacements de composants attendus dans les scripts de configuration et Makefile

Aujourd’hui configure et Makefile les scripts prennent uniquement en charge un ensemble limité de chemins d’installation pour tous les composants de dépendance répertoriés dans cette section. Nous savons qu’il s’agit d’une limitation et le corrigera bientôt (aussi si vous vous sentez comme améliorer ces scripts vous-même et soumettre vos modifications proposées, votre aide est bienvenue et beaucoup apprécié).

configure recherche tous les composants de dépendance parmi les chemins répertoriés dans default_path_list la variable définie dans le script.

Important

Si vous souhaitez modifier default_path_list la variable dans configure laquelle ajouter un chemin personnalisé pour un composant de dépendance spécifique, veillez à vérifier la section correspondante de Makefile. Sinon, vous pouvez obtenir des erreurs de build en raison de l’impossibilité de trouver des fichiers INCLUDE, des bibliothèques, etc.

Méthodes d’installation et chemins d’accès des composants de dépendance

Vous trouverez ci-dessous la liste de tous les composants de dépendance requis pour générer CNTK et expliquer comment les installer. Nous comprenons qu’il existe de nombreuses autres façons d’obtenir les mêmes composants. Toutefois, si vous préférez une autre méthode d’installation, assurez-vous que vous obtenez la même chose, car assez souvent d’autres sources d’installation, à savoir les packages de distribution réseau (comme Debian, RPM, etc.) contiennent des versions antérieures du logiciel, manquent certaines bibliothèques, etc. Dans certaines sections ci-dessous, nous mettons spécifiquement en évidence ces limitations, mais prenez-le comme précaution générale.

Utilisation de make -j

Dans la plupart des sections, nous vous suggérons d’utiliser make -j la commande pour appeler des travaux de génération parallèles et donc d’augmenter la vitesse du processus de génération. Toutefois, n’oubliez pas que sur certains systèmes et en particulier sur les machines virtuelles utilisant make -j peut entraîner des erreurs d’absence de mémoire. Si vous faites face à cela, utilisez simplement « brut » make ou limitez le nombre de travaux qui s’exécutent simultanément (deux travaux simultanés fonctionnent généralement pour la plupart des systèmes - utilisez la commande make -j 2).

Installation simultanée de différentes versions des mêmes packages de développement

Soyez très prudent si vous souhaitez avoir plusieurs installations de certains des packages de développement mentionnés ci-dessous sur le même système. Cela peut entraîner des erreurs de build très difficiles à déboguer, comme vous pouvez le voir dans ce billet.

Et maintenant, nous allons passer à l’installation.

Si vous souhaitez savoir quelle configuration requise est utilisée dans l’environnement de production CNTK, c’est-à-dire ce que nous utilisons en interne pour créer et tester, consultez cette section.

Système d’exploitation 64 bits

Vous avez besoin d’une installation Linux 64 bits pour utiliser CNTK.

Compilateur C++

Vérifiez que votre installation a un compilateur C++. De nombreuses distributions ne l’incluent pas par défaut. Reportez-vous à la documentation de votre plateforme sur la façon de rechercher et d’obtenir un compilateur C++.

Exemple : pour Ubuntu, exécutez la commande suivante :

dpkg --list | grep compiler

si dans la sortie, vous ne voyez pas quelque chose comme

g++-5 5.4.0-6ubuntu1~16.04.5 amd64 GNU C++ compiler

un compilateur C++ n’est pas installé. Si vous avez Ubuntu 1604, installez gcc 5.4 avec :

sudo apt-get install g++

Git

Installez Git sur votre système comme décrit ici.

MKL

La bibliothèque mathématique par défaut CNTK est la bibliothèque Intel Math Kernel Library (Intel MKL). Suivez cette page pour l’installer

Ouvrir MPI

Installez la bibliothèque Open Message Passing Interface Library (Open MPI).

Nous vous recommandons d’installer à partir de sources comme décrit ci-dessous, car un grand nombre de packages de distribution contiennent des versions antérieures et manquent les bibliothèques requises par CNTK. La version actuelle CNTK Open MPI requise est au moins 1.10. Vérifiez si vous avez des installations de version antérieures sur votre système et, si vous le faites, désinstallez-les ou vérifiez (par exemple, les liens symboliques) que CNTK procédure de génération utilise la version requise. Sinon, vous pouvez avoir du mal à déboguer des erreurs de build, comme vous pouvez le voir dans ce billet.

  • Obtenez les sources d’installation :
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
  • Décompressez, générez et installez Open MPI (dans /usr/local/mpi cet exemple) :
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
  • Ajoutez la variable d’environnement suivante à votre session active et à votre .bashrc profil (prédéfini le nouveau chemin d’accès, garantit que cette version est utilisée par opposition à une version par défaut disponible via le système d’exploitation) :
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH

Protobuf

Nous utilisons des mémoires tampons de protocole pour la sérialisation. Pour l’installation, procédez comme suit :

  • Installer les packages requis à l’aide de
sudo apt-get install autoconf automake libtool curl make g++ unzip
  • Télécharger et décompresser des sources protobuf
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
  • Compiler protobuf
cd protobuf-3.1.0
./autogen.sh
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC --disable-shared --prefix=/usr/local/protobuf-3.1.0
make -j $(nproc)
sudo make install

ZLIB

zlib est aujourd’hui une partie de nombreuses distributions Linux populaires, donc avec la probabilité élevée que vous l’avez préinstallée. Notez toutefois que libzip nécessite zlib version 1.1.2 ou ultérieure et ce n’est généralement pas préinstallé. zlib doit être installé avant de générer Boost ci-dessous.

Consultez la documentation de votre plateforme sur la façon d’obtenir le package zlib requis ou de l’obtenir directement à partir du site web zlib.

Exemple : pour Ubuntu, utilisez la commande suivante :

sudo apt-get install zlib1g-dev

LIBZIP

libzip est disponible dans différents packages de distribution réseau, mais nous avons constaté que beaucoup d’entre eux contiennent des anciennes versions. L’utilisation de ces versions entraîne probablement des erreurs de génération. Nous vous recommandons donc vivement de générer libzip à partir de sources, comme décrit ci-dessous.

Notez que la procédure suivante installe libzip sur /usr/local. C’est exactement là que CNTK procédure de génération l’attend (voir le début de cette page pour plus d’informations). Si vous souhaitez installer libzip dans un chemin d’accès différent, consultez les instructions du INSTALL fichier à la racine du dossier de distribution libzip. Toutefois, sachez que dans ce cas, vous devez modifier configure manuellement AND Makefile de CNTK pour prendre en charge ce chemin.

Utilisez les commandes suivantes :

wget http://nih.at/libzip/libzip-1.1.2.tar.gz
tar -xzvf ./libzip-1.1.2.tar.gz
cd libzip-1.1.2
./configure
make -j all
sudo make install

Ajoutez la variable d’environnement suivante à votre session active et à votre .bashrc profil :

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

Boost Library

La bibliothèque Boost est un prérequis pour la création du Microsoft Cognitive Toolkit. Procédez comme suit pour installer la bibliothèque Boost sur votre système :

sudo apt-get install libbz2-dev
sudo apt-get install python-dev

wget -q -O - https://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.gz/download | tar -xzf - 
cd boost_1_60_0 
./bootstrap.sh --prefix=/usr/local/boost-1.60.0
sudo ./b2 -d0 -j"$(nproc)" install  

Packages spécifiques au GPU

Si vous envisagez d’utiliser CNTK avec prise en charge du GPU, suivez cette page pour installer et configurer l’environnement en conséquence.

FACULTATIF. SWIG.

Si vous souhaitez tirer parti de CNTK à partir de Python, vous devez installer SWIG. SWIG est également nécessaire pour générer les bibliothèques d’évaluation CNTK pour Java. Pour l’installer, exécutez le script : [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh. Cela crée la version installée dans le dossier /usr/local/swig-3.0.10.

FACULTATIF. Prise en charge de Python CNTK v2

Cette section explique comment générer CNTK v2 avec la prise en charge de Python.

Étape 1 : Générer des API Python

  • Installez l’outil SWIG si vous ne l’avez pas encore fait.
  • Installer Anaconda3 4.1.1 (64 bits)
  • Si vous disposez déjà d’un environnement Python CNTK (appelé cntk-py36, cntk-py35ou cntk-py27) vous pouvez le mettre à jour avec les packages requis les plus récents avec les commandes suivantes :
# For cntk-py36:
conda env update --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py36-environment.yml --name cntk-py36
# For cntk-py35:
conda env update --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py35-environment.yml --name cntk-py35
# For cntk-py27:
conda env update --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py27-environment.yml --name cntk-py27
  • Si vous n’avez pas encore d’environnement Python CNTK, vous pouvez choisir entre un environnement Python 2.7, 3.5 ou 3.6 basé sur CNTK Python.
  • Créez votre environnement Python de votre choix dans votre installation Existante de Python 3.5 Anaconda ou Miniconda à l’aide de l’une des commandes suivantes, en fonction de votre version de Python souhaitée :
# For a Python 3.6 based version:
conda env create --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py36-environment.yml
# For a Python 3.5 based version:
conda env create --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py35-environment.yml
# For a Python 2.7 based version:
conda env create --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py27-environment.yml

Remarque : assurez-vous que l’environnement Python mis à jour ou créé ci-dessus est activé pour le reste des instructions. Par exemple, si vous avez un environnement basé sur Python 3.5 appelé cntk-py35 exécuter cette commande :

source activate cntk-py35

De même, pour un environnement basé sur Python 3.6 ou 2.7.

Étape 2 : Désinstaller le package de CNTK précédent

  • Si vous avez déjà installé une version du CNTK pip-package sur votre ordinateur, désinstallez-la en exécutant :pip uninstall cntk

Étape 3 : Générer un package Python

  • Pour configurer une build avec Python, incluez cette deux option lors de l’exécution configure:
--with-swig[=directory]

et l’un des éléments suivants (ce qui s’applique à votre environnement) :

--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
  • Seules les builds release sont prises en charge à ce stade. Par exemple, si vous avez installé SWIG sur /usr/local/swig-3.0.10 et que votre environnement Python se trouve à $HOME/anaconda3/envs/cntk-py35 fournir ces paramètres supplémentaires à configure:
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
  • Ensuite, exécutez-le comme vous le feriez normalement, ce qui générera le module Python CNTK à l’intérieur bindings/python/cntk et produit également un package (.whl) dans un sous-dossier de votre dossier de sortie de build (par exemplebuild/gpu/release/python).
cd [CNTK clone root]
export PYTHONPATH=$PWD/bindings/python:$PYTHONPATH
cd [CNTK clone root]/bindings/python
export LD_LIBRARY_PATH=$PWD/cntk/libs:$LD_LIBRARY_PATH

Notes

Contrairement à la configuration indiquée pour l’installation du package Pip, nous allons charger le module CNTK à partir du clone de référentiel CNTK, pas comme package installé dans votre environnement Python. (Par conséquent, la différence de configuration PYTHONPATH)

Étape 4 : Vérifier la configuration

Python

  • Exécutez les exemples Python à partir des [CNTK clone root]/Tutorials répertoires ou des répertoires [CNTK clone root]/Examples pour vérifier votre installation. Par exemple, accédez au dossier [CNTK clone root]/Tutorials/NumpyInterop et exécutez python FeedForwardNet.py. Vous devez voir la sortie suivante sur la console :
Minibatch: 0, Train Loss: 0.7915553283691407, Train Evaluation Criterion: 0.48

Minibatch: 20, Train Loss: 0.6266774368286133, Train Evaluation Criterion: 0.48

Minibatch: 40, Train Loss: 1.0378565979003906, Train Evaluation Criterion: 0.64

Minibatch: 60, Train Loss: 0.6558118438720704, Train Evaluation Criterion: 0.56

FACULTATIF. OpenCV

CNTK 2.2 nécessite l’installation d’Open Source Vision par ordinateur (OpenCV), mais elle est facultative après CNTK 2.3. Suivez cette page pour l’installer

FACULTATIF. Java

Pour générer les liaisons Java pour la bibliothèque d’évaluation CNTK, installez l’outil SWIG si vous ne l’avez pas encore fait. En outre, un Kit de développement Java (JDK) est requis. Actuellement, nous utilisons OpenJDK 8 64 bits.

Le script de configuration offre l’option --with-jdk permettant de spécifier manuellement le répertoire JDK, s’il est introuvable par défaut.

Obtention CNTK code source

Avant de continuer, notez que si vous envisagez d’apporter des modifications au code CNTK, vous devez lire les informations sur le développement et le test.

Utilisez Git pour cloner le référentiel CNTK et accéder au code source :

git clone --recursive https://github.com/Microsoft/cntk
cd cntk

Submodule Multiverso est utilisé pour activer DataParallelASGD pour l’entraînement.

Optionnel Si vous n’avez pas besoin de la prise en charge de DataParallelASGD, passez l’option --asgd=no à la commande configure.

Création de CNTK

Pour générer CNTK utiliser les commandes suivantes (nous supposons que le référentiel CNTK a été cloné sur ~/Repos/cntk) :

cd ~/Repos/cntk
mkdir build/release -p
cd build/release
../../configure

Vérifiez que la configure sortie correspond aux packages que vous avez installés dans les sections précédentes. Par exemple, vérifiez que configure CUDA est installé, etc.

Procédez comme suit pour générer CNTK à l’aide de tous les cœurs pour réduire le temps de génération. Notez que sur certains ordinateurs, cela peut surcharger votre système en entraînant des blocages ou des interruptions pendant la build.

make -j all

Si le ci-dessus surcharge votre ordinateur, essayez de spécifier moins de cœurs. Par exemple, si vous avez plus de 2 cœurs et que vous souhaitez conserver 2 cœurs libres de la build, vous pouvez essayer :

make -j"$(($(nproc)  - 2))" all

Si vous voulez être absolument sûr, utilisez simplement 1 cœur :

make all

Cela doit produire une build de version de CNTK. Si vous souhaitez obtenir une build de débogage, utilisez le paramètre suivant lors de l’appel configure:

../../configure --with-buildtype=debug

Test rapide de la fonctionnalité de génération CNTK

Pour vous assurer que CNTK fonctionne correctement dans votre système, vous pouvez rapidement exécuter un exemple à partir du didacticiel Hello World - Régression logistique. Cet exemple entraîne un réseau simple et peut être dirigé pour utiliser l’UC ou le GPU, ce qui permet de s’assurer rapidement que CNTK fonctionne correctement.

Ci-dessous, nous supposons que le référentiel CNTK est cloné ~/Repos/cntk et build/release utilisé comme sous-répertoire pour la build.

  • Indiquez le chemin d’accès aux fichiers binaires CNTK et passez au Tutorials/HelloWorld-LogisticRegression répertoire :
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression

Commencez par essayer l’exemple :

cntk configFile=lr_bs.cntk makeMode=false

Si l’exemple s’exécute, c’est-à-dire s’il n’y a pas de messages d’erreur, vous obtenez la sortie liée en premier à la lecture de la configuration, suivie de la sortie de l’entraînement réseau réel.

Essayer CNTK avec GPU

Si vous avez créé CNTK pour l’utilisation du GPU, essayez d’utiliser le GPU en exécutant les commandes suivantes :

cntk configFile=lr_bs.cntk makeMode=false deviceId=auto

Près du début de la sortie, vous devez voir une ligne confirmant qu’un GPU a été utilisé :

Model has 9 nodes. Using GPU 0.

Notez que l’ID GPU peut être différent. Le deviceId paramètre définit le processeur à utiliser pour le calcul.

  • deviceId=-1 signifie utiliser l’UC. Valeur par défaut
  • deviceId=X où X est un entier >=0 signifie utiliser GPU X, c’est-à-dire deviceId=0 gpu 0, etc.
  • deviceId=auto signifie utiliser GPU, sélectionner le GPU automatiquement

Contribution au code CNTK

Si vous envisagez de modifier le code, vous devez lire les informations sur le développement et le test.

Étapes suivantes