Freigeben über


Setup CNTK unter Linux

CNTK Produktionsbuild- und Testkonfiguration

CNTK können in vielen Linux-Konfigurationen erfolgreich ausgeführt werden, aber falls Sie mögliche Kompatibilitätsprobleme vermeiden möchten, können Sie sich mit CNTK Produktionsbuild- und Testkonfiguration vertraut machen, in der wir alle von uns verwendeten Abhängigkeitskomponenten- und Komponentenversionen auflisten.

CNTK als Docker-Container

Bevor Sie weitere Informationen verschieben, können Sie CNTK als Docker-Container bereitstellen. Lesen Sie den entsprechenden Abschnitt.

Aktuelle Einschränkungen und Vorsichtsmaßnahmen

Lesen Sie diesen Abschnitt sorgfältig, bevor Sie mit Ihrer Systemkonfiguration fortfahren. Die nachstehenden Informationen können Ihnen viel Zeit sparen, andernfalls werden Sie beim Debuggen von Buildfehlern verwendet.

Hinweis

Diese Seite geht davon aus, dass Sie versuchen, die Master-Verzweigung CNTK zu erstellen.

Erwartete Komponentenspeicherorte in Konfigurations- und Makefile-Skripts

Heute configure und Makefile Skripts unterstützen nur einen begrenzten Satz von Installationspfaden für alle in diesem Abschnitt aufgeführten Abhängigkeitskomponenten. Wir wissen, dass dies eine Einschränkung ist und es bald beheben wird (auch wenn Sie sich wie eine Verbesserung dieser Skripts fühlen und Ihre vorgeschlagenen Änderungen übermitteln , ist Willkommen und viel geschätzt).

configure sucht nach allen Abhängigkeitskomponenten zwischen den Pfaden, die in der Variablen aufgeführt sind, die innerhalb default_path_list des Skripts definiert sind.

Wichtig

Wenn Sie die Variable configure ändern default_path_list möchten, um einen benutzerdefinierten Pfad für eine bestimmte Abhängigkeitskomponente hinzuzufügen, überprüfen Sie unbedingt den korrespondenten Abschnitt von Makefile. Andernfalls erhalten Sie Buildfehler aufgrund der Unzustellbarkeit von INCLUDE-Dateien, Bibliotheken usw.

Installationsmethoden und Pfade von Abhängigkeitskomponenten

Nachfolgend werden alle Abhängigkeitskomponenten aufgeführt, die zum Erstellen von CNTK erforderlich sind, und erläutern, wie sie installiert werden. Wir verstehen, dass es viele andere Möglichkeiten gibt, dieselben Komponenten zu erhalten. Wenn Sie jedoch eine alternative Art der Installation bevorzugen, stellen Sie sicher, dass Sie dieselbe Sache erhalten, da ziemlich oft alternative Installationsquellen, nämlich Netzwerkverteilungspakete (wie Debian, RPM usw.) ältere Versionen der Software enthalten, einige Bibliotheken verpassen usw. In einigen Abschnitten unten werden diese Einschränkungen ausdrücklich hervorgehoben, aber bitte als allgemeine Vorsichtsmaßnahmen ergreifen.

Verwendung von make -j

In den meisten Abschnitten empfehlen wir, den Befehl zum Aufrufen paralleler Buildaufträge zu verwenden make -j und so die Geschwindigkeit des Buildprozesses zu erhöhen. Beachten Sie jedoch, dass bei einigen Systemen und insbesondere auf virtuellen Computern unter Verwendung make -j von "Out of memory" Fehler auftreten können. Wenn Sie dies sehen, verwenden Sie einfach "nur" make oder beschränken Sie die Anzahl der Aufträge, die gleichzeitig ausgeführt werden (zwei gleichzeitige Aufträge funktionieren normalerweise für die meisten Systeme - verwenden Sie den Befehl make -j 2).

Gleichzeitige Installation verschiedener Versionen derselben Entwicklungspakete

Seien Sie sehr vorsichtig, wenn Sie mehrere Installationen einiger der weiter unten aufgeführten Entwicklungspakete auf demselben System haben möchten. Es kann sehr schwierig sein, Buildfehler zu debuggen, wie Sie in diesem Beitrag sehen können.

Und jetzt fahren wir mit dem Setup fort.

Wenn Sie wissen möchten, welche Voraussetzungskonfiguration in der CNTK Produktionsumgebung verwendet wird, d. h., was wir intern zum Erstellen und Testen verwenden, finden Sie in diesem Abschnitt

64-Bit-Betriebssystem

