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.10
erstellt.
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-py35
odercntk-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
configure
ein:
--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 auspython 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