Configurare CNTK in Linux
CNTK configurazione di compilazione e test di produzione
CNTK può essere eseguito correttamente in molte configurazioni Linux, ma nel caso in cui si voglia evitare possibili problemi di compatibilità, è possibile acquisire familiarità con CNTK configurazione di compilazione e test di produzione in cui sono elencate tutte le versioni di componenti e componenti di dipendenza usate.
CNTK come contenitore Docker
Prima di continuare, è possibile valutare la possibilità di distribuire CNTK come contenitore Docker. Leggere la sezione corrispondente.
Limitazioni e precauzioni correnti
Leggere attentamente questa sezione prima di procedere con la configurazione del sistema. Le informazioni seguenti possono risparmiare molto tempo altrimenti per il debug degli errori di compilazione.
Nota
Questa pagina presuppone che si stia tentando di compilare CNTK ramo master.
Percorsi dei componenti previsti negli script di configurazione e makefile
Attualmente configure
e Makefile
gli script supportano solo un set limitato di percorsi di installazione per tutti i componenti di dipendenza elencati in questa sezione. Sappiamo, che si tratta di una limitazione e lo correggerà presto (anche se si ritiene di migliorare questi script voi stessi e inviare le modifiche proposte il vostro aiuto è benvenuto e molto apprezzato).
configure
cerca tutti i componenti di dipendenza tra i percorsi elencati nella default_path_list
variabile definita nello script.
Importante
Per modificare default_path_list
la variabile in configure
per aggiungere un percorso personalizzato per un determinato componente di dipendenza, assicurarsi di controllare la sezione corrispondente di Makefile
. In caso contrario, è possibile che si verifichino errori di compilazione a causa dell'impossibilità di trovare file INCLUDE, librerie e così via.
Metodi di installazione e percorsi dei componenti di dipendenza
Di seguito sono elencati tutti i componenti di dipendenza necessari per compilare CNTK e spiegare come installarli. Sappiamo che esistono molti altri modi per ottenere gli stessi componenti. Tuttavia, se si preferisce un modo alternativo di installazione, assicurarsi di ottenere la stessa cosa, perché spesso origini di installazione alternative, ovvero pacchetti di distribuzione di rete (come Debian, RPM e così via) contengono versioni precedenti del software, perdere alcune librerie e così via. In alcune sezioni di seguito vengono evidenziate in modo specifico queste limitazioni, ma è consigliabile prenderla come precauzione generale.
Utilizzo di make -j
Nella maggior parte delle sezioni è consigliabile usare il make -j
comando per richiamare processi di compilazione paralleli e quindi aumentare la velocità del processo di compilazione. Tuttavia, tenere presente che in alcuni sistemi e in particolare nelle macchine virtuali che usano make -j
potrebbero verificarsi errori di memoria insufficiente. In questo caso, è sufficiente usare "normale" make
o limitare il numero di processi eseguiti contemporaneamente (due processi simultanei funzionano in genere per la maggior parte dei sistemi - usare il comando make -j 2
).
Installazione simultanea di versioni diverse degli stessi pacchetti di sviluppo
Prestare molta attenzione nel caso in cui si vogliano avere diverse installazioni di alcuni dei pacchetti di sviluppo indicati di seguito nello stesso sistema. Potrebbe risultare molto difficile eseguire il debug degli errori di compilazione come si può vedere in questo post.
E ora procediamo con la configurazione.
Per sapere quale configurazione dei prerequisiti viene usata nell'ambiente di produzione CNTK, ad esempio ciò che viene usato internamente per la compilazione e il test, vedere questa sezione
Sistema operativo a 64 bit
Per usare CNTK è necessaria un'installazione linux a 64 bit.
Compilatore C++
Verificare che l'installazione disponga di un compilatore C++. Molte distribuzioni non lo includono per impostazione predefinita. Vedere la documentazione della piattaforma su come verificare e ottenere un compilatore C++.
Esempio: per Ubuntu eseguire il comando seguente:
dpkg --list | grep compiler
se nell'output non viene visualizzato qualcosa di simile
g++-5 5.4.0-6ubuntu1~16.04.5 amd64 GNU C++ compiler
quindi non è installato un compilatore C++. Se si ha Ubuntu 1604, installare gcc 5.4 con:
sudo apt-get install g++
Git
Installare Git nel sistema come descritto qui.
MKL
La libreria matematica predefinita CNTK è Intel Math Kernel Library (Intel MKL).The default CNTK math library is the Intel Math Kernel Library (Intel MKL). Seguire questa pagina per installarla
Aprire MPI
Installare Open Message Passing Interface Library (Open MPI).
È consigliabile eseguire l'installazione da origini come descritto di seguito perché molti pacchetti di distribuzione contengono versioni precedenti e mancano le librerie richieste da CNTK. Il requisito corrente CNTK versione Open MPI è almeno 1.10. Controllare se nel sistema sono presenti installazioni di versioni precedenti e, in caso affermativo, disinstallarle o assicurarsi (ad esempio, collegamenti simbolici) che CNTK procedura di compilazione usi la versione richiesta. In caso contrario, potrebbe essere difficile eseguire il debug degli errori di compilazione come si può vedere in questo post.
- Ottenere le origini di installazione:
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
- Decomprimere, compilare e installare Open MPI (in
/usr/local/mpi
questo esempio):
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
- Aggiungere la variabile di ambiente seguente alla sessione corrente e al
.bashrc
profilo (Prepending the new path, assicura che questa versione venga usata anziché una versione predefinita disponibile tramite il sistema operativo):
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH
Protobuf
Per la serializzazione si usano i buffer del protocollo. Per l'installazione, seguire questa procedura:
- Installare i pacchetti necessari usando
sudo apt-get install autoconf automake libtool curl make g++ unzip
- Scaricare e decomprimere le origini protobuf
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
- Compilare 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 oggi fa parte di molte distribuzioni Linux più diffuse, quindi con la probabilità elevata che è preinstallata. Si noti tuttavia che libzip richiede zlib versione 1.1.2 o successiva e questo in genere non è preinstallato. Zlib deve essere installato prima di compilare Boost di seguito.
Vedere la documentazione della piattaforma su come ottenere il pacchetto zlib necessario o ottenerlo direttamente dal sito Web zlib.
Esempio: per Ubuntu usare il comando seguente:
sudo apt-get install zlib1g-dev
LIBZIP
libzip è disponibile in pacchetti di distribuzione di rete diversi, ma molti di essi contengono versioni precedenti. L'uso di queste versioni genererà probabilmente errori di compilazione. È quindi consigliabile compilare libzip da origini come descritto di seguito.
Si noti che la procedura seguente installerà libzip in /usr/local
. Questa è esattamente la posizione in cui CNTK procedura di compilazione è prevista (vedere l'inizio di questa pagina per informazioni dettagliate). Se si vuole installare libzip in un percorso diverso, vedere le istruzioni nel INSTALL
file nella radice della cartella di distribuzione libzip.
Tuttavia, tenere presente che in questo caso è necessario modificare configure
manualmente AND Makefile
di CNTK per supportare questo percorso.
Usare il seguente comando:
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
Aggiungere la variabile di ambiente seguente alla sessione corrente e al .bashrc
profilo:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
Boost Library
La libreria Boost è un prerequisito per la compilazione del Microsoft Cognitive Toolkit. Seguire questa procedura per installare la libreria Boost nel sistema:
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
Pacchetti specifici della GPU
Se si intende usare CNTK con supporto GPU, seguire questa pagina per installare e configurare l'ambiente di conseguenza.
FACOLTATIVO SORSO.
Se si vuole sfruttare i vantaggi di CNTK da Python, è necessario installare SWIG.
SWIG è anche un requisito per compilare le librerie di valutazione CNTK per Java.
Per installarlo, eseguire lo script : [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh
.
Verrà creata la versione installata nella cartella /usr/local/swig-3.0.10
.
FACOLTATIVO supporto di Python CNTK v2
Questa sezione descrive come compilare CNTK v2 con il supporto di Python.
Passaggio 1: Compilare API Python
- Installare lo strumento SWIG se non è ancora stato fatto.
- Installare Anaconda3 4.1.1 (64 bit)
- Se si dispone già di un ambiente Python CNTK (denominato
cntk-py36
,cntk-py35
ocntk-py27
) è possibile aggiornarlo con i pacchetti necessari più recenti con i comandi seguenti:
# 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
- Se non si dispone ancora di un ambiente Python CNTK, è possibile scegliere tra un ambiente Python 2.7, 3.5 o 3.6 basato su CNTK Python.
- Creare l'ambiente Python preferito nell'installazione di Python 3.5 Anaconda o Miniconda esistente usando uno dei comandi seguenti, a seconda della versione di Python desiderata:
# 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
Nota: assicurarsi che l'ambiente Python aggiornato o creato in precedenza sia attivato per il resto delle istruzioni.
Ad esempio, se si dispone di un ambiente basato su Python 3.5 denominato cntk-py35
eseguire questo comando:
source activate cntk-py35
Analogamente, per un ambiente basato su Python 3.6 o 2.7.
Passaggio 2: Disinstallare il pacchetto di CNTK precedente
- Se in precedenza è stata installata qualsiasi versione del CNTK pip-package nel computer, disinstallarla eseguendo:
pip uninstall cntk
Passaggio 3: Compilare il pacchetto Python
- Per configurare una compilazione con Python, includere questa due opzioni durante l'esecuzione
configure
di :
--with-swig[=directory]
e uno dei seguenti (qualsiasi cosa si applica all'ambiente):
--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
- In questa fase sono supportate solo le build di versione. Ad esempio, se è stato installato SWIG in
/usr/local/swig-3.0.10
e l'ambiente Python si trova in$HOME/anaconda3/envs/cntk-py35
fornire questi parametri aggiuntivi aconfigure
:
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
- In seguito, eseguire come normalmente si farebbe, che creerà il modulo Python CNTK all'interno
bindings/python/cntk
e produce anche un pacchetto (.whl) in una sottocartella python della cartella di output della compilazione (ad esempio,build/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
Nota
Al contrario dell'installazione illustrata per l'installazione del pacchetto Pip, verrà caricato il modulo CNTK dal clone del repository CNTK, non come pacchetto installato nell'ambiente Python. (di conseguenza anche la differenza nella configurazione PYTHONPATH
)
Passaggio 4: Verificare la configurazione
Python
- Eseguire gli esempi python dall'interno delle
[CNTK clone root]/Tutorials
directory o[CNTK clone root]/Examples
per verificare l'installazione. Ad esempio, passare alla cartella[CNTK clone root]/Tutorials/NumpyInterop
ed eseguirepython FeedForwardNet.py
. Verrà visualizzato l'output seguente nella 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
FACOLTATIVO OpenCV
CNTK 2.2 richiede l'installazione di Open Source Visione artificiale (OpenCV), ma è facoltativo dopo CNTK 2.3. Seguire questa pagina per installarla
FACOLTATIVO Java
Per compilare le associazioni Java per la libreria di valutazione CNTK, installare lo strumento SWIG se non è ancora stato fatto. È inoltre necessario un Java Development Kit (JDK). Attualmente si usa OpenJDK a 64 bit 8.
Lo script di configurazione offre --with-jdk
l'opzione per specificare manualmente la directory JDK, se non è possibile trovare per impostazione predefinita.
Recupero di codice sorgente CNTK
Prima di procedere ulteriormente, si noti che se si prevede di apportare modifiche al codice CNTK è necessario leggere le informazioni su Sviluppo e test.
Usare Git per clonare il repository CNTK e accedere al codice sorgente:
git clone --recursive https://github.com/Microsoft/cntk
cd cntk
Il modulo secondario Multiverso viene usato per abilitare DataParallelASGD per il training.
Opzionale Se non è necessario il supporto di DataParallelASGD, passare l'opzione --asgd=no
al comando configura.
Compilazione di CNTK
Per compilare CNTK usare i comandi seguenti (si presuppone che il repository CNTK sia stato clonato in ~/Repos/cntk
):
cd ~/Repos/cntk
mkdir build/release -p
cd build/release
../../configure
Assicurarsi che l'output configure
corrisponda ai pacchetti installati nelle sezioni precedenti. Assicurarsi, ad esempio, di configure
trovare CUDA se installato e così via.
Eseguire le operazioni seguenti per compilare CNTK usando tutti i core per ridurre al minimo il tempo di compilazione. Si noti che in alcuni computer, questo può sovraccaricare il sistema causando blocchi o interruzioni durante la compilazione.
make -j all
Se l'oggetto precedente supera il computer, provare a specificare meno core. Ad esempio, se sono presenti più di 2 core e si desidera mantenere 2 core liberi dalla compilazione, è possibile provare:
make -j"$(($(nproc) - 2))" all
Se si vuole essere assolutamente sicuri, usare solo 1 core:
make all
Questo deve produrre una build di versione di CNTK. Se si vuole ottenere una compilazione di debug, usare il parametro seguente quando si richiama configure
:
../../configure --with-buildtype=debug
Test rapido delle funzionalità di compilazione CNTK
Per assicurarsi che CNTK funzioni correttamente nel sistema, è possibile eseguire rapidamente un esempio dall'esercitazione Hello World - Regressione logistica. Questo esempio esegue il training di una rete semplice e può essere indirizzato all'uso della CPU o della GPU, che consente di garantire rapidamente che CNTK funzioni correttamente.
Di seguito si presuppone che il repository di CNTK sia clonato in ~/Repos/cntk
e build/release
sia stato usato come sotto directory per la compilazione.
- Specificare il percorso dei file binari CNTK e passare alla
Tutorials/HelloWorld-LogisticRegression
directory:
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression
Provare prima di tutto l'esempio:
cntk configFile=lr_bs.cntk makeMode=false
Se l'esempio viene eseguito, ad esempio, se non sono presenti messaggi di errore, verrà visualizzato prima l'output correlato alla lettura della configurazione, seguito dall'output del training di rete effettivo.
Tentativo di CNTK con GPU
Se è stato creato CNTK per l'utilizzo della GPU, provare a usare la GPU eseguendo i comandi seguenti:
cntk configFile=lr_bs.cntk makeMode=false deviceId=auto
All'inizio dell'output dovrebbe essere visualizzata una riga che conferma che è stata usata una GPU:
Model has 9 nodes. Using GPU 0.
Si noti che l'ID GPU può essere diverso. Il deviceId
parametro definisce il processore da usare per il calcolo.
-
deviceId=-1
significa usare la CPU. Valore predefinito -
deviceId=X
dove X è un intero >=0 significa usare GPU X, ad esempiodeviceId=0
significa GPU 0 e così via. -
deviceId=auto
significa usare GPU, selezionare automaticamente GPU
Contributo al codice CNTK
Se si pianificano modifiche al codice, è necessario leggere le informazioni su Sviluppo e test.
Passaggi successivi