Sie benötigen eine 64-Bit-Linux-Installation, um CNTK zu verwenden.

C++ Compiler

Stellen Sie sicher, dass ihre Installation über einen C++-Compiler verfügt. Viele Verteilungen enthalten sie nicht standardmäßig. Weitere Informationen zum Überprüfen und Abrufen eines C++-Compilers finden Sie in ihrer Plattformdokumentation.

Beispiel: Führen Sie für Ubuntu den folgenden Befehl aus:

dpkg --list | grep compiler

wenn in der Ausgabe nicht wie folgt angezeigt wird

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

Dann wird kein C++-Compiler installiert. Wenn Sie Ubuntu 1604 haben, installieren Sie gcc 5.4 mit:

sudo apt-get install g++

Git

Installieren Sie Git auf Ihrem System, wie hier beschrieben.

MKL

Die Standardbibliothek CNTK Mathematik ist die Intel Math Kernel Library (Intel MKL). Folgen Sie dieser Seite , um sie zu installieren.

Open MPI

Installieren Der Open Message Passing Interface Library (Open MPI)

Es wird empfohlen, aus Quellen wie unten beschrieben zu installieren, da viele Verteilerpakete ältere Versionen enthalten und die von CNTK erforderlichen Bibliotheken verpassen. Aktuelle CNTK Anforderung der Open MPI-Version mindestens 1.10. Überprüfen Sie, ob Sie über ältere Versionsinstallationen auf Ihrem System verfügen und ob Sie diese deinstallieren oder sicherstellen (z. B. symbolische Links), dass CNTK Buildprozedur die erforderliche Version verwendet. Andernfalls kann es schwierig sein, Buildfehler zu debuggen, wie Sie in diesem Beitrag sehen können.

  • Abrufen der Installationsquellen:
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
  • Entpacken, Erstellen und Installieren von Open MPI (in /usr/local/mpi diesem Beispiel):
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
  • Fügen Sie ihrer aktuellen Sitzung und Ihrem .bashrc Profil die folgende Umgebungsvariable hinzu (Stellen Sie vor dem neuen Pfad sicher, dass diese Version im Gegensatz zu einer standardversion verwendet wird, die über das Betriebssystem verfügbar ist):
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH

Protobuf

Wir verwenden Protokollpuffer für die Serialisierung. Führen Sie für die Installation die folgenden Schritte aus:

  • Installieren der erforderlichen Pakete mithilfe von
sudo apt-get install autoconf automake libtool curl make g++ unzip
  • Herunterladen und Entpacken von Protobuf-Quellen
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
  • Kompilieren von 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 ist heute Teil vieler beliebter Linux-Distributionen, daher ist es mit der hohen Wahrscheinlichkeit, dass sie vorinstalliert ist. Beachten Sie jedoch, dass libzip zlib Version 1.1.2 oder höher erfordert, und dies ist normalerweise NICHT vorinstalliert. Zlib muss vor dem Erstellen von Boost unten installiert werden.

Sehen Sie sich Ihre Plattformdokumentation an, wie Sie das erforderliche zlib-Paket abrufen oder direkt von der zlib-Website abrufen können.

Beispiel: Für Ubuntu verwenden Sie den folgenden Befehl:

sudo apt-get install zlib1g-dev

LIBZIP

libzip ist in verschiedenen Netzwerkverteilungspaketen verfügbar, aber wir haben festgestellt, dass viele davon alte Versionen enthalten. Die Verwendung dieser Versionen führt wahrscheinlich zu Buildfehlern. Daher empfehlen wir dringend, libzip aus Quellen wie unten beschrieben zu erstellen.

Beachten Sie, dass das folgende Verfahren libzip auf /usr/local. Dies ist genau der Ort, an dem CNTK Buildprozedur es erwartet (siehe Anfang dieser Seite ausführliche Informationen). Wenn Sie libzip in einem anderen Pfad installieren möchten, finden Sie Anweisungen in der Datei im INSTALL Stammordner der libzip-Verteilung. Beachten Sie jedoch, dass Sie in diesem Fall manuell bearbeiten configure müssen. UND Makefile von CNTK, um diesen Pfad zu unterstützen.

Verwenden Sie die folgenden Befehle:

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

Fügen Sie der aktuellen Sitzung und Ihrem .bashrc Profil die folgende Umgebungsvariable hinzu:

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

Bibliothek erhöhen

Die Boost-Bibliothek ist eine Voraussetzung für das Erstellen der Microsoft Cognitive Toolkit. Führen Sie die folgenden Schritte aus, um die Boost-Bibliothek auf Ihrem System zu installieren:

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  

GPU-spezifische Pakete

Wenn Sie CNTK mit GPU-Unterstützung verwenden möchten, folgen Sie dieser Seite, um die Umgebung entsprechend zu installieren und zu konfigurieren.

OPTIONAL. SWIG.

Wenn Sie CNTK von Python nutzen möchten, müssen Sie SWIG installieren. SWIG ist auch eine Anforderung zum Erstellen der CNTK Evaluierungsbibliotheken für Java. Führen Sie zum Installieren das Skript aus: [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh Dadurch wird die installierte Version im Ordner /usr/local/swig-3.0.10erstellt.

OPTIONAL. CNTK v2 Python-Unterstützung

In diesem Abschnitt wird beschrieben, wie Sie CNTK v2 mit Python-Unterstützung erstellen.

Schritt 1: Erstellen von Python-APIs

  • Installieren Sie das SWIG-Tool , wenn Sie dies noch nicht getan haben.
  • Installieren von Anaconda3 4.1.1 (64-Bit)
  • Wenn Sie bereits über eine CNTK Python-Umgebung (genannt cntk-py36, cntk-py35oder cntk-py27) verfügen, können Sie sie mit den neuesten erforderlichen Paketen mit den folgenden Befehlen aktualisieren:
# 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
  • Wenn Sie noch keine CNTK Python-Umgebung haben, können Sie zwischen einer Python 2.7-, 3.5- oder 3.6-basierten CNTK Python-Umgebung wählen.
  • Erstellen Sie Ihre Python-Umgebung in Ihrer vorhandenen Python 3.5 Anaconda- oder Miniconda-Installation mit einem der folgenden Befehle, je nach gewünschter Python-Version:
# 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

Hinweis: Stellen Sie sicher, dass die oben aktualisierte oder erstellte Python-Umgebung für den Rest der Anweisungen aktiviert ist. Wenn Sie beispielsweise python 3.5-basierte Umgebung mit dem Namen "Ausführen dieses Befehls" verwenden cntk-py35 :

source activate cntk-py35

Ähnlich wie bei einer Python 3.6- oder 2.7-basierten Umgebung.

Schritt 2: Deinstallieren des vorherigen CNTK Pakets

  • Wenn Sie zuvor eine Version des CNTK Pip-Pakets auf Ihrem Computer installiert haben, deinstallieren Sie sie, indem Sie folgendes ausführen:pip uninstall cntk

Schritt 3: Erstellen eines Python-Pakets

  • Um einen Build mit Python zu konfigurieren, schließen Sie diese zwei Optionen bei der Ausführung configureein:
--with-swig[=directory]

und eine der folgenden (was für Ihre Umgebung gilt):

--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
  • Nur Release-Builds werden in dieser Phase unterstützt. Wenn Sie z. B. SWIG auf /usr/local/swig-3.0.10 und Ihre Python-Umgebung installiert haben, werden $HOME/anaconda3/envs/cntk-py35 diese zusätzlichen Parameter bereitgestellt:configure
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
  • Führen Sie danach so aus, wie Sie es normal machen würden, was das CNTK Python-Modul innerhalb bindings/python/cntk erstellt und auch ein Paket (.whl) in einem Unterordner Ihres Buildausgabeordners (zbuild/gpu/release/python. B. ).
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

Hinweis

Im Gegensatz zum setup, das für die Pip-Paketinstallation angezeigt wird, laden wir hier das CNTK Modul aus dem CNTK Repository-Klon, nicht als installiertes Paket in Ihrer Python-Umgebung. (Daher ist auch der Unterschied bei der Einrichtung PYTHONPATH)

Schritt 4: Überprüfen der Einrichtung

Python

  • Führen Sie die Python-Beispiele innerhalb der [CNTK clone root]/Tutorials Oder [CNTK clone root]/Examples Verzeichnisse aus, um Ihre Installation zu überprüfen. Wechseln Sie z. B. zum Ordner [CNTK clone root]/Tutorials/NumpyInterop , und führen Sie sie aus python FeedForwardNet.py. Die folgende Ausgabe sollte in der Konsole angezeigt werden:
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

OPTIONAL. OpenCV

CNTK 2.2 erfordert, dass Open Source maschinelles Sehen (OpenCV) installiert werden soll, aber es ist optional nach CNTK 2.3. Folgen Sie dieser Seite , um sie zu installieren

OPTIONAL. Java

Um die Java-Bindungen für die CNTK Auswertungsbibliothek zu erstellen, installieren Sie das SWIG-Tool, wenn Sie dies noch nicht getan haben. Außerdem ist ein Java Development Kit (JDK) erforderlich. Derzeit verwenden wir 64-Bit OpenJDK 8.

Das Konfigurierenskript bietet --with-jdk Die Option zum Manuellen Angeben des JDK-Verzeichnisses, wenn es standardmäßig nicht gefunden werden kann.

Abrufen von CNTK Quellcode

Bevor Sie weiter fortfahren, beachten Sie bitte, dass Sie änderungen an dem CNTK Code vornehmen möchten, sollten Sie die Informationen zur Entwicklung und Prüfung lesen.

Verwenden Sie Git, um das CNTK-Repository zu klonen und auf den Quellcode zuzugreifen:

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

Untermodule Multiverso wird für die Aktivierung von DataParallelASGD für Schulungen verwendet.

Optional Wenn Sie keine DataParallelASGD-Unterstützung benötigen, übergeben Sie dann die Option --asgd=no an den Konfigurationsbefehl.

Gebäude CNTK

Verwenden Sie zum Erstellen CNTK die folgenden Befehle (wir nehmen an, dass das CNTK-Repository geklont wurde~/Repos/cntk):

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

Stellen Sie sicher, dass die configure Ausgabe den In den vorherigen Abschnitten installierten Paketen entspricht. Stellen Sie sicher, dass configure CUDA bei Installation usw. gefunden wird.

Führen Sie folgendes aus, um CNTK mit allen Kernen zu erstellen, um die Erstellungszeit zu minimieren. Beachten Sie, dass dies auf einem Computer das System überwältigen kann, das zu Hängen oder Unterbrechungen während des Builds führt.

make -j all

Wenn der obige Computer überfordert, versuchen Sie, weniger Kerne anzugeben. Wenn Sie beispielsweise mehr als 2 Kerne haben und 2 Kerne aus dem Build frei halten möchten, können Sie versuchen:

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

Wenn Sie absolut sicher sein möchten, verwenden Sie einfach 1 Kern:

make all

Dies sollte einen Release-Build von CNTK erzeugen. Wenn Sie einen Debug-Build abrufen möchten, verwenden Sie den folgenden Parameter beim Aufrufen configure:

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

Schnelltest der CNTK Buildfunktionen

Um sicherzustellen, dass CNTK in Ihrem System ordnungsgemäß funktioniert, können Sie schnell ein Beispiel aus dem Hallo Welt - Logistics Regression-Lernprogramm ausführen. In diesem Beispiel wird ein einfaches Netzwerk trainiert und kann entweder cpu oder GPU verwendet werden, wodurch schnell sichergestellt wird, dass CNTK ordnungsgemäß funktioniert.

Unten wird davon ausgegangen, dass das CNTK-Repository geklont ~/Repos/cntk und build/release als Unterverzeichnis für den Build verwendet wurde.

  • Geben Sie den Pfad zum CNTK Binärdateien an und ändern Sie sich in das Tutorials/HelloWorld-LogisticRegression Verzeichnis:
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression

Versuchen Sie zunächst das Beispiel:

cntk configFile=lr_bs.cntk makeMode=false

Wenn das Beispiel ausgeführt wird, d. h., wenn keine Fehlermeldungen vorhanden sind, erhalten Sie zuerst die Ausgabe im Zusammenhang mit dem Lesen der Konfiguration, gefolgt von der Ausgabe der tatsächlichen Netzwerkschulung.

Testen CNTK mit GPU

Wenn Sie CNTK für die GPU-Nutzung erstellt haben, versuchen Sie, die GPU zu verwenden, indem Sie die folgenden Befehle ausführen:

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

Am Anfang der Ausgabe sollten Sie eine Zeile sehen, die bestätigt, dass eine GPU verwendet wurde:

Model has 9 nodes. Using GPU 0.

Beachten Sie, dass die GPU-ID möglicherweise anders ist. Der deviceId Parameter definiert, welche Prozessor für die Berechnung verwendet werden sollen.

  • deviceId=-1 bedeutet, CPU zu verwenden. Standardwert
  • deviceId=X wobei X eine ganze Zahl >=0 ist, bedeutet GPU X, d. h. deviceId=0 GPU 0 usw.
  • deviceId=auto bedeutet, GPU zu verwenden, GPU automatisch auswählen

Beitrag zu CNTK Code

Wenn Sie Änderungen an dem Code planen, sollten Sie die Informationen zum Entwickeln und Testen lesen.

Nächste Schritte